Введение в BI-as-code
Сегодня я хочу представить вашему вниманию такую вещь как BI-as-code, разобрав на примере нашего нового решения Lightdash CLI несколько базовых рабочих моментов. В этом руководстве собран передовой опыт работы с кодом для бизнес-аналитики, а именно:
Как выполнять развертывание в рабочую среду через интерфейс командной строки
Как проверить изменения перед развертыванием
Как автоматизировать развертывание в рабочую среду с помощью Github Actions
Если вы хотите принимать активное участие, дублируя все, что мы будем делать в этом руководстве, обязательно установите инструмент командной строки и создайте свой собственный Lightdash-проект.
Наша глобальная цель в этих руководствах — помочь вам в создании лучшего в своем классе опыта разработки, который значительно облегчит рутинную работу с кодом для вашей бизнес-аналитики и повысит скорость вашей команды за счет максимально быстрой доставки качественного кода. Но хватит предисловий, давайте уже начинать!
Автоматическая генерация BI-платформы на основе вашего dbt-проекта
Все, что вам нужно для реализации бизнес-аналитики в Lightdash, уже написано в коде вашего dbt-проекта. Самое замечательное — это то, что вы, вероятно, уже написали 80% всего необходимого. Итак, давайте закончим с последними 20%:
# Запускаем наш dbt-проект, чтобы создать в нашем хранилище данных таблицы, готовые для анализа
dbt run
# Автоматически сгенерируйем нашу Lightdash-конфигурацию
lightdash generate
После того как мы запустим наш dbt-проект, команда lightdash generate
автоматически сгенерирует все настройки, которые нужны Lightdash для построения нашего семантического слоя. Ниже вы можете увидеть пример такого автоматически сгенерированного .yml-файла:
# customers.yml
version: 2
models:
- name: customers
columns:
- name: customer_id
meta:
dimension:
type: string
- name: name
meta:
dimension:
type: string
- name: created_at
meta:
dimension:
type: timestamp
Файл customers.yml сообщает Lightdash обо всех атрибутах клиентов. К текущему моменту наш Lightdash-проект обычно выглядит примерно так:
lightdash-project
├── dbt_project.yml
└── models
├── customers.sql
└── customers.yml
Теперь давайте запушим этот проект в Lightdash, чтобы мы могли начать изучать наши данные в удобном пользовательском интерфейсе.
Развертывание непосредственно в продакшн — Уровень 1
Чтобы развернуть проект в рабочей среде, просто запустите команду lightdash deploy
:
lightdash login
lightdash deploy
# Your Lightdash project is ready at:
# https://app.lightdash.cloud/projects/...
Вот и все! Перейдите по этой ссылке, и вы сможете сразу начать строить диаграммы по вашим клиентским моделям из dbt. И это все заняло не больше минуты!
Хоть развертывание в продакшн теперь происходит очень быстро, часто бывает так, что когда мы разрабатываем наши BI-проекты (изменяем метрики, добавляем новые атрибуты, правим диаграммы), мы хотим предварительно просмотреть изменения, прежде чем делать их доступными для всех остальных.
Развертывание непосредственно в продакшн — Уровень 2
Представьте, что мы изменили наш файл customers.yml, добавив новую метрику:
# customers.yml
...
models:
- name: customers
columns:
- name: customer_id
meta:
metrics:
customer_count:
type: count_distinct
...
Перед тем, как сделать его доступным для всей нашей организации, мы, безусловно, хотим узнать, что все работает без ошибок. Что, если мы некорректно изменили наш .yml-файл или допустили ошибку в определении метрики?
Превью для разработчиков — это временные Lightdash-проекты, полностью отделенные от вашего проекта, размещенного в общем доступе в рабочей среде. Чтобы создать превью запустите следующую команду:
lightdash preview
# Ваш Lightdash-превью будет располагаться по адресу:
# https://app.lightdash.cloud/projects/...
Вот и все! Полученное вами превью — это полнофункциональный Lightdash-проект, который будет удален, когда вы закончите работу с ним, так что любые внесенные вами изменения не повлияют на продакшн-версию. Когда вы будете довольны своими изменениями, просто запуште их в продакшн-версию:
lightdash deploy
Развертывание непосредственно в продакшн — Уровень 3
Автоматизация развертывания нашего кода играет ключевую роль в организации управления нашей рабочей средой. Это позволяет нам добавлять такие ограничения, как:
Код должен быть передан в систему контроля версий для развертывания в продакшене
Код должен быть протестирован перед развертыванием
Автоматизируя развертывание, мы также снижаем риск человеческих ошибок во время развертывания! Слава роботам!
Для создания нашего конвейера я буду использовать Github Actions, но вы можете перенести эти принципы на любой инструменту CI/CD (CircleCI, Travis, …) по своему выбору. Мы начнем работу над нашим конвейером с создания воркфлоу-файла в нашем репозитории:
lightdash-project
├── .github
│ └── workflows
│ └── deploy.yml
├── dbt_project.yml
└── models
├── customers.sql
└── customers.yml
Наш воркфлоу представляет собой последовательность шагов, которые будут выполнены с нашим Lightdash-проектом, но он запускается только тогда, когда мы коммитим наш Lightdash-проект в ветку main. Таким образом, мы можем защитить ветку main и разрешить мерж кода с main только после тщательной проверки. Просто подключив BI-as-code-решение в нашу рабочую практику, мы автоматически получили функционал управления со встроенным код-ревью!
# ./github/workflows/deploy.yml
name: lightdash-deploy
on:
# Запускает наш воркфлоу, когда мы мержим код в main
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v1
- name: Install dbt dependencies
run: |
pip install dbt-core dbt-bigquery
dbt deps
- name: Install Lightdash CLI
run: npm i -g @lightdash/cli
- name: dbt run
run: dbt run
- name: lightdash deploy
run: lightdash deploy
env:
LIGHTDASH_URL: ${{ secrets.LIGHTDASH_URL }}
LIGHTDASH_PROJECT: ${{ secrets.LIGHTDASH_PROJECT }}
LIGHTDASH_API_KEY: ${{ secrets.LIGHTDASH_API_KEY }}
Теперь, когда мы произведеме мерж с кодом в main, будет произведен запуск экшена, и наш Lightdash-проект обновится! И хотя мы ввели ограничения для развертывания в продакшене, ничто не мешает нам продолжать использовать LightDash-превью на наших ноутбуках, чтобы молниеносно просматривать наши изменения, прежде чем мы внесем их в main-версию.
Заключение
И на этом все! Если вы дочитали до этого момента, то теперь у вас знания, как создать оптимальный сетап как для разработки, так и для продакшн-среды:
Мы ускорили цикл разработки в 10 раз, позволив вам мгновенно просматривать изменения по мере их внесения в проект. Это сокращает цикл сборки и тестирования, пока вы работаете в безопасной песочнице.
Теперь мы можем с уверенностью производить развертывание в продакшн! Используя автоматизацию и код-ревью, мы можем быть уверены, что наш новый код готов к работе в продакшн-среде — больше никаких сломанных дашбордов. Как только вы будете уверенны в своем автоматизированном развертывании, вы обнаружите, что выполняете развертывание чаще и с меньшим количеством ошибок, что значительно сокращает общее время разработки!
Я надеюсь, что достаточно продемонстрировал преимущества BI-as-code-решений, и помог вам сформировать представление о возможностях управления кодом для бизнес-аналитики с помощью Lightdash CLI. Если да, то открывайте свою консоль и приступайте к работе!
Завтра состоится открытое занятие «Выгрузка данных из внешних систем», на котором мы:
- изучим классификацию источников;
- поймем, как это влияет на выбор способа загрузки информации;
- разберемся, какие из универсальных инструментов выгрузки данных актуальны сегодня
- и научимся самостоятельно настраивать Data Ingestion пайплайны с помощью NiFi.