Введение в 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.

Регистрация на занятие.

Комментарии (0)