AWS Glue: Redshift Upsert

Проведя небольшое исследование, я вижу, что, поскольку Redshift не поддерживает слияние / обновление, некоторые люди используют промежуточные таблицы для обновления / вставки записей. Поскольку Redshift также не поддерживает процедуры (триггеры и т. Д.), Есть ли у кого-нибудь предложения по автоматизации этого процесса (лямбда, конвейер данных и т. Д.)?


person maynard1978    schedule 27.02.2018    source источник


Ответы (1)


Я не думаю, что на это есть один правильный ответ. Я знаю два основных подхода к этому.

  1. Явный шаг в ETL, выполняемый при загрузке данных (с использованием этот шаблон)
  2. Пакетное задание cron, которое периодически обрабатывает апсерты

Я считаю, что вариант 1 - это, наверное, лучший подход. AWS Data Pipeline поддерживает это с помощью RedshiftCopyActivity с помощью поля insertMode, установленного на OVERWRITE_EXISTING.

На моей работе мы сделали это вручную в нашем конвейере данных, выполнив команду load для промежуточной таблицы и upsert в рамках той же транзакции sql.

Другой подход (вариант 2) заключается в том, что ваш ETL просто добавляет новые данные в промежуточную таблицу (вы можете использовать AWS Firehose для чего-то вроде этого), которые затем используете с запланированным заданием cron для обновления целевой таблицы по расписанию. Плюс в том, что ваш ETL проще, но cronjob становится еще одной точкой отказа.

person michael_erasmus    schedule 27.02.2018
comment
Спасибо за отзыв, я ценю это. В настоящее время у меня есть лямбда, обрабатывающая обновление Redshift, которое отвечает на данные, загруженные в корзину S3. Кажется, сейчас он работает нормально, так как в день происходит всего несколько событий. Я обязательно посмотрю и на Data Pipeline. Ваше здоровье! - person maynard1978; 01.03.2018