TGViewer
дата инженеретта дата инженеретта @data_engineerette · 3.43K subscribers
Post #488 3.84K
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
  • 👍 31
  • ❤ 8
  • 🔥 3
More from @data_engineerette
  1. Sep 25, 2026Как прошла SmartData 2026? Я вот перечитываю свои впечатления от прошлого года и понимаю,…
  2. Sep 24, 2026Исследование data-people Тут ребята из DevCrowd запустили ежегодное исследование специалис…
  3. Sep 22, 20265 октября начнется 19-й поток программы Data Engineer от Newprolab Программа для junior- и…
  4. Sep 15, 2026Каким должен быть хороший DE? Меня однажды спросили на собесе: 🤩Какие 3 качества важны дл…
  5. Sep 12, 2026Mermaid-диаграммы Наконец-то дошли руки поковыряться в mermaid-диаграммах, это что за имба…
  6. Sep 2, 2026Iceberg — это внезапный бум или планомерная подготовка? Заметили, как с определенного моме…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →