TGViewer
Я – Дата Инженер | Евгений Виндюков Я – Дата Инженер | Евгений Виндюков @halltape_data · 5.92K subscribers
Post #760 4.32K
Титаник не умеет читать Iceberg

Ничего не понятно, но очень интересно.


Что имеем?
Есть PowerBI. Да, это программа для дашбордов. Там можно смотреть метрики, строить графики. PowerBI подключается к вашей БД —> дальше к табличке —> SQL запрос —> график! И также есть S3 (тут храним данные).

Данные у нас грузятся каждый день за 7 дней назад (Каждый день грузим неделю). Почему? Потому, что они могут долетать обновленные + иногда нужно сделать ручной запуск РЕТРО (прогрузить конкретный диапазон дат из прошлого)

Что требуется?
PowerBI должен обращаться к этим данным и строить по ним дашборд.

Как будем решать?
Во-первых мы БИГДАТА, значит мы наверняка данные партицируем (разбиваем по папкам по бизнес дате). Да, это круто. Потом можно удалять конкретные партиции-папки в момент, когда грузим 7 дней назад. Нам же надо обновлять данные за прошлый период. Но PowerBI по какой-то причине не может читать в S3 партиции. Ну вот не получается и все! Только если все лежит в одной ПАПКЕ (Душнилы: это не папки, а объекты..так нельзя говорить...СТАЛИНА НА ВАС НЕТ)

Ну ок, тогда не будем партицировать. Складываем все в одну папку. Но как мы будем обновлять наши данные, мы же получается просто APPEND в одно место и оно начинает дублироваться!

Давайте применим Delta таблицы! Это типа штука, которая позволяется удалять данные в S3. Типа пишешь DELETE и оно прям удаляет. Но у меня не получается, потому что версия Spark Scala и Delta не подходят друг к другу. Короче спарк я обновить сам не могу, а версию Delta мне тоже подходящую не найти.

Давайте применим Iceberg! У меня получилось сделать DELETE! Все четко удалилось из .parquet. Напомню, что из файла формата parquet как бы удалить нельзя ничего. Его можно либо дропнуть полностью и перезаписать, либо дозаписать рядом. А Iceberg — это типа надстройка, которая позволяет DELETE, UPDATE, MERGE + еще можно ходить по разным версиям таблиц, типа как в прошлое!

Вроде все круто! Но теперь PowerBI не умеет читать Iceberg. Короче у нас нет этого коннектора.

Че теперь делать?

⚠️ Делаем 3 таблицы:
source_table - это инкремент (например 7 дней или ретро. Каждый раз overwrite)
tmp_table - это временная таблица (в нее будут стекать финальные данные)
target_table - это таблица витрина, с которой читает PowerBI

Прилетел инкремент в source_table, дальше узнаем в нем min и max бизнес дат. Потому читаем target_table и фильтруем из него все данные, кроме найденных min и max. Дальше делаем source_table.union(filtered_target_table) и записываем в tmp_table.

Последний шаг. Удаляем target_table и переименовываем tmp_table в target_table.

В чем плохо?
Каждый раз мы будем тянуть все больше и больше данных, перетаскивая их из одной таблицы в другую + сама табличка растет и не партицированая. Но пока решение такое и в целом рабочее.

Че думаете?
  • ❤ 11
  • 🔥 9
  • 👍 5
More from @halltape_data
  1. Oct 1, 202610 вопросов по SQL для дата инженера https://www.threads.com/share/_vojZtIpk/ Этот пост на…
  2. Sep 27, 2026Собес на 320к на руки на Дата Инженера! ▶️ https://youtu.be/lZKqJ978e1I Выложил собес. Все…
  3. Sep 26, 2026Накрутчики! Написал в Threads пост о том, как расти в ЗП в ДЕ. В комменты пришел человек,…
  4. Sep 25, 2026Это последний поток BootCamp. ВСЁ. После Нового года мы будем поднимать цену. Поэтому нояб…
  5. Sep 23, 2026Если тебе до 25 и ты уже в IT В промежутке между 17 и 23 годами я учился на инженера в уни…
  6. Sep 20, 2026Собес на Дата Инженера + Лайвкодинг! (Middle) ▶️ https://youtu.be/fypWIMVBKxg На самом дел…
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 →