tl;dr data
150 subscribers
39 photos
139 links
Ежедневный дайджест о технологиях и инструментах в мире данных
Download Telegram
How Rapport Labs Adopted StarRocks for Ad Performance Data

Rapport Labs рассказали, как перестроили систему аналитики рекламных кампаний после того, как MySQL-based pipeline перестал масштабироваться.

Изначально события хранились в двух MySQL-таблицах:

ad_interaction_raw содержала показы, клики и другие пользовательские события, записываемые в реальном времени;

ad_purchase_aggregated_events содержала покупки, связанные с рекламными показами или кликами, и обновлялась раз в пять минут.

Периодический batch job считывал новые строки по ID из global_pointer, агрегировал impressions, clicks, billed amount, purchase quantity и purchase amount по рекламной кампании, а затем публиковал инкременты в Kafka.

Kafka consumer обновлял агрегированные таблицы в MySQL и пересчитывал CTR, CVR и ROAS.
Campaign ID использовался как partition key, а transactional inbox pattern обеспечивал идемпотентность обработки.

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

Каждый новый уровень агрегации требовал отдельного batch job, Kafka consumer и MySQL-таблицы.

В результате:

• росло количество дублирующихся пайплайнов;

• увеличивалась write-нагрузка на MySQL;

• cursor-based обработка могла приводить к пропускам данных;

• изменения исторических данных не попадали в агрегаты автоматически;

Высокая нагрузка на MySQL была критична: та же база участвовала в формировании billing source data, поэтому задержки могли влиять на рекламную выручку.

Команда решила вынести обработку performance data в отдельную OLAP-систему и сравнила BigQuery, ClickHouse и StarRocks.

BigQuery уже использовался внутри компании, но не подошел для частых near-real-time запросов: on-demand pricing становился дорогим, а capacity-based модель требовала постоянно держать избыточные ресурсы.

При тестировании ClickHouse команда столкнулась с проблемами интеграции с Glue Catalog и Iceberg.
Таблицы с timestamp-колонками не появлялись в SHOW TABLES, а SQL-запросы через Glue Catalog завершались ошибкой S3 URI.

StarRocks выбрали по нескольким причинам:

• стабильная интеграция с Glue и Iceberg;

• возможность читать source data напрямую из S3 без повторной загрузки;

• Data Cache для кэширования удаленных блоков на BE-узлах;

• Materialized Views для предварительной агрегации часто запрашиваемых данных;

• Cost-Based Optimizer для выполнения JOIN;

• совместимость с MySQL wire protocol, позволившая переиспользовать существующие драйверы и query libraries backend-приложения.

Source of truth при этом оставили вне StarRocks: данные хранятся в Apache Iceberg на Amazon S3, а метаданные — в AWS Glue Catalog.

StarRocks читает исходные Iceberg-таблицы как external tables, но данные, которые непосредственно выдаются продавцам, формируются во внутренних Materialized Views.

Сначала кластер развернули в shared-data конфигурации с FE и stateless CN.
В этой архитектуре внутренние таблицы и MV также хранились в S3.

Для near-real-time аналитики Materialized Views обновлялись каждые несколько минут.
Это генерировало большое количество S3 PutObject и привело к более высоким расходам, чем ожидалось.

После перехода на shared-nothing архитектуру с FE и BE внутренние данные и Materialized Views стали храниться на локальных дисках BE-узлов.
Связанные с этой частью инфраструктуры расходы снизились примерно на 95%, а мониторинг refresh Materialized Views стал проще.

Поскольку исходные данные оставались в Iceberg, для миграции команде не пришлось переносить source data: они развернули новый кластер и заново построили Materialized Views.

В результате Rapport Labs получили масштабируемую систему near-real-time агрегации, снизили нагрузку на MySQL, устранили пропуски в агрегатах и сократили восстановление после инцидентов с более чем четырех часов до менее чем 30 минут.

Этот кейс хорошо показывает архитектуру, в которой Iceberg используется как независимый storage layer и source of truth, а StarRocks — как OLAP-движок и serving layer для пользовательской аналитики.

@tldr_data
🔥1
Forward-Deployed Engineer (FDE) — одна из самых быстрорастущих инженерных ролей в AI.

По данным a16z и TechCrunch, за последний год количество вакансий FDE выросло более чем на 1100%.
OpenAI, Anthropic, Palantir, Cursor, Redpanda и десятки других компаний активно нанимают таких специалистов.

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

Идея FDE не нова. Ещё в 2007 году Palantir построила вокруг неё свою модель работы с корпоративными клиентами. Сегодня её используют многие AI-компании.

Что же делает FDE?

Если коротко, это инженер, который отвечает за внедрение AI-решения у конкретного клиента и доводит его до production.

В его задачи обычно входят:

изучение бизнес-процессов заказчика;
разработка production-кода, а не PoC;
интеграция с внутренними системами (API, базы данных, IAM, CRM, ERP);
деплой, наблюдаемость, эксплуатация и поддержка решения;
передача повторяющихся запросов обратно в продуктовую команду, чтобы улучшить платформу для всех клиентов.

По сути, FDE находится на пересечении сразу нескольких ролей: Software Engineer, Data Engineer, Platform Engineer и Solutions Architect.

Главное отличие от Solutions Engineer заключается в ответственности. Solutions Engineer чаще помогает спроектировать решение и провести демонстрацию. FDE отвечает за то, чтобы система действительно заработала в инфраструктуре клиента и приносила бизнес-результат.

Недавно Алексей Григорьев, автор Data Engineering Zoomcamp, опубликовал один из самых подробных разборов этой профессии. Вместо карьерных советов он проанализировал 113 вакансий AI Forward-Deployed Engineer и показал, какие навыки действительно требуются компаниям и чем эти инженеры занимаются каждый день.

Рекомендую к прочтению:

https://alexeyondata.substack.com/p/what-ai-forward-deployed-engineers

Если вы работаете с Data Engineering, AI Platform, LLM-инфраструктурой или строите внутренние платформы для разработчиков, есть большая вероятность, что многие из этих задач уже знакомы.
Возможно, вы уже выполняете часть обязанностей FDE, просто эта роль появилась на рынке относительно недавно.

@tldr_data
Pipelines you own. Author locally, deploy to your servers.

Duckle — это open-source ETL-платформа для команд, которые хотят запускать свои пайплайны на собственной инфраструктуре.

Разрабатывать пайплайны можно локально на ноутбуке — с помощью визуального canvas, Python или SQL, — а затем отправить тот же файл на сервер. Команда duckle-runner serve позволяет запускать его без GUI по расписанию: в Docker или на собственном сервере. При этом доступны веб-консоль, управление ролями и журнал аудита.

Каждый пайплайн хранится в Git как один файл, поэтому он не зависит от конкретного разработчика, который его создал.

Duckle компилирует пайплайны в SQL и выполняет их на DuckDB, используя все доступные процессорные ядра. Поэтому чем мощнее сервер, тем быстрее работает пайплайн. Например, 96 миллионов строк из PostgreSQL в Parquet были обработаны за 39,9 секунды.

Никакого облака конкретного вендора. Никакой оплаты за количество обработанных строк. Никакого vendor lock-in.

@tldr_data
Spark observability skills

Skills предназначенные для диагностики и оптимизации нагрузок Apache Spark.

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

Кроме того, в директории scripts/ находится read-only REST-клиент для Spark History Server, который собирает данные о выполнении Spark-приложения в единый ограниченный по объёму snapshot для последующего анализа.

@tldr_data
🔥2
Apache Airflow 3.3.1: совместимость с pandas 3 и исправления безопасности

Главное изменение касается передачи DataFrame через XCom. В pandas 3 класс теперь записывается как pandas.DataFrame, а не pandas.core.frame.DataFrame.
Airflow 3.3.1 поддерживает оба варианта, поэтому старые XCom остаются доступными.

Обновлять нужно все компоненты Airflow до появления pandas 3 на workers. Старые версии Airflow не смогут десериализовать созданные ими DataFrame XCom. Также стоит проверить DAG, которые зависят от конкретных dtype: строки теперь могут возвращаться как str вместо object, а пропущенные значения — как nan вместо None.

Исправлена миграция с Airflow 2.x при использовании custom Dag bundles. Раньше legacy DAG автоматически получали bundle_name='dags-folder', из-за чего запуск завершался ошибкой. Теперь Airflow определяет bundle по пути к файлу. Принудительно обновить данные можно через airflow dags reserialize.

В релиз также вошли исправления безопасности: маскирование team-scoped sensitive config, защита от получения секрета другой команды, очистка secrets в audit logs и Rendered Templates.

Из операционных исправлений: устранены зависания deferrable tasks, CrashLoopBackOff Triggerer при json_logs, блокировки базы из-за медленных asset listeners и несколько проблем с retries, scheduler и Dag bundles.

Источник: [Apache Airflow 3.3.1 Release Notes]

@tldr_data
Apache DataFusion Comet 1.0.0 Release

Comet ускоряет Spark-запросы, преобразуя физические планы Spark в планы DataFusion. Существующие приложения переписывать не нужно, а сам Spark и его экосистема остаются на месте.

В версии 1.0 появилась поддержка Spark 4 и ANSI mode, расширено покрытие операторов: joins, window functions, generators и native shuffle. Если выражение ещё не реализовано на Rust, codegen dispatch позволяет выполнить только его через Spark, не возвращая весь участок плана обратно в JVM.

Для проверки совместимости Comet прогоняет более 24 000 тестов из собственного набора Spark, а также использует end-to-end и fuzz-тесты. С версии 1.0 проект следует semantic versioning.

Источник: ♾️Apache DataFusion Comet 1.0.0♾️

@tldr_data
Please open Telegram to view this post
VIEW IN TELEGRAM
А вы знали, что первая версия Apache Airflow называлась Flux?

И её UI выглядел вот так.

Уже тогда была заложена главная идея Airflow: описывать data pipelines на Python как DAG’и, запускать их по расписанию и мониторить через UI.

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

@tldr_data
Apache Airflow 3.3.0: Stateful Tasks and Multi-Language Support

В Airflow 3.3 появился AIP-108 — Language Task SDK. Теперь отдельные tasks можно реализовывать на Java или Go, при этом сам DAG и scheduling остаются в Python.

В DAG задача объявляется как stub:

@task.stub(queue="golang")


Дальше Airflow через Coordinator передает выполнение нужному runtime: JavaCoordinator для JVM или ExecutableCoordinator для Go.

При этом задача остается частью Airflow: доступны XCom, Variables, Connections, retries и стандартный logging.

Это особенно интересно для команд, где orchestration построен на Airflow, а часть production-кода уже написана на Java или Go. Теперь такую логику не обязательно переписывать на Python или выносить за пределы task model Airflow.

Пока Language Task SDK — experimental feature, поэтому API и protocol еще могут меняться.

Документация

@tldr_data
👍31🔥1
chdb-go

В chdb-go стало проще встраивать ClickHouse прямо в Go-приложение.
Теперь достаточно добавить
blank import:
import _ "github.com/chdb-io/chdb-go/lib/embedded"


Он подтягивает подходящий prebuilt chDB engine для Linux/macOS и amd64/arm64.

При первом запуске движок распаковывается в локальный cache, после чего переиспользуется.
Отдельно устанавливать libchdb больше не нужно.

chDB — это in-process OLAP engine на базе ClickHouse: без отдельного сервера, но с ClickHouse SQL и возможностью напрямую работать с Parquet, CSV, JSON, S3, Iceberg и другими источниками.

Для Go это особенно интересно в контексте CLI, self-contained сервисов и небольших контейнеров, где отдельная native dependency только усложняет deployment.

@tldr_data
Analyst Gym

Analyst Gym — ежедневная тренировка аналитического мышления

AI уже отлично умеет выполнять техническую часть работы аналитика: писать SQL, трансформировать данные, считать метрики. Но интерпретировать результаты, задавать правильные вопросы и принимать решения всё ещё приходится человеку.

На этом и построен Analyst Gym.

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

Здесь не проверяют знание SQL, синтаксиса или инструментов обработки данных. Вместо этого нужно принять решение, указать, насколько вы в нём уверены, а затем посмотреть подробный разбор своей логики.

Хороший формат для ежедневной тренировки аналитического мышления в мире, где execution всё чаще можно делегировать AI.

@tldr_data
Forwarded from AI Dev Tools Zoomcamp
AI Dev Tools Zoomcamp 2026 launches tomorrow.

The course teaches you how to:

- Choose the right AI tools
- Give them the right context
- Extend them with the right capabilities
- Ship safely with review, audit, security, and DevOps controls

The cohort starts tomorrow. Register now to join from the beginning and stay on track with homework, peer review, and the final project.

Register here: https://courses.datatalks.club/register/ai-dev-tools/
Join the launch: https://luma.com/tsiusx8s
Gridex — database IDE для AI-агентов

Gridex — open-source database IDE для macOS, Windows и Linux. Поддерживает PostgreSQL, MySQL, SQLite, Redis, MongoDB, SQL Server и ClickHouse.

Есть встроенный MCP server и единый MCP layer для всех подключений.

Он включает:
→ permissions
→ SQL sanitization
→ row count estimation
→ audit logs

То есть AI-агент работает с базами через контролируемый слой, а не получает прямой доступ.

@tldr_data
🔥1
Free Airflow AI Crash Course with Marc Lamberti

В прошлом году виртуальная конференция Astronomer собрала более 8 000 инженеров по данным.

В этом году Orchestrate Everything начнётся с бесплатного интенсивного курса Марка Ламберти о том, как оркестрировать AI с помощью Airflow. За участие вы также получите бесплатный код на сертификационный экзамен стоимостью $150.

Затем вы увидите, как на самом деле выглядит оркестрация AI в production: своими кейсами поделятся инженеры из Lyft, Ramp и Wix.

Участие бесплатное. Подходит для data engineers любого уровня.

@tldr_data
dbt Doctor — это open-source инструмент статического анализа, который сканирует dbt-проекты и выявляет отсутствие документации и тестов, расхождения в схемах, устаревшие модели, чрезмерную сложность DAG и пробелы в управлении данными.

Он может запускаться локально, через coding-агентов или в CI, чтобы оценивать состояние проекта и блокировать изменения, которые приводят к проблемам с качеством.

@tldr_data
👍1
Make analytics context usable by agents

ktx — open-source context layer for data agents, который решает проблему, которой не хватает обычного доступа агента к warehouse.

Агенту недостаточно знать, какие есть таблицы.
Ему нужно понимать, какой metric является canonical, какие JOIN безопасны, что именно бизнес подразумевает под active customer и откуда вообще взялось определение.

ktx собирает этот контекст из warehouse metadata, dbt/BI, query history и документации, а затем сохраняет его в обычных YAML и Markdown-файлах, которые можно ревьюить и коммитить в Git.

Дальше агент через CLI или MCP может искать нужный контекст, использовать approved metrics и joins, компилировать semantic queries и выполнять read-only SQL.

По сути, ktx пытается стать context layer между data stack и AI-агентом — чтобы агент не каждый раз заново угадывал, как устроены данные и бизнес-логика.

@tldr_data
HydraDB - fast graph database on object storage

HydraDB превращает графовую базу данных в S3-бакет.

Хранилище и вычисления полностью разделены: сам граф, его журнал предварительной записи (WAL) и индексы для обхода графа постоянно хранятся только в объектном хранилище.

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

Активный узел-записыватель для каждой ячейки выбирается с помощью lease на основе операции compare-and-swap в бакете.

Подключение осуществляется через стандартный протокол Neo4j Bolt.

@tldr_data