Data Apps Design – Telegram
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
Data Apps Design pinned « Data Engineering in the AI Era: Building a Robust Foundation for AI Applications Слайды доклада: https://drive.google.com/file/d/1U3vm2jZlz9GHlM0dsRhmUwZQzM9rgS8k/view?usp=sharing Запись на YouTube скоро будет 🔸 Основные секции доклада: 🟡 BUSINESS DELIVERABLES…»
Artemiy Kozyr
🔵 DATA INGESTION
🔵 DATA INGESTION

There are several types of data sources:

🗄 Databases
📈 Events (Clickstream)
🌐 3rd party APIs
📄 Files


CDC SYNC FOR DATABASES WITH DEBEZIUM

💡 Debezium is an open-source distributed platform for change data capture (CDC)

⏱️ Real-time data streaming
🗃 Support for various databases
⚙️ Fault-tolerant and scalable architecture
📜 Schema evolution handling
🔗 Integration with Apache Kafka


Setup hints for Debezium source connectors

⚙️ Leverage distributed and parallel sync mode
🎯 Only sync relevant data
🛠 Configure topics auto-create feature
🚫 Do not trigger initial snapshots on production databases
🔔 Enable signaling (very powerful feature)
🔄 Configure retries in case of (transient) errors
📝 Tolerate errors but capture/log them


Setup hints for sink connector (Snowflake)

🏷 Ensure a consistent naming convention for topics
⚙️ Adjust settings for optimal performance
🆕 New record state extraction for Debezium messages
📝 Include relevant metadata fields
📐 Apply schematization
🗃 Ensure arrays are handled correctly to avoid data issues
🎛 Use Single Message Transforms (SMT) selectively
📨 Configure a dead letter queue to capture and debug errors effectively


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
Artemiy Kozyr
Data Engineering in the AI Era: Building a Robust Foundation for AI Applications Слайды доклада: https://drive.google.com/file/d/1U3vm2jZlz9GHlM0dsRhmUwZQzM9rgS8k/view?usp=sharing Запись на YouTube скоро будет 🔸 Основные секции доклада: 🟡 BUSINESS DELIVERABLES…
🔵 DATA INGESTION

DATA INGESTION: EVENT TRACKING

📊 I have chosen Snowplow for event tracking

— Real-time event tracking: Capture and process events in real-time.
— Customizable event schema: Define custom event schemas to fit your specific needs.
— Cross-platform tracking: Track events across web, mobile, and server-side applications.
— Scalability: Handle large volumes of data efficiently.
— Open-source: The core technology is open-source, allowing for customization and flexibility.
— Data ownership: Full control and ownership of your data.
— Integration: Integrates with various data warehouses and analytics tools.
— Data enrichment: Enrich raw event data with additional context.
— Alternatively: Jitsu, Rudderstack

Setup hints for Snowplow event tracking

🎯 Only track relevant information
📚 Use schema registry (Iglu or Static)
⚖️ Handle both GOOD and BAD event streams
🏷 Assign App & Tracker information
🐞 Use Snowplow Micro for debugging purposes
🚨 Set up Monitoring and Alerting


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Artemiy Kozyr
🟢 DATA TRANSFORMATION
🟢 DATA TRANSFORMATION

How to choose a Data Platform? 🤔

📈 Focus on the business needs
🛠 Name issues you currently face with
📋 Define a list of criteria to compare
🧪 Run series of PoC with the short-list
Make a decision
🔄 Perform a transition
📊 Measure success


What to consider? List of criteria

🚀 Performance and Scalability
🛠 Feature support
🔒 Security
🛠 Maintenance and Administration
🔗 Integrations and Ecosystem
💰 Pricing model


I use dbt for Data Modeling and it rocks! 🎸


🔄 Modularity: reusable SQL queries
🗂 Version Control: integrates with Git
Testing: built-in data quality tests
📄 Documentation: auto-generates model docs
📊 Data Lineage: tracks data flow
Scheduling: runs at specific intervals
🔗 Integration: works with Snowflake, BigQuery, Redshift, etc.
📝 SQL-based Transformations: accessible to SQL users
🌐 Environment Management: supports dev, staging, prod
🔌 Extensibility: extend with macros and plugins


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Artemiy Kozyr
🟤 DATA OPERATIONS
🟤 DATA OPERATIONS

🛠 Configure reproducible devcontainers

🛡 Isolation: Each project has its own environment, avoiding conflicts.
🔄 Consistency: Ensures the same setup across different machines.
🛠 Pre-configured Tools: Comes with necessary tools and dependencies.
📜 Version Control: Environment configuration can be versioned with the project.
🌍 Portability: Easily shareable and portable across different systems.
🎨 Customization: Fully customizable to fit specific project needs.
🔗 Integration: Works seamlessly with VS Code for a smooth development experience.


📡 Signals provide a way to control and interact with Debezium connectors

⏸️ Pause/Resume: Temporarily halt and restart connectors.
📸 Snapshot Control: Start, stop, or restart snapshots.
🔄 Offset Management: Reset or adjust offsets for connectors.
⚙️ Configuration Changes: Dynamically update connector configurations.
📊 Monitoring: Track and manage connector status and health.
🛠 Custom Actions: Define and trigger custom actions for connectors.


🗂 Deduplicating log entries with dbt macro

🔄 Configure CI / CD pipelines

📢 Configure Slack / Telegram alerts


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Artemiy Kozyr
Основные секции доклада:

🟡 BUSINESS DELIVERABLES AND OUTCOMES

🔵 DATA INGESTION

🟢 DATA TRANSFORMATION

🟤 DATA OPERATIONS
RESULTS: Solid foundation for AI applications


DATA INGESTION
⏱️ Near real-time and event-driven applications using Debezium and Snowplow.
🌐 Events supported and tracked amongst web and mobile applications
🔗 Third-party vendor dependencies reduced


DATA TRANSFORMATION
🛠 Achieving full control over data flow and transformations
Real-time to <1h data availability for most important data marts
📄 Self-documenting code, full scope of metadata available
🔒 Ensuring complete data ownership


DATA OPERATIONS
🛠 Easy and maintainable Data Operations on demand
🔄 Scripting repeating actions
🖥 Using pre-built devcontainers


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Друзья, мы решили порадовать вас и подготовили небольшой сюрприз! ❄️

В честь Нового года мы вместе с админами дружественных каналов и групп разыгрываем подарки:

• Умная колонка SberBoom Mini
• Подарочный сертификат на 3000 рублей на покупки в издательском доме Питер (включая бестселлеры O'Reilly, печатные и электронные издания)
• USB-лампа для монитора

Для участия в розыгрыше нужно:

1️⃣ Подписаться на каналы:

СБЕР IT Сочи — канал про жизнь самого большого IT-офиса на берегу Чёрного моря

IT Сообщество Сочи — комьюнити людей из всех направлений IT индустрии, которые живут или хотят переехать в Сочи

Data Apps Design — канал, с концентрированной информацией о Data. Препарированный контент, опыт, практика и выводы

2️⃣ Нажать кнопку «Участвую!» под этим постом

🎲 Итоги розыгрыша:

Бот-рандомайзер выберет 3 победителей 10 января в 18:00. Результаты будут в апдейте этого поста, с победителями свяжемся лично ✌🏼

Всем удачи! 🔥

Участников: 321
Призовых мест: 3
Дата розыгрыша: 18:00, 10.01.2025 MSK (завершён)

Победители розыгрыша:
1. -DeMaN- - 280gi5
2. Ярослав Рубе - 22levc
3. Summer Madness - 280ghv
🔥4👍1🥴1
GiveShareBot - бот для розыгрышей
Друзья, мы решили порадовать вас и подготовили небольшой сюрприз! ❄️ В честь Нового года мы вместе с админами дружественных каналов и групп разыгрываем подарки: • Умная колонка SberBoom Mini • Подарочный сертификат на 3000 рублей на покупки в издательском…
💠 Салют! Розыгрыш не скам ☺️ Классная возможность поднять себе настоение на Новый Год!

Познакомился с толковыми ребятами из хаба СБЕР IT Сочи, а затем сделали такую коллаборацию.

От меня в рамках розыгрыша будет такой приз:

💸 Подарочный сертификат на 3000 рублей на покупки в издательском доме Питер (включая бестселлеры O'Reilly, печатные и электронные издания)


Сегодня я бы выбрал эти книги:

Разработка приложений на базе GPT-4 и ChatGPT. 2-е изд.
Продакт-менеджмент на практике
— (у меня есть, но это must have!) Высоконагруженные приложения. Программирование, масштабирование, поддержка изд. 2025
Apache Kafka. Потоковая обработка и анализ данных, 2-е издание
Искусственный интеллект и компьютерное зрение. Реальные проекты на Python, Keras и TensorFlow

Участвуйте и выигрывайте!


А сам выступлю в феврале на оффлайн митапе с темой:

🟡 Рецепт приготовления Debezium + Kafka для near real time analytics

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥127
📼 Semantic Layer demystified - всё что вы хотели знать о Семантическом слое

Удалось договориться с лидерами/инфлюенсерами в отрасли и в январе планирую выпустить подкаст с участием:

Даня Чепенкоsynmetrix.org; автор Tg semanticlayer
Иван Фокеев – founding team Statsbot / Cube.dev; ex-Narrative BI; автор synmetrix.org


🟢 Обсудим:

— Истоки Cube.dev, история становления
— Аналитические потребности компаний
— Эволюция работы с метриками. Почему вообще возникает проблема которую решает семантический слой
— Тренды в аналитике и BI
— Семантическая модель и BI
— Разница между семантическим слоем и дата-каталогом. Что, нужно в какой последовательности
— Семантичская модель и GenAI / LLM


🔵 В подкаст попробуем добавить:

— Live demo, демонстрация интересных фичей и возможностей
— Кейсы и опыт различных компаний
— Интерактив: вопрос - мнения - дискуссия


🔻 У каждого есть возможность в комментах к этому посту проявить интерес и задать вопросы, которые будем обсуждать.

🔥 Уверен, подкаст получится огонь!

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4🎉2
🎄 Друзья, всем привет. Итоги 2024 и энтузиазм 2025.

2024 in a Nutshell:
— Осуществил миграцию Redshift to Snowflake
— Стал широко использовать Kafka + Debezium для Data Streaming
— Разработал подход к формированию витрины корпоративных метрик
— Сделал уверенные шаги в сторону использования Cube.dev для Semantic Layer
— Выпустил несколько первых видео на Youtube channel
— Несколько раз выступал на конференциях и делал различные доклады

В 2025 планирую:
— Повысить активность и структурированность постов, идей и мнений
— Сделать 2-4 запуска курсов: Desgining Modern Data Apps; Data Integration with Kafka
— Оформить, описать и предложить своё видение платформы данных на основе лучших в отрасли решений
— Начать формировать команду лидеров, способных трансформировать рынок и реалии
— Прикоснуться к новому и ранее мной неизведанному: Kubernetes, Advanced ML, LLM


Моё пожелание для вас: занимайтесь интересным, мотивирущим и увлекательным делом и любите его.
Создавайте, созидайте, рассказывайте, делитесь, ищите и находите единомышленников. Вместе мы создаем что-то новое, красивое и захватывающее.


🎄 С Новым Годом!
☃️ Всех благ и новой мотивации.

Ушел на салатики, Артемий 😏


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🥰8🙏521
😘 Data Engineering in the AI Era: Building a Robust Foundation for AI Applications

Привет! Получилось опубликовать запись доклада на YouTube: https://youtu.be/Z5aKQz78Go4


Текстовую выжимку основных идей публиковал ранее:

🟡 BUSINESS DELIVERABLES AND OUTCOMES

🔵 DATA INGESTION

🟢 DATA TRANSFORMATION

🟤 DATA OPERATIONS


Этот доклад в принципе отражает часть моей деятельности (не всё) и результаты, которые я получил в ходе нескольких последних лет:

— Как данные создают ценность и позволяют зарабатывать / оптимизировать деятельность / получать конкурентные преимущества
— Откуда брать данные, как их накапливать и делать это эффективно
— Как превращать наборы разрозненных строк в осмысленные датасеты и витрины
— Как удобно и гибко управлять всеми процессами и контролировать точки отказа


Уверен, найдете интересные идеи.

💬 Обсудить и задать вопросы можно в треде к этому посту.


🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥5🏆3👍1
💡 Clickhouse капризничает при HEAVY JOIN поэтому я рассмотрю альтернативы: Trino / Spark + S3 (Delta / Hudi / Iceberg)


🟡 Итак, вводные:

— Clickhouse очень требователен к ресурсам памяти
— Код написан аналитиком, фокус которого - на результате, не на оптимизации и выборе лучшего решения
— В 95% случаев возникает ошибка Out of memory, запрос прерывается, кластер недоступен на 20-30 секунд

Специфика расчета:
— Участвует множество CTE, к некоторым выражениям идет 2+ обращений
— В JOIN участвуют 2 большие таблицы фактов
— Для связи нет единого идентификатора 1:1
— JOIN похож на CROSS JOIN, т.е. на каждое событие клеятся все транзакции (по совпадению клиента)

Логи ошибки clickhouse-server.err.log:

<Fatal> Application: Child process was terminated by signal 9 (KILL). If it is not done by 'forcestop' command or manually, the possible cause is OOM Killer (see 'dmesg' and look at the '/var/log/kern.log' for the details).



🟢 Текущее решение проблемы - оптимизация кода

— Разбиваем одну dbt-модель на несколько: выполняем расчет поэтапно
— Появляется промежуточная материализация (таблица, на которую ссылаемся несколько раз)
— Пробуем применять фильтры как можно раньше, чтобы было меньше строк
— Конфигурируем физическое хранение данных: PARTITION_BY, ORDER_BY


🩷 Рекомендации

— Для витрин с нетривиальной логикой в обязательном порядке нужно добавлять документацию, а именно: желаемый результат, описание шагов преобразований, их назначение и порядок. Потому что без нее для любого человека (включая автора) становится трудно понимать, что это за код, зачем он так написан и что должно получиться

— Для любой витрины сначала проработать идею на концептуальном уровне (= написать документацию), и только потом приступать к написанию кода

— Для текущего кода есть более простое и оптимальное решение без множества CTE & JOINs, а именно: поместить данные в одну таблицу (UNION ALL) и пройтись оконными функциями

— Значения констант (для фильтрации) я бы советовал присваивать в заголовке кода модели через Jinja variable set для прозрачности и простоты внесения изменений


🟤 Мои выводы и идеи:

— Невозможно (сложно) уследить за каждой моделью dbt / запросом
— На этапе PR review неизвестно, как поведет себя запрос в PROD env (и когда возникнет проблема)
— Впоследствие нет желания оптимизировать / рефакторить каждый запрос по-отдельности
— При этом хочется дать каждому члену команды доступный, универсальный и надежный инструмент вне зависимости от уровня подготовки и понимания специфики расчетов / требований к ресурсам на низком уровне

📊 Поэтому: Рассмотреть переход на альтернативные движки для расчетов (heavy lifting): Trino / Spark, а Clickhouse оставить только как сверхбыстрый доступ к слою витрин данных.

— В идеале это transient cluster: поднял - посчитал - погасил (оплата только за время расчетов)
— Широкий набор доступных функций и возможностей трансформации
— Желательна максимальная поддержка dbt: наличие адаптера, artifacts, modules
— Интеграция с Kafka Connect (sink)

Кажется, идеально подходят движки Trino / Spark + S3 (Delta / Hudi / Iceberg)

💬 Что думаете?

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
👍642❤‍🔥1💯1
🔸 Привет! Cursor IDE, dev Containers, Env management, Advancing Github Actions, dbt reusable repo

Updates + Ideas Sharing за последние несколько недель:


🟡 Cursor IDE

— Установил попробовать IDE with advanced AI support
— Довольно просто перейти с VS Code (кто не в курсе, Cursor forked from VS Code)
— Порадовали очень быстрые ответы Advanced AI Models
— За 2 дня разработки потратил квоту в 150 запросов 😆
— Ранее я пользовался VS Code + Github Copilot
— В целом, я не сказал бы, что это прямо disruptor & game changer (только если вы ранее не пользовались чем-то подобным), но по ощущениям - приятно, интересно, шустренько

Продолжу trial на slow requests


🔵 Development Containers

Регулярно пишу об этом, и понимаю, что уже стал dev containers advocate, но не перестаю восхищаться тем, как это оптимизирует деятельность.

Представьте, по клику для вас локально или в облаке создается рабочее окружение:

— Вы работаете над dbt-проектом: Python + dbt (clickhouse/snowflake/bigquery/...) + linter + AWS/GCP/Azure CLI + Anything
— Вы работаете над Observable Data App: Javanoscript + npm + Python + linters
— Вы работаете над Kafka SMT: Java/Scala + Maven/Gradle

Плюс IDE Extensions: Kafka, Docker, Github, Gitlens, ...

Плюс Any feature: zsh, Terraform, Kubernetes, Docker in Docker, AWS CLI


🟢 Environments management

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

— Код гарантированно и с одинаковым результатом работает локально и на сервере / в облаке
TEST (CI): вы открыли PR - собралась новая версия Image, запустились тесты. Если ОК - вы получили зеленую галочку, PR можно вливать
PROD (CD): после merge собралась новая версия Image и она публикуется как основная версия приложения (либо для регулярных запусков dbt, например)

Максимальная автоматизация (почти все работает само), унификация (у всех одинково, у тебя, меня, в облаке и на сервере), простота (обновляем версии, устанавливаем новые тулы, управляем зависимостями).

Звучит как рай? Или утопия?


🔴 Github Actions: self-hosted runners, act CLI, actionlint CLI

Пока это самый удобный и feature-rich способ организовать полный цикл разработки и поставки кода приложений / сервисов (на мой взгляд).

— Я создал несколько self-hosted runners (linux based) - квота hosted runners ограничена
— При необходимости auto scaling можно использовать Kubernetes operator for Actions Runner Controller (ARC)
— Я собираюсь унифицировать и создать Actions / reusable Workflows для всех своих нужд
— И далее в каждом проекте / репо ссылаться и переиспользовать код, заданный в одном месте

Конечно, не всё просто и легко. Есть нюансы: lifecycle management, clean up, pruning old/untagged images, optimize image build time, only build if specific files change (devcontainer.json, Dockerfile, requirements.txt).

Я устал открывать PRs и дергать Actions вручную. Feedback loop показался слишком длительным, поэтому:

— Стал использовать actionlint = Static checker for GitHub Actions workflow files
— И научился имитировать запуски локально с act CLI = Run your GitHub Actions locally 🚀

Но, в целом, это total disruption, на мой взгляд. Меня зажигает эта идея. Вся infra часть закрыта, всё работает как часы, максимум фокуса и усилий на решении бизнес-задач и создании ценности.


🟤 dbt repo (module) for importing as a package

Есть идея вынести повторяющиеся части кода / макросы / тесты / функции в отдельный модуль:

— Работа с envs: dev, test, prod; Limit data for dev, test envs
— Macros: data masking, schema management, RBAC (Access grants), External tables, cleaning up
— Custom test suites
— Reusable dbt models (for specific data sources)
— Code linting (SQL Fluff, for example)
— Guidelines: CONTRIBUTING.md, Code style and conventions, PR checklist
— Docs: generate and publish dbt Docs automatically

Ранее я уже делал нечто подобное для dbt-проектов на основе myBI Connect (data integration SaaS):

mybi-dbt-core - dbt module for myBI connect
mybi-dbt-showcase - myBI Connect + dbt showcase project
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍32
Artemiy Kozyr
🔸 Привет! Cursor IDE, dev Containers, Env management, Advancing Github Actions, dbt reusable repo Updates + Ideas Sharing за последние несколько недель: 🟡 Cursor IDE — Установил попробовать IDE with advanced AI support — Довольно просто перейти с VS Code…
В общем, если вы еще не пользуетесь Development Containers, Github Actions, dbt, Cursor то я настоятельно вам советую попробовать.

😘 А если будет интерес, то могу и провести YouTube stream / tutorial со слайдами и демо (как мы любим).

Всем успехов. Делитесь своими updates 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍6
Data Apps Design pinned «🔸 Привет! Cursor IDE, dev Containers, Env management, Advancing Github Actions, dbt reusable repo Updates + Ideas Sharing за последние несколько недель: 🟡 Cursor IDE — Установил попробовать IDE with advanced AI support — Довольно просто перейти с VS Code…»
Artemiy Kozyr
📼 Semantic Layer demystified - всё что вы хотели знать о Семантическом слое
😘 Семантический Слой и Метрики - всё что вы хотели знать / Semantic Layer / Gen AI / Synmetrix / Cube

🟢 В новом выпуске подкаста обсудили концепцию Semantic Layer – Семантический слой

— Эволюция работы с метриками. Почему вообще возникает проблема которую решает семантический слой
— Аналитические потребности компаний
— Семантическая модель и BI
— Разница между семантическим слоем и дата-каталогом
— Семантичская модель и GenAI / LLM / Human language
— Где место таким инструментам как Streamlit / Observable / Evidently и смогут ли они заменить BI?
— Deployment best practics (fault-tolerance, k8s)
— Migration from LookML?
— Можно ли создать полноценное решение на основе Open Source / Core опций продукта?

🔵 В подкасте:

— Вопросы - ответы - мнения - дискуссия
— Live demo, демонстрация интересных фичей и возможностей
— Кейсы и опыт различных компаний

🟡 Участники:

— Даня Чепенко – synmetrix.org; автор Tg semanticlayer (https://news.1rj.ru/str/semanticlayer)
— Иван Фокеев – founding team Statsbot / Cube.dev; ex-Narrative BI; автор synmetrix.org
— Михаил Шеянов - Head of Data Architecture Practice/Senior PO @ SIBUR
— Артемий Козырь - Data Platform Leader @ Wheely

🟤 Timecodes

00:00:00 Что такое семантический слой? Для чего, когда и почему?
00:04:39 Семантический слой как подход к проектированию аналитических систем
00:06:52 Унификация метрик / Single source of truth
00:11:32 Synmetrix Semantic Layer Demo
00:20:30 SQL API
00:23:55 Semantic Layer sync to BI systems
00:27:19 Advanced modeling / measures / window functions
00:29:40 Headless BI / Consuming data / Observable / Embedded analytics
00:33:49 Case SIBUR + Synmetrix
00:52:19 Разница Cube core, Cube cloud, Synmetrix. Как сделать выбор?
00:58:40 Влияние GenAI / LLM, генерация SQL, мнения и прогнозы
01:08:37 Миграция с других реализаций семантического слоя / LookML (Looker)
01:11:05 Отличия Synmetrix & Cube
01:12:40 Synmetrix Roadmap - ближайшие планы развития продукта
01:13:35 Несколько слов о Data Catalog / Data Governance
01:18:05 Wrap up / Заключение


😘 https://www.youtube.com/watch?v=Bg9ZcndcYh0


Традиционно, Like / Repost – приветствуются.
💬 Есть чем поделиться/спросить – оставляйте комменты, и возможно это послужит пищей для следующего выпуска подкаста.

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5
Yandex.Cloud: Unavailability of ru-central1-b.

Первый раз с таким сталкиваюсь 😱

Надеюсь, скоро починят.
У меня джобы data integration, data modeling встали 🙂

At the moment, the ru-central1-b zone is completely inaccessible due to power issues. The team is currently investigating the causes and working to resolve them. We recommend that clients shift their workload to other zones. We will provide updates around 13:30.


https://status.yandex.cloud/en/incidents/1129
😱94
Чем быстрее и проще создается ценность для конечного пользователя, тем более востребованы будут ваши решения.

Любое решение похоже на пирамиду, каждый новый уровень которой строится на основе предыдущего.

Применительно к этому принципу, ранее я демонстрировал проект myBI Showcase, в котором объединял блоки

— myBI Connect (Extract - Load tool)
— Clickhouse (Database)
— dbt (Transformations) + mybi-dbt-core module
— Metabase (Business Intelligence)
— Github Actions (Continuous Integration + Deployment)

⚡️ myBI Market showcase guides you through building Modern Data Stack analytics:

— Configure environment
— Install and configure mybi_dbt_core package
— Configure data sources
— Build staging layer models
— Model Data Marts
— Visualize on a dashboard
— Publish dbt project docs
— Introduce Continuous Integration


Иногда пирамиду сравнивают с айсбергом, 2/3 которого скрыты под водой (скрыты, незаметны для пользователя).

— Зачем мне изобретать свою БД, если я могу взять (например) Clickhouse?
— Зачем мне создавать и поддерживать свои Data Integrations / Pipelines ко множеству сервисов-источников, если это можно получить как готовое решение со стабильным результатом?

Я могу сфокусироваться на моделировании такой витрины, которая будет отвечать на 99% вопросов бизнеса и нести ценность компании.

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

Посмотрите здесь: https://github.com/kzzzr/mybi-dbt-showcase

Недавно мои друзья из myBI Connect выпустили серию замечательных прикладных материалов по работе с платформой и её возможностями.

📊 Получить доступ: study.mybi.ru
Бонусом 1.500 рублей на баланс аккаунта + диплом.

А я скоро подготовлю новый кейс и серию видео / публикаций:

Bitrix как источник данных (myBI Connect)
Clickhouse
dbt (моделирование витрин)
Cube (semantic layer)
Observable (data app)
Github Actions (CI / CD)

Всё с учетом моего свежего опыта и знаний.

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍311
Universal dbt deployment (CD) and testing (CI) workflows, Data Integration via dlt, devcontainers advancements

Привет! Updates + ideas sharing за последние несколько недель:

🟡 Мгновенные универсальные и идентичные среды разработки на базе devcontainers 🟡

Я фанат devcontainers, ранее неоднократно писал о них, напоминаю:

— Декларативно задал окружение для разработки (например, dbt-проекта)
— Установил все зависимости и библиотеки (python, dbt-snowflake, dbt-clickhouse)
— Указал необходимые features (e.g. docker-outside-of-docker, aws-cli, terraform)
— Задал Extensions (e.g. vscode-dbt-power-user, gitlens, vscode-pull-request-github)
— Дополнительные сервисы (например, Cube, Metabase в соседних контейнерах)

Ниже новые результаты:

— Давай делать регулярный image prebuild где-то на сервере, а на клиентах делать только pull, что сократит время сборки на порядок и позволит избежать ошибок
— Давай создадим репо, где в одном месте соберем набор универсальных devcontainers под мои нужды
— В качестве postCreateCommand давай проверим наличие всех утилит: dbt -v, docker version, yc -v
— Автоматически запустим набор инициализирующих команд как postStartCommand: dbt deps, dbt run-operation initialize_dwh, obsutil config -i=$OBS_ACCESS_KEY_ID -k=$OBS_SECRET_ACCESS_KEY -e=$OBS_ENDPOINT


🔵 Data Integration Pipelines via dlt orchestrated by Github Actions 🔵

Работал над интеграцией данных одного из популярных сервисов через API.

— Изучил API, доступные методы и структуру данных
— Подготовил скрипт на Python, который осуществляет регулярные выгрузки данных
— В структурированный файловый формат .parquet с типизацией
— Доступны режимы: 'incremental' and 'historical' (any specified time period)
— Запускаю по расписанию как workflow в Github Actions
— Сам код и зависимости выполняются в контейнере (конечно, devcontainers)
— Уведомления об ошибках отправляет Tg-bot в указанную группу

Появилась идея писать универсальные интеграции с использованием некоего фреймворка. Рассматриваю dlt - data load tool.

Кто работал с dlt? Насколько интересный и качественный тул?


🟢 dbt deployment (CD) with Github Actions - единый универсальный workflow 🟢

Проблема:

— В наличии множество Github Actions Workflows, которыми трудно управлять по-отдельности
— Workflows едва связаны между собой, привязка ко времени расчета (0 минут, 15 минут, 30 минут каждого часа)
— Сборка docker image осуществляется принудительно, не запускается автоматически при изменении в содержимое
— Сборка docker image игнорирует cache (docker layers)
— Примеры: собрать и опубликовать docker image, собрать DWH: dbt build, опубликовать документацию: dbt docs, проверить актуальность данных: dbt source freshness

Решение:

— Собрать связанные задачи и действия в единый workflow
— Всегда актуализировать среду выполнения (docker image) опираяюсь на изменения в коде
— Оптимизировать подготовительные шаги (docker build) с помощью использования cache

Ключевые результаты:

— Единый workflow-файл для всех задач dbt PROD deployment
— Актуализация среды исполнения кода как предварительный шаг для каждого запуска
— Возможность reusing workflow files (т.е. использовать один шаблон)


🩷 dbt sources + Database Engine features (Clickhouse, Snowflake) 🩷

Проблема:

— В dbt зарегистрировано множество источников, но порядка и полноценного понимания что есть что нет
— Невозможность указать схему данных вручную приводит к невозможности читать источник данных
— Некоторые схемы-источники доступны только в одном экземпляре (сразу для DEV, TEST, PROD), а необходима возможность каждому иметь свою версию

Решение:

— Использовать STAGES (Snowflake), NAMED COLLECTIONS (Clickhouse) для создаваемых интеграций (S3, PostgreSQL, MySQL, etc.)
— Поддержка схемы данных (список таблиц, колонок, типов данных)
— Возможность для каждого пользователя создавать свои экземпляры таблиц-источников данных для интеграций с помощью dbt macro

Ключевые результаты:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍31
— Все интеграции создаются через STAGES, SNOWPIPES, NAMED COLLECTIONS - забыли про указание токенов, секретов, адресов, логинов, паролей, ключей для БД-источников
— Возможность указывать (подмножество колонок, явное указание типа данных) и не указывать (SELECT *) схему данных для создаваемых таблиц-источников
— Заполнение всех данных по каждому источнику: docs, freshness, tags


🔴 dbt test (CI) - полноценный конвеер Automated Tests с Github Actions 🔴

Ключевая идея в том, чтобы в независимом окружении (TEST) собрать проект и убедиться, что результаты соответствуют ожиданиям:

— Код в принципе работает (compile)
— Модели собираются в объекты в БД (run)
— Пройдены все тесты (test)

При этом сделать это оптимальным образом:

— Единый универсальный workflow для всех задач CI
— Уменьшенный объем данных (быстро)
— При необходимости, только изменяемый подграф - DAG subset (еще быстрее)

Once PR is opened:

— Build related docker image
— Deploy code to TEST
— Run tests

After PR is closed (merged or rejected):

— Remove transient database schema
— Remove linked docker image as well as old/untagged images from container registry


Скоро добавлю мысли и по этим идеям:

— Разрабатываю и тестирую Github Actions локально с Act CLI + actionlint
— Persist docs - Автоматически актуализировать документацию/описания объектов dbt в DWH и далее (downstream)
— Пирамида создания ценности в Data
— Мне очень понравился Apache Superset и впредь я бы рекомендовал его как замену популярным managed / proprietary BI (Looker, Datalens, Tableau, PowerBI, etc.)
— Квест с поиском исчезнувших записей - Debezium, Kafka Connect, Snowflake Sink
— Data Compaction в Object Storage (S3 / OBS / MinIO) - множество мелких файлов в один .parquet
— Clickhouse production-ready deployment checklist + configurations as code
— В целом кристаллизовались идеи по поводу направлений (видов) деятельности в Data
— 2025Q1 PERFORMANCE SELF REVIEW + PLANS

💬 А пока - давайте обсудим!
Давно не общались. У кого какие новости?

🌐 @data_apps | Навигация по каналу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Data Apps Design pinned « Universal dbt deployment (CD) and testing (CI) workflows, Data Integration via dlt, devcontainers advancements Привет! Updates + ideas sharing за последние несколько недель: 🟡 Мгновенные универсальные и идентичные среды разработки на базе devcontainers…»