Реализация SCD2 в Redshift с использованием AWS GLue Pyspark

У меня есть требование перенести данные с S3 на Redshift. В настоящее время использую клей для работы. Текущее требование:

  1. Сравните первичный ключ записи в таблице красных смещений с входящим файлом, если совпадение найдено, закройте дату окончания старой записи (обновите ее с высокой даты до текущей даты) и вставьте новую.
  2. Если совпадение первичного ключа не найдено, вставьте новую запись. Реализация: я реализовал это в Glue с помощью pyspark, выполнив следующие шаги: Создал фреймы данных, которые будут охватывать три сценария:
  3. Если совпадение найдено, обновите дату окончания существующей записи до текущей даты.
  4. Вставьте новую запись в таблицу Redshift, где найдено совпадение PPK
  5. Вставьте новую запись в таблицу Redshift, где совпадение PPK не найдено

Наконец, объедините все эти три фрейма данных в один и запишите это в таблицу красных смещений.

При таком подходе будут присутствовать как старая запись (которая имеет высокое значение даты), так и новая запись (которая была обновлена ​​с использованием текущего значения даты).

Есть ли способ удалить старую запись с высоким значением даты с помощью pyspark? Пожалуйста, порекомендуйте.


person Hary S    schedule 13.07.2020    source источник


Ответы (1)


Мы успешно реализовали желаемую функциональность, в которой мы использовали AWS RDS [PostGreSql] в качестве службы базы данных и GLUE в качестве службы ETL. Мое предложение было бы вместо вычисления дельты в искровых кадрах данных, было бы гораздо более простым и элегантным решением, если бы вы создавали хранимые процедуры и вызывали их в pyspark Glue Shell. [например: сегмент S3 - ›Промежуточная таблица -› Целевая таблица]

Кроме того, если ваша логика выполнения выполняется менее чем за 10 минут, я предлагаю вам использовать оболочку python и использовать внешние библиотеки, такие как psycopyg2 / sqlalchemy для операций с БД.

person dashsidd1    schedule 07.06.2021