Проведя небольшое исследование, я вижу, что, поскольку Redshift не поддерживает слияние / обновление, некоторые люди используют промежуточные таблицы для обновления / вставки записей. Поскольку Redshift также не поддерживает процедуры (триггеры и т. Д.), Есть ли у кого-нибудь предложения по автоматизации этого процесса (лямбда, конвейер данных и т. Д.)?
AWS Glue: Redshift Upsert
Ответы (1)
Я не думаю, что на это есть один правильный ответ. Я знаю два основных подхода к этому.
- Явный шаг в ETL, выполняемый при загрузке данных (с использованием этот шаблон)
- Пакетное задание cron, которое периодически обрабатывает апсерты
Я считаю, что вариант 1 - это, наверное, лучший подход. AWS Data Pipeline поддерживает это с помощью RedshiftCopyActivity с помощью поля insertMode
, установленного на OVERWRITE_EXISTING
.
На моей работе мы сделали это вручную в нашем конвейере данных, выполнив команду load для промежуточной таблицы и upsert в рамках той же транзакции sql.
Другой подход (вариант 2) заключается в том, что ваш ETL просто добавляет новые данные в промежуточную таблицу (вы можете использовать AWS Firehose для чего-то вроде этого), которые затем используете с запланированным заданием cron для обновления целевой таблицы по расписанию. Плюс в том, что ваш ETL проще, но cronjob становится еще одной точкой отказа.