dbt Core, Snowflake и GitHub Actions домашний проект для инженеров данных

Dbt Core, Snowflake и GitHub Actions домашний проект для инженеров данных в области beauty и fashion

Творческий проект для инженеров по обработке данных: Исследование современных инструментов стека данных — dbt Core, Snowflake, Fivetran, GitHub Actions.

Фото от Gaining Visuals на Unsplash

Вот простой и быстрый творческий проект для инженеров по обработке данных, которые хотят попробовать современные инструменты стека данных, включая dbt Core, Snowflake, Fivetran и GitHub Actions. Это практическое занятие позволит вам разработать полный цикл жизни данных, начиная с извлечения данных из Google Календаря и заканчивая их представлением в аналитической панели инструментов Snowflake. В этой статье я расскажу вам о проекте, поделившись своими идеями и советами по пути. См. репозиторий на GitHub.

Технический обзор

Архитектура проекта изображена следующим образом: Google Календарь -> Fivetran -> Snowflake -> dbt -> Аналитическая панель инструментов Snowflake, с управлением развертыванием через GitHub Actions.

Архитектура

Ссылаясь на работу Джо Рэйса “Основы инженерии данных”, давайте рассмотрим наш проект в соответствии с определенными этапами жизненного цикла данных:

Жизненный цикл инженерии данных [1]
  • Генерация данных — Google Календарь, FivetranЕсли вы пользователь Google Календаря, вероятно, у вас там накопилось множество данных. Теперь вы можете легко получить их из своей учетной записи, воспользовавшись инструментом “платформы передвижения данных” под названием Fivetran. Этот инструмент автоматизирует процесс ELT (извлечение, загрузка, преобразование) и интегрирует ваши данные из системы источника Google Календаря в нашу аналитическую базу данных Snowflake. В настоящее время Fivetran предлагает 14-дневную бесплатную пробную версию — ссылка. Регистрация очень простая.
  • Хранение данных — SnowflakeSnowflake, облачная аналитическая база данных, специально разработанная для аналитических задач, будет служить нашим решением для хранения данных. Объем данных, с которым мы будем работать, небольшой, поэтому мы не будем злоупотреблять функциями разделения данных, предоставляемыми Snowflake, такими как временное путешествие, Snowpark и другие расширенные возможности Snowflake. Однако мы особое внимание уделим контролю доступа (он будет использоваться для доступа к dbt). Вам необходимо настроить пробный аккаунт, который предоставляет вам 30 дней бесплатного использования и лимит в 400 долларов для версии Enterprise.
  • Прием данных — FivetranПрием данных можно настроить как в Fivetran, так и в Snowflake с помощью функции Partner Connect. Выберите предпочитаемый вариант и настройте подключение к Google Календарю. После первоначальной синхронизации вы сможете получить доступ к своим данным через пользовательский интерфейс Snowflake. Вы можете перейти на веб-страницу подключения, чтобы увидеть схему данных здесь.Будет создана новая база данных, специально для синхронизации с Fivetran, и соответствующий контейнер для выполнения SQL-загрузок. Как вы, возможно, знаете, Snowflake построена на разделении хранилища и вычислительных мощностей, поэтому расходы также разделены. В качестве bewt практики вы должны использовать разные контейнеры для разных рабочих нагрузок (ад-хок, синхронизация, BI-аналитика) или разных сред (dev, prod).
Перейдите на Partner Connect для подключения Fivetran
Настройка соединения с календарем Google в Fivetran
Синхронизированные данные появляются в Snowflake
  • Трансформация – dbt Core С данными, находящимися в Snowflake (и автоматически синхронизирующимися каждые 6 часов по умолчанию), мы переходим к стадии трансформации с использованием dbt Core. dbt (data build tool) упрощает модуляризацию SQL-запросов, обеспечивая возможность повторного использования и управления версиями SQL-рабочих процессов, подобно управлению программным кодом. Есть два способа доступа к dbt: dbt Cloud и dbt Core. dbt Cloud – это платная облачная версия сервиса, а dbt Core – это пакет Python, предоставляющий все функциональные возможности, которые вы можете использовать бесплатно.Установите dbt Core на свою машину, инициализируйте проект, используя команду “dbt init” в интерфейсе командной строки и настройте подключение Snowflake. Пример моего файла profiles.yml. Для возможности подключения к Snowflake нам также потребуется выполнить набор команд SQL DCL (Data Control Language), их можно найти здесь. Следуя принципу привилегии наименьшего доступа, мы создадим отдельного пользователя для dbt и предоставим ему доступ только к исходной базе данных (где происходит синхронизация данных Fivetran) и разработке и производственным базам данных (где мы поместим преобразованные данные).
  • Следуя лучшей практике структурированного подхода, вам необходимо создать три папки, представляющие слои стадии подготовки, промежуточного и marts ваших трансформаций данных. Здесь вы можете экспериментировать с вашими моделями, а также можете скопировать мои примеры для данных Google Календаря. В репозитории вы найдете файл “sources.yml”, в котором перечислены все таблицы в схеме Google Calendar. Там созданы 3 модели подготовки (event.sql, attendee.sql, recurrence.sql), 1 модель преобразования (utc_event.sql) и 1 модель марта (event_attendee_summary.sql).Важные особенности dbt – Jinja и макросы, которые можно вплести в SQL, улучшая его воздействие и повторное использование.
Выберите разные типы материализации моделей
  • Установите ожидания данных, используя общие или единичные тесты в dbt, чтобы обеспечить качество данных. Некоторые правила качества данных расположены в файле “source.yml”, а также в папке “/tests”. При выполнении команды “dbt build” эти проверки качества данных будут запущены вместе с сборкой моделей, чтобы предотвратить повреждение данных.
Вы можете выполнять тесты с помощью “dbt test”
  • Изучите функцию снимков dbt для захвата изменений данных и медленно изменяющихся измерений типа 2. В нашем примере мы фиксируем изменения в таблице “recurrence”.
Храните снимки в отдельной схеме
  • Потратьте некоторое время на генерацию документации dbt с помощью команды «dbt docs generate». Вы увидите граф линии передачи данных и метаданные, которые автоматически создаются из вашего проекта. Вы можете дополнительно улучшить его, добавив описания к данным ваших .yml файлов. Хорошая документация обеспечивает лучшую обнаружимость и управляемость данных.
Запустите «dbt docs serve», чтобы открыть его в браузере
  • Сервис – Дашборд SnowflakeНаконец, визуализируйте преобразованные данные с помощью дашбордов Snowflake. Создайте дашборд в Snowflake UI и экспериментируйте с плитками (графиками), основанными на ваших SQL-запросах.
Пример дашборда
  • Развертывание – действия GitHubХотя dbt Cloud предлагает простой вариант развертывания, мы воспользуемся рабочими процессами GitHub Actions для нашего проекта dbt Core. Вам нужно создать файл .yml рабочего процесса, который будет запускаться каждый раз, когда изменения отправляются в репозиторий dbt на GitHub, и запускать указанные действия. В моем примере рабочего процесса вы можете видеть двухэтапный процесс развертывания: dbt build для среды разработки и, в случае успеха, также dbtbuild для среды продакшн. Примечание: замените секреты, такие как учетная запись Snowflake и пароль, на секреты GitHub. Для этого на веб-странице вашего репозитория перейдите в «Settings» -> «Secrets and Variables» -> «Actions». Каждый раз, когда производится обновление ветки «master», вы можете видеть запущенный рабочий процесс на вкладке «Actions» в вашем репозитории:
Просмотр результатов действий

В этом проекте мы только коснулись поверхности различных технологий в современном стеке инжиниринга данных. Это не только практическое достижение, но и отличная отправная точка для более глубокого изучения. Спасибо за чтение, и счастливого программирования!

Если вы дочитали эту статью до конца, возможно, вы найдете ее ценной и захотите связаться со мной на LinkedIn. Я открыт к возможностям!

Если не указано иное, все изображения принадлежат автору.

Ссылки:

[1] Рейс, Дж. (2022). Основы инжиниринга данных: планирование и создание надежных систем обработки данных. O’Reilly Media.