Data Apps Design
1.54K subscribers
143 photos
2 videos
41 files
231 links
В этом блоге я публикую свои выводы и мнения на работу в Data:

— Data Integration
— Database engines
— Data Modeling
— Business Intelligence
— Semantic Layer
— DataOps and DevOps
— Orchestrating jobs & DAGs
— Business Impact and Value
Download Telegram
👀 Как вы структурируете свои мысли? 👀

Вопрос больше относится к ведению записей, заметок, наблюдений (в т.ч. по рабочим проектам и задачам).

— Лет 5-7 назад я пользовался Evernote.
— Сегодня для личных заметок я использую Notes (Apple).
— Все записи, относящиеся к работе я веду просто в git-репозитории в markdown файлах.

На какие важные критерии я обращаю внимание?

— Кросс-девайс (рабочий, домашний компьютер, телефон)
— Разметка текста: предпочтительно Markdown
— Структура ведения: папки, ассоциативные модели (путешествия, работа, покупки, ...)
— Версионирование: история изменений
— Media: возможность вставить скан схемы с бумаги, фотографию, картинку
— Links: ссылки на другие записи, внешние ссылки, хештеги
— Расширенные возможности поиска и сортировки заметок (дата создания, изменения)

И еще очень важно - возможность bulk export / import записей! Если менять инструмент - это критично.

Сейчас присматриваюсь к Obsidian.

Кто что использует и какие ощущения?

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
😒 dbt Semantic Layer - сплошное разочарование 😒

Итак, попробовав несколько разных подходов, собрав результаты и отзывы, эволюционно я пришел к тому, что для ключевого KPI-дашборда компании (Weekly Business Review) лучше всего иметь все метрики в необходимых разрезах и гранулярностях в предрассчитанном виде в СУБД в одной небольшой таблице.

Сегодня в течение дня я экспериментировал с dbt Semantic Layer 2.0 (бывший Metricflow, который стал частью dbt Labs).

Напомню, что ранее массово были публикации и обсуждения dbt Semantic Layer 1.0. Коротко, его суть сводилась к следующему:

— В .yml файле декларативно описывались правила расчета метрик со ссылками на dbt-модели
— В виде dbt package устанавливался набор специализированных макросов
— Эти макросы могли быть использованы либо статически (материализация в dbt models)
— Либо динамически (через интерактивное обращение из BI и других инструментов)

Однако, с версии dbt-core 1.6.0 этот подход стал deprecated и дальнейшее его развитие и поддержка не подразумевались. Вразумительного объяснения, почему этот подход стал deprecated у меня нет. Есть только предположение, что на этом подходе недостаточно хорошо и много можно зарабатывать.

TO BE CONTINUED 🔻

#metrics #semantic_layer #dbt

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
💔2👍1
😵‍💫 dbt Semantic Layer - сплошное разочарование ч.2 😵‍💫

Итак, с dbt Semantic Layer 2.0 я проделал следующие шаги:

— Обновил версию dbt-проекта до 1.7.X, добавил Metricflow в свой devcontainer (просто и удобно)
— Создал простое описание семантического слоя в semantic_layer.yml на базе одной из витрин dbt (отличается от Semantic Layer 1.0, и не в лучшую сторону)
— Добавил файл с описанием метрик metrics.yml с одной метрикой = # Journeys
— Генерировал файл с артефактами командой dbt parse
— Обращался к Metricflow через CLI: mf list, mf validate-configs, mf query
— Настроил dbt Semantic Layer в dbtCloud (обратите внимание на количество шагов и их)

Имеем в сухом остатке:

— Весь процесс конфигурации чтобы начать использовать на примитивном примере стал сложнее
— Есть сомнения в возможностях получить сложные расчеты и метрики с текущим функционалом Metricflow (задать это декларативным способом, в т.ч. связи таблиц = joins)
— Неясный концепт и дальнейшее развитие, вся рабочая схема выглядит ненадежно
— Это только для пользователей dbtCloud Team / Enterprise (sorry dbt Core users)
— И как следствие только для адаптеров Redshift, Snowflake, BigQuery, Databricks (никаких Clickhouse и community adapters)
— Нет простого SQL API (есть что-то неказисто-сложное на jdbc:arrow-flight-sql, что я не стал подключать через DBeaver - терпение кончилось)
И внимание! Метрики больше нельзя материализовать через dbt models в том же проекте (т.е. посчитать и записать значения в таблицу для дальнейшего чтения)

➡️ Итого: сложно, сомнительно, неудобно, с ограничениями и за плату.

Относительно всего вышеуказанного, такой инструмент как Cube смотрится гораздо привлекательнее и интереснее.

Это я уже не говорю о Looker, который на протяжении многих лет совершенствует свой Semantic layer. В плане feature parity, Looker - это топ, вершина, олимп. Основной минус Looker - это платный продукт, подразумевающий vendor lock-in.

😒 Более того, есть чувство, что dbt Labs теперь ставит своей задачей заработок денег, монетизацию через свой основной платный продукт - dbtCloud (включая Semantic Layer), при этом качество и продуктовая ценность новых предложений неуклонно падает.

Следующие планируемые посты по этой теме:

— Обзор подхода с расчетом метрик (On the fly vs. Pre-aggregated)
— Результаты и сравнение этих подходов на практике используя Looker
— Почему с учетом моих бизнес-требований лучше оказался всё же подход Pre-aggregated
— Обзор возможностей Cube для решения этих задач

💬 Задавайте вопросы, оставляйте комментарии - обсудим.

#dbt #metrics #semantic_layer

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9😢4
Data Apps Design pinned «🔥 Открываю сбор заявок на серию вебинаров Building Modern Data Analytics Apps 🔥 4 года я готовил программы и вел занятия в Analytics & Data в ОТУС. Пришло время развивать свои проекты. Ключевые моменты: — 9-10 связанных вебинаров на которых строим Analytics…»
🟢 [Designing Modern Data Apps] 🟢

Салют!
Запуск будет состоять из вебинаров на эти темы:

— Infra Deployment
Deploying Databases, VMs for Data Pipelines and Orchestrators with Terraform

— Start modeling with dbt
Project configuration, Adapters setup, Launching devcontainers

— Sync Data Sources
Types of source data, file formats, sync methods

— Marketing analytics
Combine ad platforms, website trackers, CRM data, build data marts

— Ensure Data Quality
Unit tests, Freshness tests, Automated Integration testing

— Configure Semantic Layer (metrics)
Define metrics declarative way, Debug it

— Deploy and configure BI tool
Build dashboards, visualize key metrics, enable drills

— Team work
Setup dev sandboxes, CI tests, PR reviews

— Production Deployment
Scheduling production workloads, Chaining jobs

— Open topic session
Q&A sessions, Deep into details sessions, Live coding

В каждом вебинаре буду делать акцент на проблематике, подходах, и практических решениях. То есть то, чего зачастую не пишут в документации.

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

#learning

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍21
🟢 [Building Modern Data Analytics Apps] 🟢

Планируемый стек:

— Y.Cloud, Terraform (Ansible)
— Clickhouse
— dbt + packages
— One of BI tools: Metabase, Superset (Datalens, LightDash)
— Cube for metrics layer
— Github (Actions)
— One of EL tools: Airbyte, Meltano, Stitch

Вся практика планируется в Я.Облаке.

#learning

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
3
⚡️ Real time replication работает как в сказке! Но всё далеко непросто ⚡️

#kafka #clickhouse #realtime #debezium

Салют! Ранее рассказывал о проблематике и архитектуре решения. По этой задаче есть обновления:

🔸 Infrastructure deployment

— Это Kafka, Kafka Connect, Zookeeper
— Все сервисы в Docker-контейнерах
— Для Connect готовил custom Dockerfile с добавлением нужных JDBC-драйверов (Clickhouse) и плагинов (JDBC Sink)
— Развернул Clickhouse (пока single node deployment)

🔸 Source Connector (MS SQL)

— Первый источник - MS SQL
— Потребовалось применить конфигурации в самой базе-источнике (CDC configuration)
— Настройка Initial Snapshot
— Очень много операций с Kafka Connect REST API (создал - удалил - обновил конфиг - посмотрел статус и т.д.)
— Трансформация SMT - Topic reroute - топик должен называться так же как и таблица в Clickhouse

🔸 JDBC Sink Connector (Clickhouse)

— Для работы коннектора необходимо применить трансформацию ExtractNewRecordState ко всем событиям
— Очень много работы связано с Data Type Mapping (любой mismatch - ошибка и падение)
— Добавил ко всем топикам метаданные op,source.ts_ms:ts_ms_source,ts_ms:ts_ms_debezium
— Научился использовать secrets в Debezium (${file:/secrets/clickhouse.properties:url})

🔸Clickhouse configuration

— init dbt repository + devcontainer
— Разобрал Debezium Schema Changes topic c помощью jq + yq => получил .yml конфиг для источников dbt
dbt macros для создания исходных таблиц в цикле согласно схеме данных .yml
— Макрос умеет DROP & CREATE, CREATE OR REPLACE, CREATE IF NOT EXISTS

Это кратко.

Сначала отработал всю схему на 1-2 таблицах, заглядывая в Kafka topics. Потом автоматизировал на 70+ таблиц и полных snapshot данных.

В целом, впечатления от Debezium + Kafka Connect строго положительные. Штука сложная, но функциональная и поставленную задачу решает - я вижу данные в Clickhouse в real time. Продолжу работу.

🔸На очереди:

— Postgres Source Connector
— Оркестрация контейнеров (k8s)
— Гибкое и простое управление конфигурациями Connectors
— Clickhouse Materialized Views для подсчета метрик в real time

💬 Что скажете? Есть вопросы?
Запилить полноценный пост-инструкцию на Хабр?

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2211
💰Подписка на ресурсы издательства O'Reilly - одно из самых выгодных вложений

Потому что это знания, которыми делятся лучшие эксперты в своих областях.

— В первую очередь это доступ к самым актуальным и интересным книгам в IT

— Это мероприятия и live sessions

Например, мне был интересен вебинар ChatGPT for Software Engineers

— Это Interactive Labs & Sandboxes

K8s, Databases, Machine Learning, Data Analysis. Готовые окружения и песочницы прямо в браузере.

Подписка на год стоит $499. Я успел воспользоваться предложением Black Friday и заплатил $299

Пользуетесь? Читаете? Пересылаете .pdf-экспорты в Tg? 🙂

#learning #books

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
Салют!

В Data-сфере происходит много событий: появляются новые тулзы, фреймворки, фичи, обновления, компании продают и покупают друг друга и т.д.

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

Есть мнение, что пора включить режим турбо-блоггинга

Какие у вас ожидания? Что хочется видеть в канале? Голосуем.
Please open Telegram to view this post
VIEW IN TELEGRAM
🙂 Переварил и делюсь ключевыми идеями Tristan Handy (CEO dbtLabs) о новом опыте работы с dbt 🙂

(выпуск My first week with the new dbt, рассылка Analytics Engineering Roundup)

🔸 Старт разработки без головной боли

With the Cloud CLI, every dbt build I execute on the command line is parsed and executed from within a VM living inside of dbt Cloud’s infrastructure. This means: I no longer have to do local version upgrades, a massive advantage for someone like me who honestly just doesn’t have time to f around with Python dependencies.


Это замечательно и то, что нужно. Фокус аналитика - на создании аналитических приложений, а не на борьбу с зависимостями, version upgrades и поиск error codes на stackoverflow. Чем больше чистого времени у аналитика, тем больше результатов можно получить.

Я уже давно использую devcontainers и даже писал об этом для тех же целей - это бесплатно и не требует иметь лицензию dbtCloud.

🔸 Auto-deferral

Auto-deferral (now also available in the IDE) means that every time you execute a dbt run, dbt is comparing the state of your development project to the state of the production environment and it is only executing code in your development environment where that code differs from production, or is downstream of those changes. All upstream references point to prod.


Я давно использую defer в рамках CI tests (= прогон и тесты только изменяемых graph nodes). Теперь, в рамках dev это ускоряет процессы разрабтки на порядок.

Жаль, что удобно использовать это можно пока только в dbtCloud.

Из связанного, на ум сразу приходит фича Snowflake zero-copy clone.

🔸Data Mesh

Коротко, это про то, чтобы DWH разделить на зоны ответственности и дать командам развивать интересующие их области самостоятельно, по их правилам.

Называйте это Microservices в Data.

Задействованы и технические аспекты (как это реализовать) и организационные (кто владеет ownership).

Это классная идея и эволюционное развитие, но это скорее релевантно крупным компаниям, в которых как минимум несколько отделов-ветвей заинтересованы в data services, у них есть свои ресурсы на разработку и устоявшиеся правила. Читай, это для корпораций. По моим оценкам, доля таких компаний среди пользователей dbt пока не очень велика. Но это тренд!

They have set up their own CODEOWNERS and other processes, and are much more able to operate independently. They’re excited, empowered.


🔸 Explorer на смену dbt Docs

Мне доступна эта версия в dbtCloud. Приложу несколько скриншотов в комменты.

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

Из главного: визуальный граф (DAG), факты о расчете модели (когда, кем, сколько - это новое!), code, dependencies, columns, tests.

dbt Docs just knew about your code, it didn’t really have any more information to show you. Explorer also knows about job and test execution, can trend runtimes, can tell you when data was last loaded, and more. After a few hours with it, I can now feel myself gravitating to it as the place to learn about what’s going on inside our warehouse.


#dbt #roundup #opinion

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🚀 Сквозная аналитика + Modern Data Stack 🚀

Открытый вебинар 13 декабря в 19:00

🔸 Бизнес-результат (ценность):

— Почему владельцы готовы платить за аналитику?
— Оптимизация привлечения и удержания клиентов
— Совершенствование продукта: анализ паттернов и поведения
— С [MDS] 1 человек способен делать, на что ранее требовались целые команды

🔸 Как создать эту ценность с Modern Data Stack:

— Расширение списка источников данных: Ads platforms, Clickstream, CRM, Billing, gSheets
— Шаблонизация, макросы и интеллектуальное моделирование с dbt и Clickhouse
— Семантический слой, потребление дата-продуктов и аналитики: Cube
— Визуализации и дашборды, которые живут долго: Datalens, Metabase, Superset

Регистрация: https://artemiy-kozyr.timepad.ru/event/2709562/

Вебинар бесплатный, регистрация обязательна.
Расскажите об этом всем, кому может быть интересно.

#learning

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥10
Data Apps Design pinned «🚀 Сквозная аналитика + Modern Data Stack 🚀 Открытый вебинар 13 декабря в 19:00 🔸 Бизнес-результат (ценность): — Почему владельцы готовы платить за аналитику? — Оптимизация привлечения и удержания клиентов — Совершенствование продукта: анализ паттернов…»
⚙️ Добавить логику повторных попыток retry в оркестрацию расчетов DAG

Для того, чтобы бороться с повторяющимися случайными ошибками.

В моем случае это проблемы с сетью (сетевым подключением). В рамках расчетов я делаю обращение из Clickhouse во внешнюю СУБД и порой во время чтения данных подключение прерывается:

05:08:57    :HTTPDriver for https://***:8443 returned response code 500)
05:08:57 Poco::Exception. Code: 1000, e.code() = 2013, mysqlxx::ConnectionLost: Lost connection to MySQL server during query (***:3306) (version 23.3.17.13 (official build))


* Можно тонко конфигурировать настройки, но не всегда это возможно на стороне СУБД-источника данных

В итоге расчет всех витрин прерывается в случайном месте, и в результате имеем в отчетности либо отстающие, либо несогласованные данные.

🔹 Как можно предусмотреть возможность повторных попыток?

— Реализовать собственноручно в коде исполнения (Exception handling, Retries, etc.)
— Настроить встроенные механизмы (Airflow task retries)
— Использовать специальные обертки (Github Actions)

В моем случае использую Github Actions как оркестратор запусков dbt

Step, который прежде выполнял единственную команду dbt build, теперь выглядит так:

  - uses: Wandalen/wretry.action@master
with:
command: dbt build
attempt_limit: 3
attempt_delay: 2000


В Github Actions я бы рекомендовал использовать retry action. Есть ряд альтернатив, но, например с Retry Step у меня возникли проблемы и я отказался от его использования.

#orchestration #dbt #github_actions

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Live stream scheduled for
Уже сегодня в 19:00 вебинар Сквозная аналитика + Modern Data Stack

Стрим проведу в Tg-канале @enthusiastech, запись будет выложена в YouTube позже.

Прикладываю несколько слайдов в качестве тизера 👀

Подключайтесь, и расскажите тем, кому это может быть интересно.

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤‍🔥5🔥3
Live stream started
Q&A: В комментариях к этому посту задаем вопросы по стриму 🚀 Сквозная аналитика + Modern Data Stack
Live stream finished (1 hour)