"Full + Incremental Load Начала читать книгу ""Data Engineering Design Patterns"" (2025), 375 страниц. Несколько раз видела хорошие отзывы, по содержанию очень прикольная. Это про паттерны загрузки данных, как лучше работать с ошибками в данных, как организовать правильный перезапуск пайплайна и еще много всего В книге дали ссылочку на гитхаб с готовым кодом❤ Эта серия постов будет неким конспектом с добавлением моих мыслей Итак, начнем Data Ingestion/Загрузка данных 🌷 Full Load Опасности и решения: 1. Следить за ростом датасета. В идеале не слишком много строк, растет медленно 2. drop-insert - опасная штука, пользователи могут читать в момент записи. Использовать вьюшку: 🤩пользователи ходят в вьюшку 🤩вьюшка смотрит на table1 🤩данные пишутся в table2 🤩table2 подменяется на table1 У нас реально были такие проблемы: ```File does not exist: hdfs://warehouse/hive/my_db.db/my_table/2 6-01_29_data.0.parq It is possible the underlying files have been updated. You can explicitly invalidate the cache in Spark by running 'REFRESH TABLE tableName' command in SQL or by recreating the Dataset/DataFrame involved.``` Что мы сделали: 1. Добавили зависимости по событию от источников 2. shadow calc: создается копия витрины, все манипуляции происходят с копией в стейджинге, в конце делается rename 🪴 Incremental Load 1⃣Pattern: Incremental Loader 1й способ. Иметь дату загрузки, чтобы определить инкремент. Опасно использовать дату события, потому что они могут долетать позже. Например, временно отключился интернет, события долетели с лагом, а мы уже обработали этот период. Последняя дата загрузки должна где-то сохраняться 2й способ. Делать партиции по времени. Например, даг работает каждый час и всегда берет данные за предыдущий час Опасности и решения: 1. Для удаленных строк применять soft delete (просто маркируем удаленной) вместо hard delete, иначе они просто останутся у нас в системе 2. Использовать Insert-only/append-only - в табличку только добавляем данные Реализации: 1. Для даты загрузки - обязательно добавлять фильтр ```f'ingestion_time BETWEEN ""{date_from}"" AND ""{date_to}""'``` 2. Для партиций по времени - добавить сенсор, который смотрит на появление следующей партиции. Если партиция появилась, значит, текущий период закончился и его можно обработать. Плюс обязательно передать дату в Airflow через {{ ds }} Я была удивлена, прочитав этот механизм. Все делаем по книжке, получается😎 2⃣Pattern: Change Data Capture Используется, когда события нужно получать быстро (~30s). CDC - это стриминг логов журналов (WAL) баз данных Был приведен пример с Delta Lake, но для Iceberg я тоже нашла примеры На этом пока все, это была даже не половина всей главы🥺 #depatterns"
"Full + Incremental Load Начала читать книгу ""Data Engineering Design…
Из этого канала
- #490Сопутки загрузок 🍔 Data Compaction Pattern: Compactor Стриминг пишет очень…
Сопутки загрузок 🍔 Data Compaction Pattern: Compactor Стриминг пишет очень много мелких файлов, и эта проблема актуальна не только для hdfs, но и для s3.
- #492Козырной вопрос А у вас есть прикольный вопрос, который вы спрашиваете у…
Козырной вопрос А у вас есть прикольный вопрос, который вы спрашиваете у руководителя на собесе? Команда, стек, задачи, скрам/не скрам - это все понятно.
- #493"Управляем ошибками. Часть 1 Unprocessable Records К нам пришли строки,…
"Управляем ошибками. Часть 1 Unprocessable Records К нам пришли строки, которые падают при обработке. Есть 2 пути: 1. Сразу падать.
- #486"Lakehouse Podcast Наконец посмотрела подкаст про лейкхаус с моим прошлым…
"Lakehouse Podcast Наконец посмотрела подкаст про лейкхаус с моим прошлым техлидом.
- #485Что с нами станет? На днях зашла в линкедин, и первый пост в ленте был от…
Что с нами станет? На днях зашла в линкедин, и первый пост в ленте был от европейского стартапа.