AWS DataPipeline:RedshiftCopyActivity OVERWRITE_EXISTING 不强制执行主键

AWS DataPipeline: RedshiftCopyActivity OVERWRITE_EXISTING not enforcing primary key

我有一个 DataPipeline,它通过 S3 将数据从本地数据库导出到 Redshift(非常类似于 Incremental copy of RDS MySQL table to Redshift 模板)。我已经在管道定义中定义了主键并将 insertMode 设置为 "OVERWRITE_EXISTING",但是,我注意到某些行最终被复制了。在什么情况下会发生,我该如何预防?

在 Redshift 中,它不会强制主键来限制重复值。 我们确实使用 temp table 来加载增量数据,然后我们通过检查记录是否存在来更新插入(使用合并)到目标 table。

这样就可以实现了。

谢谢!!

几年后才发现这个post,添加一个答案以防对其他人有帮助:

除了主键之外,Redshift 还使用 distkeys 来确定要覆盖的行。因此,在我的例子中,distkey 列中的更新值迫使 Redshift 创建重复行,尽管主键保持不变。