Вот с
такой задачкой столкнулся - опубликовал на Stackoverflow.
Идея проста. Spark умеет делать stream. Но это на самом деле больше microbatch, что вполне подходит.
1. Каждый раз, когда новый JSON файл появляется в Azure Blob Storage он его автоматически загружает в dataframe командой
spark.read.
2.Дальше мы можешь его минимально трансформировать.
3. И сохранить уже в наше озеро данных, и в нынешних условиях в формате Delta. Но можно и просто классический parquet.
Я сейчас не буду уходить в подробности, как это работает, но на курса datalearn буду, но не скоро🤪
То есть, мы закидывал все новые данные в одну таблицу в потоке, где у нас данные делают APPEND. Дальше, есть несколько вариантов, как прокидывать эти данные в STAGING таблицы, но при условии, что это тоже APPEND.
(APPEND - значит, добавить строки, другая операция OVERWRITE - полностью перезаписать все.)
Интересный момент начинается, когда мне нужно обновить таблицу фактов. Я уже не смогу сделать простой APPEND, мне нужны исторические данные и новые данные, чтобы посчитать, например WINDOW FUNCTIONS и потом обновить изменения.
В классическом DW, мы я буду брать исторические данные, например за 7 дней, и уже писать логику для MERGE (где решать UPDATE или INSERT). В delta lake есть MERGE тоже, но я боюсь он будет умирать на большом объеме и я не понял как сделать переход от Stream к Batch. Конечно, я буду пробовать разные подходы и смотреть как лучше, но вдруг уже кто-то делал и знает как лучше совершать этот переход?