Что такое 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
После завершения установки можно проверить правильность установки с помощью следующей команды:
dbt --version
Она должна отображать версию 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
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
Использование 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
Фреймворк использует промежуточные модели для сохранения целостности исходных материалов. Промежуточные модели считывают данные из исходника, который был определен, и затем ссылаются на них в последующих моделях. Они существуют не только для защиты исходника, но и для их стандартизации. Именно на промежуточном уровне стандартизируются 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') }}
Как 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
Интеграция 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 — полезный инструмент для компаний, стремящихся оптимизировать процессы преобразования информации для принятия более эффективных решений.