Skip to content
EN

dbt (data build tool)

Коротко:

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.

Проверить свой сайт →

Подробности

  • Models: .sql files, one per table/view
  • ref(): lineage-aware table references → auto DAG
  • Materializations: view / table / incremental / snapshot
  • Tests: not_null, unique, accepted_values, custom
  • Docs: auto-generated с column descriptions + lineage graph
  • Adapters: Snowflake, BigQuery, Redshift, Postgres, DuckDB, ClickHouse

Пример

-- 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?

dbt (data build tool) — это инструмент, позволяющий аналитикам и инженерам данных трансформировать и моделировать данные в вашем хранилище данных с помощью простых SQL-запросов. Он использует концепцию ELT (Extract, Load, Transform), что означает, что данные сначала извлекаются и загружаются в хранилище, а затем трансформируются с помощью dbt. Это позволяет пользователям работать с данными напрямую в своем хранилище, облегчая создание отчетов и анализ.

Как установить и настроить 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, чтобы выполнить все модели и применить трансформации к данным.

Практический пример использования dbt

Предположим, у вас есть таблица 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

Это обеспечит качество данных и уверенность в их корректности при проведении дальнейшего анализа.

Больше по теме

Часто задаваемые вопросы

dbt Core vs Cloud?

Core: free, CLI, self-host. Cloud: SaaS + web IDE + scheduling + docs hosting + CI/CD, $100-200/dev/мес. Для small teams — core + Airflow; enterprise — Cloud.

Alternatives?

SQLMesh (newer, Python-based), Apache Airflow tasks, Dataform (Google). Для non-SQL ELT: Fivetran/Airbyte + Python.

Incremental models?

materialized="incremental" + unique_key — dbt детектирует changed rows, runs INSERT/UPDATE только для них. Huge cost savings vs full refresh.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.