76 подписчиков
🔍 ETL с помощью SQL: Инкрементальная загрузка с обновлением данных🔍
✨ В предыдущем посте мы разобрали инкрементальную загрузку с сохранением всей историчности данных. Давайте разберем загрузку инкремента, чтобы в target таблицы оставались только актуальные значения данных, т.е. исторические значение перезаписывались актуальными.
Ключевые этапах этого процесса будут следующие:
1️⃣ Определение инкремента данных
Пример выделения инкремента из таблицы source по условию, что поле update_date имеет сегодняшнюю дату
SELECT *
FROM source s
WHERE update_date = CURRENT_DATE()
Лучше нам результат запроса сохранить в промежуточную временную таблицу.
CREATE TEMPORARY TABLE tmp_increment AS
SELECT *
FROM source s
WHERE update_date = CURRENT_DATE()
2️⃣ Вставка инкремента в target таблицу с актуализацией значений данных (перезапись)
Выполняем в 2 шага:
1) Удаляем данные из target, которые есть во временной таблице по уникальному идентификатору записи (например, id). Это удалит нам записи, которые нужно обновить
DELETE FROM target
WHERE id IN (SELECT id
FROM tmp_increment);
2) Вставляем инкремент с актуальными записями из временной таблицы tmp_increment в target
INSERT INTO target
SELECT *
FROM tmp_increment;
Таким образом в target таблицу будут добавляться новые записи и перезаписываться обновленные актуальные записи из source
Оставляйте реакции, если пост был полезен 😉
1 минута
3 июля 2024