Data Integration
—
—
—
— 🏆 Удержать стоимость SaaS ELT на уровне $13K / year вместо повышения цены в 2,35 раза
—
— ⚡️ Real time replication работает как в сказке! Но всё далеко непросто
— ⚙️ Clickhouse is advancing at data integration
— Важнейшие критерии при выборе Extract – Load решения для интеграции данных в DWH
— Extract - Load как сервис и как собственное решение. Поиск баланса и дзен
Database engines
—
— ❄️ Финализирую Redshift to Snowflake transition
—
— ❄️ Наступает время Snowflake
— ❄️ Snowflake - перспективный лидер, и я ищу подводные камни
— ⚡️ I have run a Proof of Concept with Redshift Serverless
Data Modeling
—
—
—
—
— 🚀 Ключевые метрики компании на дашборде - путь от hardcoded cube к live calculated measures
— Моделирование отчета для BI в виде сводной таблицы со сравнением периодов
— Работа с ГЕО-данными в DWH: координаты, зоны, агрегация
— Зрелость DBT-проекта. Есть, куда расти?
— Стратегия инкрементального наполнения витрин: необходимость, реализация, подводные камни
Business Intelligence
—
— Business Intelligence 101: Всё самое важное о BI инструментах
—
—
—
—
Semantic Layer
— 😒 dbt Semantic Layer - сплошное разочарование
— ⚡️ Replacing Looker with Cube + Superset
— Семантический слой для Аналитики ключевых метрик – dbt Metrics vs. Cube
— Аналитика ключевых метрик компании: dbt Metrics / Cube.js / LookML
DataOps and DevOps
—
—
— Why I use dev containers?
— 💎 Операционализация аналитики c инструментами класса reverse ETL – опыт использования Census
Orchestrating jobs & DAGs
—
—
— ⚙️ Добавить логику повторных попыток retry в оркестрацию расчетов DAG
— Мои рекомендации по альтернативам (для оркестрации dbt jobs)
— Оркестрация dbt jobs для Dev, Test, Prod без головной боли
Business Impact and Value
— 🤯 Нерелевантные, демотивирующие и бессмысленные задачи
—
—
— Cчитаю, что чем выше уровень maturity в компании, тем меньше должен быть sum of data work.
— 🚀 Released myBI dbt Core and myBI Market showcase
— 🚀 Аналитика продуктивности команд разработки на основе данных Github
— End-to-End решение для аналитики на примере источника MaestroQA
Learning
—
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍6⚡2❤1
Data Apps Design pinned «🟡 Дайджест самых интересных публикаций по темам: Data Integration — ▶ Успешный SaaS на рынке Аналитики – cтановление и планы развития / Алексей Сидоров из mybi connect — 👨💻 Сказ о том как я realtime replication чинил (Kafka + Debezium + Clickhouse) — 👑 …»
Когда у меня проблемы с интернетом, первый сайт, на который я захожу, чтобы проверить наличие подключения - ya.ru
Когда-то это была просто строка ввода фразы для поиска на белом фоне. Даже помню - "Яндекс для аскетов".
Шли годы, что-то менялось в Яндексе, и сегодня страничка выглядит так:
P.S. Интернет дали, но внутри я уже не в первый ловлю себя на мысли "вдруг отключили весь западный сегмент интернета" 🤔
Когда-то это была просто строка ввода фразы для поиска на белом фоне. Даже помню - "Яндекс для аскетов".
Шли годы, что-то менялось в Яндексе, и сегодня страничка выглядит так:
P.S. Интернет дали, но внутри я уже не в первый ловлю себя на мысли "вдруг отключили весь западный сегмент интернета" 🤔
👍4
#orchestration
За многие годы Airflow стал де-факто стандартом в области управления цепочками взаимосвязанных задач.
Хотя сам инструмент позиционируется как полноценное решение для построения пайплайнов данных, мною он всегда рассматривался только как оркестратор (дирижер, раздающий задачи). Решать эти задачи мною призывались специализированные инструменты:
— Processing: curl, jq, awk, sed
— File storage: S3, MinIO
— Transformations: dbt + DBMS (Clickhouse, Snowflake, ...)
— Alerts: Slack, Telegram
Вся соль DAG в том, какими инструментами и набором шагов мы решим эту задачу. Сравните
Подход #1:
— 20 разных endpoints (справочники, факты)
— DAG с PythonOperator на каждый endpoint, request с обработкой ответа
— Вставка результата (JSON) в MongoDB как документ
— Создание целевых таблиц в Clickhouse (SQL = CREATE TABLE ...)
— Предобработка данных (типы, название колонок, порядок), возможно в pandas
— Вставка в целевые таблицы (INSERT loop = медленно)
И подход #2:
— Однострочный bash-скрипт с параметрами
curl ${ENDPOINT} | jq | s3 copy ${S3_BUCKET_PATH} - — Конфиг в yaml с параметрами для 20 endpoints
— Генерация DAG по шаблону BashOperator на основе yaml config
— Запись результатов в стиле Extract - Load в S3
— Чтение из Clickhouse с использованием S3 table engine (с чтением схемы schema inference)
— Простота конфигурации и гибкость (endpoint: добавить, убрать, применить фильтр, записать в другой S3 bucket, выполнить полный пересчет)
— Быстрота (скорость работы, устойчивость к росту объема данных)
— Принцип EL = все трансформации в DWH (никаких трансформаций вне DWH)
— Устойчивость к изменениям и проблемам (какие точки отказа? сколько их?)
— Поддержка Schema Evolution (меняются атрибуты, типы данных в выгрузке - будет ли ошибка? требуются ли ручные действия?)
Хочется разразиться целой публикацией на Хабр на этот счет: обзор возможностей, эволюция развития инструмента, лучшие практики (и плохие тоже) и их рационализация. Дайте реакций, и это случится.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍9❤4
#learning
Результаты:
— 15 участников в закрытом канале
— 10 live стримов на YouTube
— Сквозной проект на датасете, приближенном к реальности
— Общение с единомышленниками, ответы на вопросы в QA sessions
— Инфра в лучшем облаке РФ + индивидуальные гранты
— Single Github repo, прираставший с каждым новым стримом
Мои ощущения:
— Благодарен за опыт сотрудничеству с различными обучающими платформами (4+ года)
— Но безумно рад наконец запустить свой продукт, в котором я принимаю основные решения 😎
— Максимально ответственно подошел к подготовке программы и контента, плотность зашкаливает
— Научился стримить с OBS, создавать и переключать сцены
— Создал шаблон слайдов с брендированием
— Впереди еще много рациональных идей, которые хочется воплотить
В марте я планирую новый запуск.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤7
— Проверяем таблицы в Clickhouse, действительно последняя дата - вчера
— Делаем сверку с таблицей источника данных - последний заказ несколько минут назад
Вывод: что-то не так с репликацией данных
— Смотрим в Kafka на topic offsets
start:3752136
end:3884660
offset:3869357
lag:15303
О нет, накоплено отставание в 15К записей, и оно продолжает расти! В чем дело?
Либо не хватает мощности (bottleneck) для записи в Clickhouse. Либо что-то с самим подключением (коннектором).
— Подключаемся на VM на которой развернут Debezium connector и смотрим лог
В логах сервиса (контейнер) вроде ничего подозрительного, при просмотре последних сообщений ошибок нет.
— Смотрим статус коннектора
curl http://localhost:8083/connectors/clickhouse-jdbc-sink/status | jq
Видим огромное, сложно воспринимаемое сообщение о статусе, в котором взглядом выцепляю
failed: Connection refused— Делаем restart коннектора (вместе с tasks!)
curl -X POST http://localhost:8083/connectors/clickhouse-jdbc-sink/restart?includeTasks=true | jq
Есть! Через несколько секунд проблема решена.
Коннектор работает, отставание (оффсет) обнулилось, данные в Clickhouse появились.
1. Всегда что-то может пойти не так, и заранее неизвестно что, где и когда.
2. Поэтому необходимы инструменты мониторинга:
— Общая нагрузка на систему CPU / Memory / Disk (identify bottlenecks)
— Потребление ресурсов в разрезе сервисов (Debezium connectors, Kafka, Clickhouse)
— Healthchecks - периодические проверки статуса и работоспособности сервисов
— Своевременные уведомления о возникающих проблемах (errors, connection lost, etc.)
Продолжаю работу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍4🔥2
— Путь становления одного из самых популярных сервисов SaaS аналитики в РФ
— Что представляет из себя сервис изнутри? Самые популярные коннекторы
— Белые пятна и пробелы на рынке. Запросы клиентов, тренды
— Жизнь после санкций. Переезд в Y.Cloud. Будущее PowerBI. Трудности и бенефиты
— Планы экспансии. Ликбез и культура данных. Продвинутые аналитические паттерны в легкой доступности
Please open Telegram to view this post
VIEW IN TELEGRAM
connect.mybi.ru
mybi connect — ETL-сервис и платформа бизнес аналитики данных
Для автоматизации получения данных в единой аналитической БД, преобразования и визуализации их в отчетах
🔥13⚡7👎1
Не удивлен, не расстроен, но воодушевлен.
Никогда не любил PowerBI в силу ряда причин:
— Нет клиента для Mac / Linux
— Нет версионирования (вроде что-то завезли, но это не полноценный git)
— Всё необходимо щелкать мышью
— Какие-то сложносочиненные навороты с DAX / MDX, погружаться в которые нет желания
— Gateways и прочие сложности с публикацией и регулярным обновлением
— И конечно же тесная связь с Microsoft и их софтом
— RU Clouds: Y.Cloud / Cloud.ru
— EL: Kafka + Debezium, Airbyte (Connectors)
— Database: Clickhouse / Greenplum / Starrocks
— Transformations: dbt (SQL code)
— Semantic layer: Cube
— BI: Superset / Metabase / Datalens
— Orchestration: Airflow / Dagster / Prefect
— Monitoring: Prometheus, Grafana
Напишите мне в ЛС @kzzzr:
— Для чего вы использовали PowerBI
— Какие у вас источники данных
— Какие объемы данных
— Примерный перечень и сложность расчета метрик (показателей)
— Комментарий по срокам и необходимости видеть актуальные отчеты
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Microsoft и Amazon с 20 марта 2024 года приостанавливают доступ к своим облачным продуктам на территории РФ
15 марта 2024 года компания Softline сообщила , что Microsoft и Amazon с 20 марта 2024 года приостанавливают доступ к своим облачным продуктам на территории РФ, включая Power BI и Dynamics CRM....
🔥8👍3🤡3🤯1🌚1
❄️ Финализирую Redshift to Snowflake transition
Да! Процесс длился с Июля 2023 с разной степенью интенсивности, но я сделал это.
Чеклист коротко:
🔵 Data Integration (EL)
— Create WH and user for EL (Hevo)
— Create empty schema landing
— Create EL pipelines from scratch (Hevo)
— Configure EXTERNAL STAGES and TABLES
— UNLOAD from Redshift (S3 Parquet) and COPY into Snowflake full history of largest tables
🔵 Data modeling with dbt (T)
— Create distinct WH for workloads: EL, T, DEV, BI, CI
— Set up Resource monitors for credit usage
— Adapt dbt project to Snowflake syntax
— Configure essential dbt packages
— Adapt JSON parsing code to LATERAL FLATTEN
— Enable Carto extension (H3 indexing + geo-joins)
— Snapshots for most dimensions
—
— Optimize warehouse size dynamically for heavy models
🔵 Orchestration
— Set up dbtCloud jobs
— Configure Slim CI job
🔵 Data serving
— RBAC: Roles, Users, Groups, Privileges
— Connect Snowflake to Looker and Metabase
— Test Dashboards
— Connect reverse ETL, Jupyter, Airflow to Snowflake
🔵 Paperwork
— Launch procurement process with Vendr
— Notion Page on Snowflake transition
— JIRA tasks, approvals, 30+ emails
🟣 Наблюдения:
— Всё работает красиво и довольно шустро
— Радует то, что я разделил все нагрузки на разные Warehouses
— Для сложных моделей dbt и full-refreshes я динамически назначаю более мощные WH
— Snowflake очень удобная СУБД, всё сделано для людей, включая UI
— Много простых и крайне полезных мета-команда (SHOW, DESCRIBE, USE, LIST, ...)
Конечно, есть и обратная сторона медали. Буду работать над подробным обзором и заметками о переезде. Всё интересное еще впереди.
А пока можете поздравить меня.
🌐 @data_apps | Навигация по каналу
Да! Процесс длился с Июля 2023 с разной степенью интенсивности, но я сделал это.
Чеклист коротко:
— Create WH and user for EL (Hevo)
— Create empty schema landing
— Create EL pipelines from scratch (Hevo)
— Configure EXTERNAL STAGES and TABLES
— UNLOAD from Redshift (S3 Parquet) and COPY into Snowflake full history of largest tables
— Create distinct WH for workloads: EL, T, DEV, BI, CI
— Set up Resource monitors for credit usage
— Adapt dbt project to Snowflake syntax
— Configure essential dbt packages
— Adapt JSON parsing code to LATERAL FLATTEN
— Enable Carto extension (H3 indexing + geo-joins)
— Snapshots for most dimensions
—
dbt build --full-refresh— Optimize warehouse size dynamically for heavy models
— Set up dbtCloud jobs
— Configure Slim CI job
— RBAC: Roles, Users, Groups, Privileges
— Connect Snowflake to Looker and Metabase
— Test Dashboards
— Connect reverse ETL, Jupyter, Airflow to Snowflake
— Launch procurement process with Vendr
— Notion Page on Snowflake transition
— JIRA tasks, approvals, 30+ emails
— Всё работает красиво и довольно шустро
— Радует то, что я разделил все нагрузки на разные Warehouses
— Для сложных моделей dbt и full-refreshes я динамически назначаю более мощные WH
— Snowflake очень удобная СУБД, всё сделано для людей, включая UI
— Много простых и крайне полезных мета-команда (SHOW, DESCRIBE, USE, LIST, ...)
Конечно, есть и обратная сторона медали. Буду работать над подробным обзором и заметками о переезде. Всё интересное еще впереди.
А пока можете поздравить меня.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍12❤1
Активная фаза transition завершена, самые острые проблемы и вопросы решены, сломанные дашборды и интеграции исправлены.
И первое, на что хочется обратить внимание – это траты.
Пока рано делать полноценные выводы, но давайте посмотрим на факты:
— Кластер Amazon Redshift из 2 x ra3.4xlarge nodes обходился примерно в $3700 / мес. (~ $925 / нед. ~ $125 / день)
— Траты Snowflake за неделю 19 - 26 марта составляют ~ $760 (на картинке)
При этом:
— 20 марта – подготовка к transition, запуски dbtCloud jobs
— 21 марта – день, когда я полноценно переключил все нагрузки на Snowflake и делал history backfill (COPY / INSERT) + full-refreshes (повышенные траты)
— 23-24 марта – выходные
— 25 марта – пользователи начинают находить ошибки, выпускаю фиксы и делаю full-refreshes
— 26 марта – день в разгаре
Ключевые выводы:
—
—
—
—
—
—
—
—
— Первая неделя использования Snowflake внушает оптимизм относительно того, что траты, возможно, будут немного меньше, чем на Redshift, при всех полученных преимуществах
Каждый из перечисленных пунктов достоин отдельной публикации и раскрытия подробностей.
Я продолжаю экспериментировать и постепенно внедрять и другие отмеченные мной Snowflake features.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2❤1❤🔥1💯1
Ура! Релиз моего первого интервью на YouTube с Алексеем Сидоровым из mybi connect
Ключевые идеи и мысли в беседе:
— В бизнесе побеждает тот, кто создает и использует конкурентные преимущества, в т.ч. основанные на данных
— Делегировать базовые задачи и создавать ценность на прочной основе выгоднее, чем изобретать свой велосипед (писать и поддерживать коннекторы)
— PowerBI – мощный и удобный инструмент, но заметен рост интереса к стеку dbt + Clickhouse + Cube + любой BI
— Модель данных Звезда / Снежинка позволяет отвечать требованиям гибкости и изменчивости данных
— Работа в рамках SaaS позволяет эффективно выстраивать процессы силами небольшой команды. Консалтинг и внедрения успешно реализуются через Marketplace и сеть партнеров
— Все клиенты делятся на две группы: in-house аналитика и партнеры, делающие внедрения на заказ
— Платформы, обещающие обучить профессии бизнес-аналитика за 2 месяца продают иллюзии. Навыки приобретаются в реальном бою и не всегда красивых и удобных бизнес-кейсах
— Лучшие продажи – "изнутри", когда аналитик компании сообщает о необходимости сервиса для решения задач
Приятного просмотра!
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Успешный SaaS на рынке Аналитики – cтановление и планы развития / Алексей Сидоров из mybi connect
Ключевые идеи и мысли в беседе:
— В бизнесе побеждает тот, кто создает и использует конкурентные преимущества, в т.ч. основанные на данных
— Делегировать и создавать ценность на прочной основе выгоднее, чем изобретать свой велосипед (писать и поддерживать…
— В бизнесе побеждает тот, кто создает и использует конкурентные преимущества, в т.ч. основанные на данных
— Делегировать и создавать ценность на прочной основе выгоднее, чем изобретать свой велосипед (писать и поддерживать…
🔥11👍6❤2
Помните пост 🚀 Ключевые метрики компании на дашборде - путь от hardcoded cube к live calculated measures?
Задача трансформировалась и для нее давно найдено красивое решение.
Планирую выступить на Апрельском бигдатнике sql-ninja (Москва, 27.04)
🔺 SQL + dbt = God Mode Data Modeling
На кейсе создания витрины корпоративных метрик рассмотрим:
— Элементы functional programming c dbt macros
— Интерактивный UX с dbt Power User + CLI
— Импорт и переиспользование кода с dbt packages
— Универсальный код и окружения с dbt adapters
А еще новые знания, нетворкинг, общение.
Регистрация: https://sql-ninja.ru/ticket/
🌐 @data_apps | Навигация по каналу
Задача трансформировалась и для нее давно найдено красивое решение.
Планирую выступить на Апрельском бигдатнике sql-ninja (Москва, 27.04)
На кейсе создания витрины корпоративных метрик рассмотрим:
— Элементы functional programming c dbt macros
— Интерактивный UX с dbt Power User + CLI
— Импорт и переиспользование кода с dbt packages
— Универсальный код и окружения с dbt adapters
А еще новые знания, нетворкинг, общение.
Регистрация: https://sql-ninja.ru/ticket/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2👍1
Использовал базовую VM в Я.Облаке (это совсем недорого).
— Download the latest runner package
— Extract the installer
— Create the runner and start the configuration experience
— Last step, run it!
— Все тулы нужно поставить на VM самостоятельно (либо взять boot disk за основу): Docker, git, curl, etc.
— Права. Нужно выдать права на чтение, запись и запуск (rwx), ловил ошибки, пока не выдал необходимые права
buildx failed with: ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
— После завершения SSH-сессии, runner становится недоступен. Процесс нужно запустить как сервис через systemd. Configuring the self-hosted runner application as a service
— Имеем всю мощь Github Actions и набор поддерживаемых фичей
— Богатство решений и автоматизаций в Marketplace
— С замечательной документацией
— В качестве отличной замены динозаврам automation server типа Jenkins (и прочим подобным тулам)
— По цене базовой виртуалки
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4🍓2🤩1