Включите исполнение JavaScript в браузере, чтобы запустить приложение.
21 янв 2025

DBT: что это такое и как он трансформирует данные

Среди проблем, с которыми сталкиваются компании, одна из основных — быстрый рост объемов данных. Это усложняет процессы обработки, что часто приводит к значительной неэффективности и неточностям в принятии решений. Может возникнуть задержка в получении информации или увеличение операционных расходов. В качестве вспомогательного инструмента используется Data Build Tool (DBT). В статье расскажем, что такое DBT, как он работает и какими преимуществами обладает.

Что такое DBT (Data Build Tool)

DBT — это инструмент с открытым исходным кодом, разработанный для помощи организациям в создании, тестировании и обслуживании инфраструктуры данных. 

Основная функциональность фреймворка заключается в создании и проверке моделей данных. Инженеры по анализу данных и аналитики в основном используют его для создания моделей, инкапсулирующих фундаментальную бизнес-логику. Это упрощает преобразование необработанной информации с помощью передовых методов аналитики.

Например, аналитик может легко создать модель данных, которая рассчитывает общий доход за определенный период. Он комбинирует таблицы, содержащие информацию о продажах и сведения о продукте. Эта повторно используемая модель может быть включена в другой проект хранилища с помощью анализа.

Основные функции и преимущества DBT

Среди функций инструмента отметим следующие:

  • оптимизация производительности — DBT повышает эффективность за счет поддержки инкрементных сборок. Это позволяет обрабатывать только изменения в данных, внесенные после последнего успешного запуска, тем самым сводя к минимуму использование вычислительных ресурсов и сокращая время обработки;
  • автоматизированное тестирование — оно гарантирует, что преобразования данных дают качественные и точные результаты. А также позволяет поддерживать их целостность;
  • поддержка хранилищ — помогает интегрировать, управлять и анализировать массивные данные в централизованном хранилище. Есть возможность работы с несколькими хранилищами данных — BigQuery, Redshift и Snowflake;
  • непрерывная интеграция и развертывание — фреймворк легко интегрируется с конвейерами CI/CD, инструментами развертывания и системами контроля версий. Это позволяет командам разработчиков автоматизировать тестирование и развертывание конвейеров.

Использование DBT предоставляет организациям множество преимуществ, в том числе:

  • повышение производительности всех групп обработки данных;
  • воспроизводимые преобразования;
  • масштабируемость;
  • обеспечение качества данных;
  • гибкость;
  • поддержку документации.

Возможность написать стандартный код один раз и повторно использовать его многократно сокращает время, затрачиваемое на кодирование. А также повышает эффективность обработки информации. Простой пример — применение повторно используемых функций или модулей в языке программирования.

Тестирование целостности данных с помощью DBT также становится проще. Объединив Jinja с SQL, можно легко превратить проект в среду программирования для SQL. Фреймворк может применить тест к заданному столбцу, просто сославшись на него в том же YAML-файле. Он дает возможность настроить группы контейнеров для разного вида развертываний. Data Build Tool работает как уровень согласования поверх вашего хранилища. Это улучшает и ускоряет процесс преобразования данных и интеграции. Он позволяет программному коду выполнять все вычисления на уровне базы данных, помогая ускорить, обезопасить и упростить обслуживание процесса преобразования. 

В Data Build Tool есть функция, которая автоматизирует планирование обновления производственных данных с требуемой периодичностью. Она также предоставляет различные способы обеспечения контроля качества. Можно создавать проверки целостности данных при разработке документации для любой заданной модели. В сервисе есть функция добавления пользовательских тестов данных, управляемых бизнес-логикой.

DBT имеет открытый исходный код и предлагает большую библиотеку справочных документов, руководств по установке. Также есть доступ к пакетам — библиотекам моделей и макросов. Там можно найти конкретные проблемы пользователей, для которых уже есть решения.

Как работает DBT

С появлением технологии ETL специальные инструменты без использования кода, такие как Hevo Data и Stich Data, полностью автоматизировали процесс преобразования. Они позволили реплицировать исходную информацию из нескольких источников в центральное хранилище. Однако data-моделирование остается большой проблемой.

Компании часто предпочитают использовать код с помощью Airflow. Этот метод иногда недоступен, поскольку он полностью написан на Python и требует большой инфраструктуры. Или же они прибегают к моделированию GUI (графического интерфейса пользователя) с помощью таких инструментов, как Looker. Как правило, эти инструменты стоят дорого, а также возникают проблемы с их обслуживанием. На помощь приходит DBT, который действует как уровень согласования поверх хранилища. Основные процессы, задействованные в DBT:

  • разработка — с помощью простых инструкций SQL SELECT можно создавать модульные преобразования, таблицы и представления, запускать модели по порядку. Также удобно использовать пакеты Python для комплексного анализа;
  • тестирование и документация — при разработке модели можно сначала протестировать ее. Data Build Tool также динамически генерирует подробную документацию, состоящую из проверенных допущений, графиков зависимостей и динамических словарей. Можно поделиться результатами с коллегами — это повышает прозрачность данных;
  • развертывание с контролем версий — легко развернуть свой код, используя среды разработки. Можно применить систему контроля версий с поддержкой Git, чтобы вернуться к предыдущим состояниям. Есть возможность контролировать рабочие процессы преобразования с помощью планирования, ведения журнала и оповещений в приложении.

Архитектура и ключевые компоненты

Основные компоненты включают модели, тесты, документацию и исходные тексты.

Модели. Это центральное понятие в DBT. Они представляют собой инструкции SQL SELECT, которые инструмент выполняет в хранилище для преобразования необработанных data в формат, более удобный для аналитики. Модель обычно реализуется в виде представления или таблицы и может быть простой или сложной.

Тесты. Они обеспечивают качество и целостность данных, проверяют уникальность, ненулевые ограничения и ссылочную целостность. Тесты определены в файлах YAML и выполняются для моделей, чтобы подтвердить соответствие data указанным критериям.

Документация. Каждая модель, тест и исходный код могут быть задокументированы с помощью описаний. Это облегчает командам понимание и поддержку преобразований данных. Фреймворк может создать веб-сайт документации на основе этих описаний. Он предоставляет доступное для поиска и удобное для пользователя представление о происхождении информации.

Источники. Определяют исходные data в вашем хранилище, которые будут преобразованы моделями. А также позволяют обновлять информацию, добавлять описания и определять тесты для data-формата.

Благодаря ключевым компонентам фреймворка команды могут применять передовые методы разработки программного обеспечения для преобразования данных. Это обеспечивает надежность, документированность и простоту тестирования модели. Такой подход упрощает процесс ELT (интеграции данных) и обеспечивает более быстрый и точный анализ информации.

Установка и настройка DBT

Перед установкой DBT убедитесь в следующем:

  • в системе установлен Python, так как DBT написан именно на нем. Вы можете загрузить и установить Python с официального сайта;
  • для взаимодействия с DBT понадобится терминал или командная строка (CLI).

Установите DBT с помощью pip (система для установки программных пакетов). После установки Python откройте терминал или командную строку. Выполните следующую команду:

pip install dbt
py

После завершения установки можно проверить правильность установки с помощью следующей команды:

dbt --version
py

Она должна отображать версию DBT, которая была установлена в системе.

Понадобится базовый data-источник, который может использовать DBT. Фреймворк не ограничивается облачными хранилищами и может подключаться ко многим локальным источникам — PostgreSQL, MySQL и SQLite.

Рассмотрим пример с PostgreSQL. После загрузки и запуска программы установки на компьютере был создан локальный сервер. Нужно создать суперпользователя, который выполняет функции администратора БД. После установки и настройки Postgres понадобятся уже существующие таблицы для хранения исходной информации, чтобы воссоздать схему.

Также нужно выбрать IDE (интегрированную среду разработки) для работы с SQL, которая поддерживает DBT. Например, VSCode. У него есть расширения, которые могут значительно улучшить качество работы при работе SQL. Это vscode-dbt, dbt Power User и Better Jinja. 

После установки Python рекомендуется создать специальную среду для фреймворка. После активации виртуальной среды можно приступить к использованию DBT.

Есть утилита под названием jafgen, которая может автоматически генерировать CSV-файлы (табличные данные) на основе классического примера Jaffle Shop. Выполнение этих двух команд приведет к установке jafgen:

pip install jafgen

jafgen --years 3
py

CSV-файлы могут быть загружены в таблицы. Или же с помощью инструмента импорта данных в приложении pgAdmin (установленного ранее вместе с сервером Postgres).

Нужно сообщить фреймворку, как подключиться к данным. Ранее был создан важный файл profiles.yml. По умолчанию он находится в папке \.dbt домашнего каталога (например: C:\Users\acarmichael\.dbt). В этом файле можно определить среды разработки и тестирования, а также найти сведения о подключении. После настройки профиля подключения можно отредактировать свой файл dbt_project.yml, чтобы использовать этот профиль.

В некоторых случаях лучше использовать секционированные таблицы. Однако нельзя контролировать этот источник данных, поэтому можно самостоятельно материализовать таблицы с разбивкой по датам. Иногда data-набор Google Analytics 4 довольно большой. Это приводит к дополнительным затратам из-за дублирования. Лучше фильтровать по _table_suffix вместо столбца даты. Необходимо создать макрос для вставки execution_date в параметр псевдонима. В примере столбец table_suffix ссылается на псевдостолбец BigQuery _table_suffix:

{{

config(

materialized = 'incremental',

partition_by = {'field': 'session_start_at', 'data_type': 'timestamp'},

incremental_strategy = 'insert_overwrite',

tags=['incremental']

)

}}

-- google analytics 4 events

with events as (

select

*

from {{ ref('stg_google_analytics__events') }}

{% if var('execution_date', 'notset') != 'notset' %}

where

-- specific date set by variable (using the table_suffix pseudo column for performance)

table_suffix = '{{ var('execution_date') }}'

{% elif is_incremental() %}

where

-- incremental data (using the table_suffix pseudo column for performance)

table_suffix between format_date('%Y%m%d', date(_dbt_max_partition))

and format_date('%Y%m%d', date_sub(current_date(), interval 1 day))

{% endif %}

)

select *

from events
py

Использование DBT на практике

Важно задокументировать источники, которые используются в моделях. Это также один из файлов YAML, в котором определяются источники. Можно добавить описание не только к названию источника, но и к названию каждой таблицы и столбца. Тщательное документирование поможет другим сотрудникам команды понять код, который пишут другие. Это позволит им также внести свой вклад в проект, сведя к минимуму количество вопросов. Пример:

sources:
 - name: google_sheets
   database: raw 
   schema*: madison_google_sheets 
   description: This is a replica of the Postgres database used by our app
   tables:
     - name: customer_orders
       description: >
         Inventory of orders placed by customers. 
       columns:
         - name: id
           description: Primary key of the customer orders table
         - name: customer_id
           description: The unique identifier of a customer
         - name: order_id
           description: The unique identifier of an order
         - name: product_quantity
           description: The number of products in the order 
py

Фреймворк использует промежуточные модели для сохранения целостности исходных материалов. Промежуточные модели считывают данные из исходника, который был определен, и затем ссылаются на них в последующих моделях. Они существуют не только для защиты исходника, но и для их стандартизации. Именно на промежуточном уровне стандартизируются data в различных источниках.

Например, можно присвоить всем столбцам даты тип «date» и заканчивать их на «_date». Это нужно, чтобы пользователь, запрашивающий данные, знал, что находится в столбце. Промежуточная модель обычно выглядит следующим образом:

SELECT

Id AS customer_order_id,

Customer_id::varchar AS customer_id,

Order_id::varchar AS order_id,

Product_and_quantity

FROM {{ source('google_sheets', 'customer_orders') }}
py

Как DBT помогает в аналитике данных

Наличие значительного количества журналов практически неизбежно при работе с цифровым продуктом и растущей базой пользователей. Работа с большими наборами данных необходима для извлечения ценной информации.

Функция материализации таблиц помогает добавить записи об области продукции в новой таблице и проводить анализ на ее основе, а не с помощью журналов. Поскольку data предварительно вычислены и хранятся в новой таблице, запросы будут обрабатываться быстрее, чем выполнение всего конвейера преобразования каждый раз. Это также должно значительно сократить время обновления панели мониторинга вначале ее использования в качестве источника информации вместо основной таблицы журналов.

Функция моментального снимка помогает делать образ таблицы через определенные промежутки времени и внедрять SCDS (медленно меняющиеся измерения) второго типа. Это позволяет понять, какие записи изменяли за определенные периоды времени.

DBT предлагает 4 готовых теста: unique, not_null, accepted_value и relationships. Пользовательские универсальные тесты также можно реализовать, просто создав файл в пути тестирования проекта. 

Пример использования этих универсальных тестов для модели с именем payments:

version: 2

models:

  - name: payments

    columns:

      - name: payment_id

        tests:

          - unique

          - not_null

      - name: status

        tests:

          - accepted_values:

              values: ['accepted', 'declined', 'in process']

      - name: store_id

        tests:

          - relationships:

              to: ref('stores')

              field: id
py

Интеграция DBT с другими инструментами

Инструмент обладает высокой гибкостью и может интегрироваться с различными платформами обработки данных — базами данных, хранилищами и механизмами обработки запросов. 

Фреймворк обеспечивает простое взаимодействие с различными реляционными бд — PostgreSQL, MySQL, Microsoft SQL Server и SQLite. Благодаря простому процессу настройки в файле profiles.yml можно легко установить соединения с любой из этих БД. После успешного подключения к необходимой базе данных легко использовать запросы на основе SQL для выполнения различных задач — моделирования, преобразования и анализа информации.

Data build tool предлагает интеграцию с ведущими платформами для хранения:Snowflake, Amazon Redshift, Google BigQuery и Microsoft Azure Synapse Analytics. Сервис может взаимодействовать с механизмами обработки запросов — Apache Drill и Presto. Это позволяет применять SQL-запросы для data-запроса из нескольких источников.

Распространенные ошибки и проблемы при использовании DBT

Отказ от проверок качества. Важно уделять внимание качеству data. В модульном тестировании это означает тщательную проверку каждого преобразования, объединения и агрегации.

Проведение только встроенных тестов. Делать исключительно встроенные тесты — пропускать потенциальные ошибки. У каждой организации есть свои уникальные особенности, правила. Нет гарантии, что встроенные тесты учтут эти тонкости.

Несогласованное тестирование в разных data-наборах. При интеграции сразу нескольких наборов могут возникнуть ошибки. Надежные тесты для первичного формата нельзя применять к новому интегрированному виду. В новом формате могут быть другие соглашения, представления нулевых значений и даже некоторые столбцы, которых не было в исходном варианте. 

Заключение

Data build tool позволяет организациям повысить эффективность, улучшить качество данных. Инструмент упрощает совместную работу и возможность повторного использования, предоставляет оптимизированный подход к преобразованию данных.

Благодаря своей универсальности и мощным функциям DBT — полезный инструмент для компаний, стремящихся оптимизировать процессы преобразования информации для принятия более эффективных решений.