1

我需要将数据从 S3 移动到 Redshift。目前我正在使用 Glue 进行工作。当前要求:

  1. 将 redshift 表中记录的主键与传入文件进行比较,如果找到匹配项,则关闭旧记录的结束日期(将其从高日期更新为当前日期)并插入新记录。
  2. 如果未找到主键匹配,则插入新记录。实现:我使用 pyspark 在 Glue 中实现了它,步骤如下: 创建的数据框将涵盖三个场景:
  3. 如果找到匹配项,则将现有记录的结束日期更新为当前日期。
  4. 将新记录插入找到 PPK 匹配的 Redshift 表
  5. 将新记录插入未找到 PPK 匹配的 Redshift 表

最后,将所有这三个数据帧合并为一个并将其写入红移表。

使用这种方法,旧记录(具有高日期值)和新记录(使用当前日期值更新)都将出现。

有没有办法使用pyspark删除具有高日期值的旧记录?请指教。

4

1 回答 1

0

我们已经成功实现了所需的功能,其中我们使用 AWS RDS [PostGreSql] 作为数据库服务和 GLUE 作为 ETL 服务。我的建议不是计算 sparkdataframes 中的增量,而是创建存储过程并在 pyspark Glue Shell 中调用它们会更容易和优雅的解决方案。[例如:S3 存储桶 -> 暂存表 -> 目标表]

此外,如果您的执行逻辑在不到 10 分钟内执行,我建议您使用 python shell 并使用外部库(如 psycopyg2/sqlalchemy)进行 DB 操作。

于 2021-06-07T04:57:56.057 回答