Найти в Дзене

🔍 ETL с помощью SQL: Инкрементальная загрузка 🔍


✨ В отличие от полной перезагрузки (Full Reload), описанного в этом посте, инкрементальная загрузка перемещает только новые или обновленные данные. Это экономит ресурсы и время, особенно при работе с большими объемами данных.

Давайте поговорим о ключевых этапах этого процесса:

1️⃣ Определение инкремента данных
Инкремент - набор данных, которые нужно загрузить. Он может определяться как набор новых строк в источнике, так и набор строк с обновленными значениями. Для определения инкремента обычно используются поля со смыслом как "дата обновления записи", "дата создания записи" и др. с похожим смыслом, по которым можно сделать выборку нужного инкремента.
Пример выделения инкремента из таблицы source по условию, что поле update_date имеет сегодняшнюю дату
SELECT *
FROM source s
WHERE update_date = CURRENT_DATE()

2️⃣ Вставка инкремента в target таблицу
Пример запроса может выглядеть так:
INSERT INTO target
SELECT *
FROM source s
WHERE update_date = CURRENT_DATE();

Здесь есть нюанс, что в таблицу target попадут все записи инкремента и останутся те, которые были уже в таблице например под одним и тем же id. Таким образом может собираться накопительная историческая таблица, например с продажами. К примеру в таблице target уже была запись по продаже с id = 5 и status = 'buy'. А в новом инкременте из source прилетит обновленная строка с id = 5 и status = 'cancelled'. Таким образом в target будет зафиксирована вся история обновления строк.

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

Оставляйте реакции, если пост был полезен 😉
1 минута
180 читали