Data Apps Design
رفتن به کانال در Telegram
В этом блоге я публикую свои выводы и мнения на работу в Data: — Data Integration — Database engines — Data Modeling — Business Intelligence — Semantic Layer — DataOps and DevOps — Orchestrating jobs & DAGs — Business Impact and Value
نمایش بیشتر1 501
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-27 روز
-1130 روز
آرشیو پست ها
1 501
⚡ NEAR REAL TIME / STREAMING и Бизнес-необходимость в вашей компании / проекте
1 501
🔵 ОСТРЫЕ ТЕМЫ: SALARY, PERFORMANCE REVIEW, ДЕГРАДАЦИЯ КУЛЬТУРЫ РАЗРАБОТКИ, ПОЗИЦИОНИРОВАНИЕ В ОТНОШЕНИЯХ С EMPLOYER
Салют! Вчера осознал тот факт, что я в основно пишу сухие технические тексты, которые во многом отражают аспекты моей текущей деятельности, но игнорируют стратегическое видение.
Есть мнение, что существуют гораздо более актуальные темы, которые читатели хотели бы услышать и обсудить. Среди тех, на которые я хотел бы высказаться:
🔢 Почему компании со скрипом повышают SALARY даже на 10% даже в том случае, если вы экономите (ЗАРАБАТЫВАЕТЕ) для нее $50K+ в год
🔢 Мое мнение насчет проведения PERFORMANCE REVIEW в компании и почему вы с высокой вероятностью получите "Ты молодец! Продолжай в том же духе!"
🔢 Что дает человеку чувство собственной власти и независимости от EMPLOYER, а равно и спокойствие, уверенность, и высокую производительность
🔢 Как дать понять МЕНЕДЖЕРУ и всем СТЕЙКХОЛДЕРАМ, что вы занимаетесь ключевой и важной работой, без должного выполнения которой их деятельность будет затруднена (НЕВОЗМОЖНА)
🔢 Почему даже в СТАРТАПАХ деградирует культура разработки и поставки качественных решений (кода), а стиль управления оставляет желать лучшего
❤ Помогите выбрать лучшую тему для ближайшего поста, а я пока займусь его написанием
🌐 @data_apps | Навигация по каналу
1 501
⭐ Docker: перенести Volumes в другую Filesystem без потери данных
🔹 Ситуация
Вы создали VM, разместили на ней свои сервисы в Docker, запустили, сервисы (например, Kafka + Kafka Connect) начали писать данные.
Вдруг вы обнаруживаете, что disk volume заканчивается.
df -hЧто делать? Как перенести Docker Volumes и избежать ошибки Disk full? 🔺 Действия — Добавить новый Filesystem, на котором будет достаточно места — Остановить контейнеры — Отключить Docker services — Unmount docker overlay filesystems — Перенести данные в новый раздел — Внести изменения в конфигурационный файл Docker daemon.json — Включить Docker services — Запустить контейнеры 🟡 Скрипт
# Stop Docker containers
docker compose stop
# Stop Docker services
systemctl stop docker
systemctl stop docker.socket
# Unmount docker filesystems
umount /var/lib/docker/overlay2/*/*
# Move data
mv /var/lib/docker/ /mnt/${DESTINATION}/
# Edit Docker service configuration file:
nano /etc/docker/daemon.json
# Add or modify the data-root configuration option to point to the new directory:
{
"data-root": "/mnt/path/docker"
}
# Save and close the file.
# Start the Docker service:
systemctl start docker
systemctl start docker.socket
# Start Docker containers
docker compose start
Также этот скрипт на Github Gist: https://gist.github.com/kzzzr/fef4c9c88f301c282275e6d451e080f5
Это сработало для меня, и должно сработать для вас.
В частности, это позволило мне расширить дисковое пространство на VM, и позволить Docker писать в новую Filesystem БЕЗ повторного запуска full sync истории по 100+ коллекциям MongoDB (Debezium Connector + Kafka topics).
🌐 @data_apps | Навигация по каналу1 501
🔹 Хочу устроить Real Time Data Sync — дайте критику и комментарии
Привет! Последние пару недель плотно работаю над настройкой Data Pipelines через Debezium + Kafka Connect.
🔺 Общая схема будет выглядеть так:
— Sources: MongoDB, Postgres
— Source connectors: Kafka Connect + Debezium (CDC)
— Kafka as intermediate storage
— Sink connector: Snowflake connector for Kafka (Snowpipe streaming)
— Snowflake as destination
Упражнения, которые я проделываю:
🟡 Deploy services: Kafka + Kafka Connect (+ Zookeeper + Schema registry + REST Proxy)
Вообще, готовые образы есть от: Confluent / Debezium / Strimzi.
Я пока использую образы от Debezium + Strimzi. Модифицирую, добавляя нужные мне коннекторы указанных версий (JAR-файлы).
У Strimzi есть операторы для K8s, которые я планирую использовать.
А вот K8s deployment от Confluent входит в Enterprise plan и подлежит лицензированию.
🔵 Choose collections for replication
Выбрал несколько несложных коллекций для тестирования и дебага.
Несложные, потому что:
— Небольшое количество колонок
— Минимальное количество вложеных nested-структур
— При этом частые обновления - получаю лог изменений CDC сразу.
— Глазами можно отследить все применяемые изменения (либо то, что не получается)
🟢 Source connector (MongoDB)
На выбор у меня было 2 Connectors:
— MongoDB Kafka Connector
— Debezium connector for MongoDB
Несмотря на наличие отличной документации и даже поддержку snapshot с учетом фильтра (например, sync истории только за 1 год), выбор сделан в пользу Debezium Connector. Позже подробно напишу доступные возможности и пример конфигурации.
🩷 Metadata fields for events
В каждое событие дополнительно пишу ряд метаданных:
—
ts_ms = metadata timestamp
— op = c (create), u (update), d (delete), r (snapshot)
🔴 Message transformations: Topic route, New Document State Extraction
— Topic route: Мессаджи направляю сразу в топики с целевыми названиями таблиц в Snowflake.
— New Document State Extraction: этат трансформация позволяет перейти от сложного и детального формата события Debezium (schema, before, after) к упрощенному виду (только after), который мне и нужен в Snowflake.
🟤 Debug events
Развернул devcontainer (docker-compose based), установил kcat + jq.
Использую kcat для просмотра топиков, key-value значений, оффсетов.
jq использую для форматирования ответов от REST API (Kafka Connect).
Очень удобно проконтролировать изменения, которые вношу пунктом ранее.
🟡В следующем посте:
— Externalizing secrets
— Create a sink connector (Snowflake)
— Set up monitoring (Prometheus + Grafana)
— Use AVRO data format (io.confluent.connect.avro.AvroConverter)
— Configure topics (compact + delete, etc.)
— Configure incrmental snapshots loads via Debezium signals
— Ensure PII data masking (message transformations, connector configuration)
— Add HTTP bridge / REST proxy
🔻 Могли бы покритиковать / поделиться опытом / посоветовать что-либо?
🌐 @data_apps | Навигация по каналу1 501
🔰 Быстро и просто устроить ENVs для Data: DEV, TEST, PROD (part 2)
✅ Как это сделать
— Проще всего использовать единую СУБД и разделить ее на набор databases / schemas
— Среда - это лишь совокупность connection details + role + target schema
— В dbt это называется targets и задается в файле profiles.yml
— В зависимости от используемой среды вы хотите модифицировать тот или иной код
✅ Давай примеры
🩷 profiles.yml для dbt с 3-мя средами.
Вместо деталей для подключения используются переменные среды, которые задаются:
— Локально на компьютере пользователя в DEV
— В CI-инструменте (Github Actions) для TEST
— В Orchestration tool (dbtCloud) для PROD
Полностью по ссылке: https://gist.github.com/kzzzr/02d4f1f86d19df9c90210b177a561406
🩷 Limit rows for DEV and TEST with Jinja SQL:
{#- prepare expression to limit rows depending on target.name and flags provided -#}
{%- if target.name in ['prod'] and history_depth_days > 0 -%}
{%- set watermark = 'DATEADD(days, ' ~ -1 * history_depth_days ~ ', CURRENT_TIMESTAMP::DATE)' -%}
{%- set history_depth_expression = timestamp_column ~ ' >= ' ~ watermark -%}
{%- elif target.name not in ['prod'] and limit_data_for_dev == true -%}
{%- set watermark = 'DATEADD(days, ' ~ -1 * var('data_tests_depth_days') ~ ', CURRENT_TIMESTAMP::DATE)' -%}
{%- set history_depth_expression = timestamp_column ~ ' >= ' ~ watermark -%}
{%- else -%}
{%- set history_depth_expression = '1 = 1' -%}
{%- endif -%}
{#- prepare final filter expression -#}
where 1 = 1
and {{ deleted_rows_expression }}
and {{ history_depth_expression }}
🩷 Уровень серьезности (Severity) теста: ERROR для PROD, WARN для DEV:
- name: timezone
tests:
- dbt_utils.not_null_proportion:
at_least: 0.95
severity: "{{ 'error' if target.name in ('prod') else 'warn' }}"
🩷 Используемый COMPUTE в зависимости от среды:
{{
config(
materialized='table',
snowflake_warehouse='WH_LARGE' if target.name == 'prod' else target.warehouse
)
}}
🩷 Запись артефактов dbt run в метаданные (только для PROD):
on-run-end:
- "{% if target.name == 'prod' %}{{ dbt_artifacts.upload_results(results) }}{% endif %}"
✅ Какие преимущества
— Все пользуются одними и теми же исходными наборами данных (data sources) - исключены расхождения и несогласованность
— Zero effort - не нужно создавать среды как отдельные инстансы, разворачивать ПО, копировать датасеты и следить за актуальностью
— Один проект = один репозиторий с кодом ✔
— Разница поведения и конфигураций для разных сред легко поддерживается с помощью шаблонизации Jinja SQL
— Это экономически выгодно и целесообразно. Используя Snowflake вообще perfect, т.к. у вас decoupled storage & compute, при этом compute unlimited
— Это быстро и безболезненно с точки зрения поставки кода и Time2Market
❤ Расскажите, как эти процессы реализуете вы? В чем недостатки и преимущества подхода?
🌐 @data_apps | Навигация по каналу1 501
🔰 Быстро и просто устроить ENVs для Data: DEV, TEST, PROD
Как устроен процесс разработки? Какие среды в наличии? Насколько быстро можно задеплоить изменения в прод?
Часто общаюсь с людьми на эти темы. От многих слышу о белых пятнах и несовершенствах в установленных процессах.
✅ Зачем это делать
DEV: Изолированная среда для каждого члена команды с правами владельца
— Каждый пользователь - владелец своей среды (CREATE, INSERT, UPDATE, DELETE, DROP)
— Интерактивная разработка - написал код, создал объекты в БД, проверил, сделал коммит, повторил
— Люди не мешают друг другу - среды изолированы и независимы
— Тот же набор данных, только в масштабе (1:100)
TEST: независимые и беспристрастные автоматизированные проверки
— Осуществляется запуск для законченного объема работы (Pull Request)
— Sanity check: код работает и расчеты завершаются без ошибок
— Advanced testing: data quality, unique, not null, reference, etc.
— Без успешного завершения тестов код нельзя выводить в PROD
PROD: основная среда, которую используют company wide: DWH, Semantic layer, BI dashboards, Pipelines
— SLA - есть обязательства и ответственность перед пользователями и потребителями
— Любые изменения прошли все этапы проверки
— Важна производительность вычислений
— Покрытие тестами и ожиданиями позволит обнаружить отклонения и ошибки
💬 Кто использует какие-то другие среды, расскажите что это и зачем?
🌐 @data_apps | Навигация по каналу
1 501
⭐ Apache Superset — продолжаю использовать и приятно удивлен
Последнее время начал глубже погружаться в Superset – тул класса Business Intelligence для визуализации и дашбординга.
🔵Развертывание через Docker-compose тривиально
git clone --depth=1 https://github.com/apache/superset.git
export TAG=3.1.1
docker compose -f docker-compose-image-tag.yml up
Есть варианты с Kubernetes, PyPI
🟤 Доступна локализация Superset на русский язык
Выполняется как добавление русского языка в список доступных:
LANGUAGES = {
"ru": {"flag": "ru", "name": "Русский"},
"en": {"flag": "us", "name": "English"}
}
🟡Подключение к источнику данных Clickhouse
Из коробки в Superset нет возможности подключиться к Clickhouse.
В моем случае, я выполнил скрипт установки в одном из контейнеров:
pip install clickhouse-connect
Возможно собирать готовые образы с предустановленными драйверами и пользовательскими конфигурациями.
🔵 Использование семантического слоя Cube в качестве Database Connection
Всё работает замечательно.
Cube показывает Postgres-подобный SQL API, который можно использовать в Superset из коробки.
🔸 Однако, в случае, если вы хотите применять custom formatting для ряда метрик (.2% - доля в процентах до двух знаков после запятой), то вам придется задать METRICS (формула + название) и в Superset, т.е. по сути выполнить задать метрику дважды, что не очень хорошо.
🟫 Также новые метрики доступны к использованию только после явного Dataset metadata refresh. Т.е. даже в случае Continuous Deployment придется пройти и нажать все кнопочки явным образом.
🔴 Графики на Apache ECharts
Почему Apache ECharts? Коротко:
— large library of visualization types
— high performance, ideally supporting canvas rendering
— powerful declarative API for customizing and theming charts
— internationalization support
— an active and growing community
❤️ Уже заценил Mixed chart, где можно совместить несколько метрик различных типов (bar + line) с общей осью (X = Time).
🟢 Кастомизации графиков
Итак, порой у пользователей дашбордов возникают странные и на первый взгляд неосуществимые требования 🟢:
— Применение особенного форматирования - stacked bar chart values alignment (center)
— Добавление строк, колонок в визуализацию (пустые строки-разделители Excel-like) - попробуем Custom CSS
— Новые (недоступные из коробки) визуализации - обратимся к библиотеке Apache ECharts
— Расширенное редактирование имеющихся графиков
Мне еще многое предстоит выяcнить в этих моментах, но учитывая наличие материалов, думаю, что это будет осуществимо.
🩷 В Tg есть русскоязычное community @superset_ru
— Многие вопросы находятся в поиске по ключевым словам
— Ранее не обсуждавшийся вопрос можно сформулировать и задать коллективному разуму
Не всё получается сделать сразу, быстро и просто. Но пока впечатления положительные.
👤 Поделитесь, какие ваши? Сталкивались с тем, что не получалось решить? Раздражало в Superset?
🌐 @data_apps | Навигация по каналу1 501
▶️ SQL + dbt = God Mode Data Modeling / Подходы к созданию витрины корпоративных метрик
— Бизнес-задача: Дашборд для Weekly Business Review (WBR)
— Решение «Hardcore Cube» 🗿
— Решение «Direct Runtime» 🦅
— Aggregate awareness (Looker) как оптимизация производительности
— Решение «Godlike modeling» 👑
— Как отразилась смена СУБД с Amazon Redshift на Snowflake на решении?
✅ Как всё это использовать у себя?
— Находите повторяющиеся паттерны и переиспользуйте код (DRY)
— Пишите универсальный код с dbt
— Не изобретайте велосипед - используйте packages
— Ищите баланс между материализацией и runtime queries
— Чем меньше кода, тем лучше
Слайды доклада: https://drive.google.com/file/d/1_KGuLGWksWBHz0SKUEOW1MO4Acxea0s3/view?usp=sharing
👑 Учиться со мной: https://forms.gle/uwETpSRA6ux7Gr1t7
🌐 @data_apps | Навигация по каналу
1 501
🔳 The Ultimate Guide to dbt
Everything you could ever know about dbt, all in one canvas.
Некоторое время назад получил письмо от Sales rep Count на тему демо их продукта. Стал изучать сайт и наткнулся на вполне приличный гайд в формате canvas по dbt и связанному с ним toolset, чем считаю необходимым поделиться.
Рекомендую тем кто изучает dbt, структурирует информацию, любит красивые визуализации а-ля mindmaps.
Из интересного, что я отметил:
— dbt core ecosystem
dev tools / data observability / documentation
— deployment
Environments / CI-CD / orchestration / testing
— suggested packages
useful dbt packages
— command syntax
commands, CLI flags, selection syntax
— dimensional modeling guide
design process, data modeling flow, normalization - denormalization
— dbt alternatives
К сожалению, потыкать на ссылки вам придется самим из canvas map / table of contents 🔸
Итого: неплохой ресурс, чтобы достаточно быстро войти в курс дела и при желании углубляться в конкретные темы.
Но считать, что вы знаете о dbt всё, просто посмотрев эти картинки я бы не стал 😄
Кое-что из этих материалов буду рассматривать на ближайшем запуске DMDA 👑
🌐 @data_apps | Навигация по каналу
1 501
🔹 Найдись Data Infrastructure Engineer / Analytics Engineer
Ссылка на вакансию: Data Infrastructure Engineer
Стек, технические навыки и особенности описал в прошлом посте.
Локация: Кипр / Москва.
Дополнительно обращаю внимание на то, что нужен хороший английский язык.
🔸 Что будем делать:
We are looking for a Data Infrastructure Engineer to strengthen our Data Team at Wheely, proactively seeking and providing Business Users and Data Scientists with best-in-class and seamless experience. Responsibilities — Enhance Data team with architectural best practices and low-level optimizations — Help refactor and improve codebase (dbt for data transformations, LookML for semantic layer) — Support on evolving Data Integration pipelines (Airbyte, Debezium, Kafka), Database engines (Snowflake), BI tools (Looker, Metabase), reverse ETL syncs (Census) — Cover up business units with feature requests / bugfixes / data quality issues — Enforce code quality, automated testing and code style⭐ Тем, кто пришлет CV мне в ЛС @kzzzr – сделаю рекомендацию напрямую (referral). 🌐 @data_apps | Навигация по каналу
1 501
Доклады на Апрельском бигдатнике sql-ninja (Москва, 27.04)
Я готовлю practice-oriented доклад 🔺 SQL + dbt = God Mode Data Modeling
☕️ Буду доступен для живого общения и нетворкинга:
— Мнения насчет Snowflake, dbt, Looker, Cube и других
— Консалтинг в сфере Data
— Обучающий цикл DMDA
🛡 Сам заинтересован в следующих докладах:
— Что правда из того, что говорят про Clickhouse
— Как отбалансировать десятки брокеров с миллионом rps с помощью Cruise-Control
— Airflow dbt integration
— Как мы расширяем возможности open-source решений на примере Arenadata DB
Регистрируйтесь: https://sql-ninja.ru/ticket/
До встречи!
🌐 @data_apps | Навигация по каналу
1 501
🔹 Найдись Data Infrastructure Engineer / Analytics Engineer
Скоро будет открыта сочная вакансия ко мне в команду в Wheely
🟡 Стек инструментов и задачи вкуснейшие 🍑
— Двигаемся в сторону Near real time data sync: Debezium + Kafka
Источники: MongoDB, PostgreSQL, CockroachDB, Snowplow, Braze, etc.
— Tuning Snowflake + dbt - доводим до совершенства трансформации данных и DAG
— Semantic Layer + BI (Looker + Metabase) – метрики и показатели как код, в планах Cube
— DataOps + MLOps – управление Data Services, Code Quality, CI/CD, Observability
Поиск аномалий и отклонений в метриках и данных
Помогаем DS выводить модельки и управлять их ЖЦ
🟡 Свобода действий и выбора, но и высокая ответственность
— Работать непосредственно со мной, буду обучать и отвечать на все вопросы
— Напрямую влияем на бизнес и показатели, общаемся с C-level guys
— Возможность предлагать новые подходы, тулы и сервисы
— По salary обид не будет точно ◻️
— Возможность поехать на Кипр (relocation support package!)
⭐️ Кого заинтересовало – готовьте CV.
🌐 @data_apps | Навигация по каналу
1 501
🔸 Развернул Self-hosted runner for Github Actions
🟡 Причина: Закончилась квота минут на использование Managed Runners, были остановлены все расчеты и сборки
Использовал базовую 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 (и прочим подобным тулам) — По цене базовой виртуалки ◻️ До сих пор используете Jenkins? 🌐 @data_apps | Навигация по каналу
1 501
Помните пост 🚀 Ключевые метрики компании на дашборде - путь от 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 | Навигация по каналу
1 501
▶️ Успешный SaaS на рынке Аналитики – cтановление и планы развития / Алексей Сидоров из mybi connect
Ура! Релиз моего первого интервью на YouTube с Алексеем Сидоровым из mybi connect
Ключевые идеи и мысли в беседе:
— В бизнесе побеждает тот, кто создает и использует конкурентные преимущества, в т.ч. основанные на данных
— Делегировать базовые задачи и создавать ценность на прочной основе выгоднее, чем изобретать свой велосипед (писать и поддерживать коннекторы)
— PowerBI – мощный и удобный инструмент, но заметен рост интереса к стеку dbt + Clickhouse + Cube + любой BI
— Модель данных Звезда / Снежинка позволяет отвечать требованиям гибкости и изменчивости данных
— Работа в рамках SaaS позволяет эффективно выстраивать процессы силами небольшой команды. Консалтинг и внедрения успешно реализуются через Marketplace и сеть партнеров
— Все клиенты делятся на две группы: in-house аналитика и партнеры, делающие внедрения на заказ
— Платформы, обещающие обучить профессии бизнес-аналитика за 2 месяца продают иллюзии. Навыки приобретаются в реальном бою и не всегда красивых и удобных бизнес-кейсах
— Лучшие продажи – "изнутри", когда аналитик компании сообщает о необходимости сервиса для решения задач
🔺 Таймкоды доступны в первом закрепленном комментарии на YouTube.
💻 Задавайте свои вопросы в комментариях к видео - я отвечу всем!
⭐️ Друзья, поддержите мой труд лайком и подпиской - ваша поддержка вдохновит на создание новых роликов.
Приятного просмотра!
🌐 @data_apps | Навигация по каналу
1 501
🟢 Snowflake Cost Management
Активная фаза 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 марта – день в разгаре
Ключевые выводы:
— ✔️Однозначно, разделение запросов и пользователей (workloads) на разные Virtual Warehouses - это преимущество
— ✔️Конфигурация и настройки прямо влияют на производительность и расходы. SCALING_POLICY / SCALING_POLICY / STATEMENT_TIMEOUT_IN_SECONDS / MAX_CONCURRENCY_LEVEL / etc.
— ✔️Оптимизация становится дико интересной игрой, когда она четко привязана к метрике (💵)
— ✔️Стали доступны продвинутые инструменты Мониторинга: dbt Artifacts, Snowflake Cost Management, Resource Monitors
— ✔️Правильное расписание (scheduling) имеет значение - делай расчеты и запуски только тогда, когда это необходимо
— ✔️Выбор Warehouse size – решение уравнения с переменными время исполнения и стоимость
— ✔️Мой dbtCloud setup стал значительно проще (набор jobs и их конфигурация, на картинке)
— ✔️Явный эффект для крупных таблиц имеют Cluster keys (упорядочивание записей в micro-partitions, что-то типа индекса)
— Первая неделя использования Snowflake внушает оптимизм относительно того, что траты, возможно, будут немного меньше, чем на Redshift, при всех полученных преимуществах
Каждый из перечисленных пунктов достоин отдельной публикации и раскрытия подробностей.
⭐️ О чем хотели бы узнать детально?
Я продолжаю экспериментировать и постепенно внедрять и другие отмеченные мной Snowflake features.
🌐 @data_apps | Навигация по каналу
1 501
❄️ Финализирую 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
—
dbt build --full-refresh
— 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 | Навигация по каналу1 501
⛔ PowerBI и Azure в РФ всё!
Дорогие клиенты, вам даем времени 5 дней на offboarding, дальше сами.
Не удивлен, не расстроен, но воодушевлен.
Никогда не любил PowerBI в силу ряда причин:
— Нет клиента для Mac / Linux
— Нет версионирования (вроде что-то завезли, но это не полноценный git)
— Всё необходимо щелкать мышью 🟦
— Какие-то сложносочиненные навороты с DAX / MDX, погружаться в которые нет желания
— Gateways и прочие сложности с публикацией и регулярным обновлением 🟦
— И конечно же тесная связь с Microsoft и их софтом
💠 Проведу 1-2 короткие консультации БЕСПЛАТНО насчет миграции из PowerBI / Azure в новый мир:
— 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
— Orchestration: Airflow / Dagster / Prefect
— Monitoring: Prometheus, Grafana
Напишите мне в ЛС @kzzzr:
— Для чего вы использовали PowerBI
— Какие у вас источники данных
— Какие объемы данных
— Примерный перечень и сложность расчета метрик (показателей)
— Комментарий по срокам и необходимости видеть актуальные отчеты
🌐 @data_apps | Навигация по каналу
