Сергей Макаров

Современный ELT стек digital аналитика: dbt, BigQuery, Sinter и Renta

Как веб-аналитик я постоянно сталкиваюсь с задачей сведения данных из различных источников во что-нибудь осмысленное, например, таблицу или дашборд.

Решить эту задачу можно 100500 разными способами.

Например, когда я был совсем маленьким, то просто использовал Google Sheets: плагин GA, остальные данные заливал вручную. Настроить это дело просто, но на этом плюсы и кончаются. Когда у вас больше 10 запросов, то спредшит начинает дико тормозить. А ещё семплинг. А ещё почти нет коннекторов.

Потом появился Power BI. В сравнении со спредшитами это небо и земля. Вытянуть данные можно из любого источника. Для трансформации данных не нужно знать программирование и даже формулы (как в Excel): все происходит в кнопочном интерфейсе.
Шло время, число запросов Power Query росло, да и модель данных все увеличивалась и увеличивалась в размерах. Дошло до того, что я ставил обновляться модель и уходил на обед. Возвращался, а модель все обновлялась (ну а потом падала с ошибкой, fuuuu).

Я погрустил немного, а потом пошел гуглить.
В итоге через пару месяцев у меня был BigQuery, 10 скриптов на R и cron.

Естественно, все это не взлетело, как хотелось бы. Apiшки иногда не отвечали, cron падал. Куча скриптов по разным папкам очень скоро стали неуправляемыми. Вышел из отпуска — уже и не разберешь когда и где какая обработка идёт. В общем, хаос.

Я снова пошел гуглить и наткнулся на клёвую статью в блоге Mode.

Не хочу пересказывать, поэтому выделю основную суть.

Современная инфраструктура аналитики модульная и основывается на микросервисах.
Микросервисы делают одну вещь и делают ее хорошо. Например, скачивают данные из рекламных систем.
Микросервисы работают вместе и могут быть заменены на другие.

Оглядываясь назад, я понимаю, что страдал как раз из-за того, что пытался решить задачи не теми инструментами. Например, BI для обработки, а спредшиты для хранения данных. Не делайте так.

Статья очень хорошо зашла, и я решил дать себе ещё один шанс «сделать нормально».
Далее я расскажу о каждом микросервисе отдельно и о том, как выбирал и соединял их друг с другом.

!Дисклеймер:

Я никакой не Data Engineer и не профессионал в data modeling.

Думаю, эта статья для таких же ребят, как и я, для аналитиков, у которых нет команды BI и которые также, как и я, страдают от несовершенства аналитического мира.

Что мы знаем о Data warehouse

industrial-hall-1630740_1920-e1507904049620

В аналитической инфраструктуре DWH занимает центральное место.

Этим местом может быть любая современная аналитическая бд: BigQuery, Amazon Redshift‎ или Snowflake. Все они облачные, дешевые и очень быстрые.

Туда мы загружаем данные, а затем обрабатываем и моделируем. Процесс загрузки и обработки иногда называют ELT(extract — load — transform).

К сожалению, такие вещи, как ClickHouse или Hadoop, не подходят для простых смертных, так как там много инженерной работы и под них мало коннекторов. А нам ведь нужно как можно проще и модульнее.

Я выбрал BigQuery. Для BigQuery есть коннекторы к российским рекламным системам и системам аналитики, а еще можно пользоваться бесплатно полгода. Чтобы начать, нужно просто перейти по ссылке.

Микросервисы для pre-proccesing и загрузки

Чтобы данные оказались в бд, нужно их извлечь и иногда делать минимальную предобработку.

Например, подключиться к API рекламной системы и спарсить JSON.

Очень муторная работа. Поэтому если вы делегируете эту часть другим сервисам, то сэкономите кучу денег и времени.

Самые популярные сервисы для этого Stitch  и Fivetran.

На российском рынке — Renta и R7K12.

Я использую оба сервиса, но пользоваться Рентой немного приятнее.

Обработка и моделирование

В этой сфере очень много инструментов, как дорогих enterprise, так и open source.

Сначала я пытался освоить Airflow — open source разработка от Airbnb. К сожалению, я так и не настроил ни одного data pipeline с помощью Airflow. Скорее всего, не хватило скилла.

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

Вот пример самого примитивного репозитория dbt. Все SQL преобразования находятся в папке models.
Когда мы запускаем dbt run, то все эти запросы материализуются в нужный нам вид (вью, таблица или CTE).
Затем скомпилированную модель можно визуализировать с помощью SinterData:
12e441546b

Пока я использую лишь малую часть возможностей dbt, но даже на этом уровне я сильно облегчаю себе жизнь.
Скорее всего, в команде аналитиков, которые работают над одним проектом, dbt покажет себя еще лучше.

Кстати, если вы знаете бесплатные сервисы наподобие dbt — напишите мне.

Scheduler

Это опциональный пункт в этой архитектуре, так как dbt можно запускать и по крону.

Но лучше все-таки это делать через Sinter, ведь гораздо приятнее оперировать джобами в одном окне с уведомлениями и другими дополнительными штуками.

Заключение

Я намеренно не рассказал о BI решениях, так как эта тема уже и так сильно разжевана. Используйте то, что вам нравится: Mode, Redash, Power BI или Tableau. Благодаря модульности архитектуры вы можете менять эти инструменты почти безболезненно.

Вот итоговая картинка:

fb48604c2a

Для себя я вынес главное преимущество использования ELT стека: меньше тратишь времени на техническую рутину и больше на моделирование и анализ.

Конечно, мир не идеален. Всегда будут источники данных, которые не покрыты микросервисами, да и сами сервисы тоже могут глючить (их делают люди, некоторые забесплатно). Но факт того, что у каждого человека с минимальными знаниями программирования есть возможность поднять данную архитектуру с нуля — это очень круто.

На этом все.
Пишите мне в FB или на почту, если есть комментарии или хотите продолжения.

Поделиться
Отправить