dbt — tool для transforming data в warehouse через SQL. Paradigm: define models как SQL select statements, dbt compiles DAG, материализует в таблицы/views, runs tests, generates docs. Core того, что называется "modern data stack". Open-source dbt-core + SaaS dbt Cloud. Used by: Airbnb, Monzo, HelloFresh, 1000s startup data teams.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
-- models/orders_summary.sql
{{ config(materialized='table') }}
SELECT
DATE_TRUNC('day', order_date) AS day,
COUNT(*) AS orders,
SUM(amount) AS revenue
FROM {{ ref('orders') }}
WHERE status = 'completed'
GROUP BY 1
-- schema.yml
models:
- name: orders_summary
columns:
- name: day
tests: [not_null, unique]dbt (data build tool) — это инструмент, позволяющий аналитикам и инженерам данных трансформировать и моделировать данные в вашем хранилище данных с помощью простых SQL-запросов. Он использует концепцию ELT (Extract, Load, Transform), что означает, что данные сначала извлекаются и загружаются в хранилище, а затем трансформируются с помощью dbt. Это позволяет пользователям работать с данными напрямую в своем хранилище, облегчая создание отчетов и анализ.
Для начала работы с dbt необходимо установить его на вашем локальном компьютере или сервере. Установка dbt происходит через pip, пакетный менеджер для Python. Используйте следующую команду:
pip install dbtПосле установки dbt необходимо создать проект. Для этого выполните команду:
dbt init my_projectЭто создаст структуру папок и файлов, необходимых для работы с проектом dbt. Важно настроить файл profiles.yml, который содержит информацию о вашем хранилище данных. Пример настройки для PostgreSQL:
my_project:
target: dev
outputs:
dev:
type: postgres
threads: 1
host: your_host
port: 5432
user: your_user
pass: your_password
dbname: your_db
schema: your_schemaПосле настройки вы можете запустить команду dbt run, чтобы выполнить все модели и применить трансформации к данным.
Предположим, у вас есть таблица sales в вашем хранилище данных, и вы хотите создать модель, которая вычисляет общую сумму продаж по категориям. Для этого создайте файл модели в директории models вашего проекта, например, total_sales_by_category.sql. Внутри файла напишите следующий SQL-код:
WITH sales_data AS (
SELECT
category,
SUM(amount) AS total_amount
FROM
{{ ref('sales') }}
GROUP BY
category
)
SELECT * FROM sales_data;Здесь используется функция ref, которая позволяет ссылаться на другие модели dbt, что упрощает управление зависимостями. После создания модели выполните команду dbt run для ее обработки. Вы можете также добавить тесты для проверки корректности данных, используя dbt test. Например, чтобы убедиться, что сумма не равна нулю, добавьте следующий тест в файл schema.yml:
version: 2
models:
- name: total_sales_by_category
columns:
- name: total_amount
tests:
- not_nullЭто обеспечит качество данных и уверенность в их корректности при проведении дальнейшего анализа.
Core: free, CLI, self-host. Cloud: SaaS + web IDE + scheduling + docs hosting + CI/CD, $100-200/dev/мес. Для small teams — core + Airflow; enterprise — Cloud.
SQLMesh (newer, Python-based), Apache Airflow tasks, Dataform (Google). Для non-SQL ELT: Fivetran/Airbyte + Python.
materialized="incremental" + unique_key — dbt детектирует changed rows, runs INSERT/UPDATE только для них. Huge cost savings vs full refresh.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.