使用AWS GLue Pyspark在红移中实现SCD2

使用AWS GLue Pyspark在红移中实现SCD2,pyspark,apache-spark-sql,amazon-redshift,aws-glue,scd2,Pyspark,Apache Spark Sql,Amazon Redshift,Aws Glue,Scd2,我需要将数据从S3移动到红移。目前我正在使用胶水的工作。 目前的要求: 将红移表中记录的主键与传入文件进行比较,如果找到匹配项,请关闭旧记录的结束日期(将其从high date更新为current date)并插入新记录 如果未找到主键匹配项,则插入新记录。 实施: 我使用pyspark通过以下步骤在Glue中实现了它: 创建的数据帧将涵盖三种场景: 如果找到匹配项,则将现有记录的结束日期更新为当前日期 将新记录插入到找到PPK匹配项的红移表中 将新记录插入到未找到PPK匹配项的红移表中 最后,

我需要将数据从S3移动到红移。目前我正在使用胶水的工作。 目前的要求:

  • 将红移表中记录的主键与传入文件进行比较,如果找到匹配项,请关闭旧记录的结束日期(将其从high date更新为current date)并插入新记录
  • 如果未找到主键匹配项,则插入新记录。 实施: 我使用pyspark通过以下步骤在Glue中实现了它: 创建的数据帧将涵盖三种场景:
  • 如果找到匹配项,则将现有记录的结束日期更新为当前日期
  • 将新记录插入到找到PPK匹配项的红移表中
  • 将新记录插入到未找到PPK匹配项的红移表中
  • 最后,将所有这三个数据帧合并为一个,并将其写入红移表

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


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

    我们已经成功地实现了所需的功能,我们使用AWS RDS[PostGreSql]作为数据库服务,使用GLUE作为ETL服务。我的建议是,如果您创建存储过程并在pyspark-Glue-Shell中调用它们,那么它将比在sparkdataframes中计算增量更简单、更优雅。 [例如:S3 bucket->Staging table->Target table]


    此外,如果您的执行逻辑在不到10分钟的时间内执行,我建议您使用python shell并使用外部库,如psycopyg2/sqlalchemy,用于数据库操作。

    我们已经成功地实现了所需的功能,其中我们使用的是AWS RDS[PostGreSql]作为数据库服务和粘合作为ETL服务。我的建议是,如果您创建存储过程并在pyspark-Glue-Shell中调用它们,那么它将比在sparkdataframes中计算增量更简单、更优雅。 [例如:S3 bucket->Staging table->Target table]

    此外,如果您的执行逻辑在不到10分钟的时间内执行,我建议您使用pythonshell,并使用外部库,例如psycopyg2/sqlalchemy来执行DB操作