在做了一些研究之后,我发现由于Redshift不支持merge / upsert,一些人正在使用登台表来更新/插入记录 . 由于Redshift也不支持程序(触发器等),是否有人建议他们如何自动化这个过程(lambda,数据管道等)?
我认为没有一个正确的答案 . 从广义上讲,我知道有两种基本方法 .
ETL中的一个显式步骤's performed as you'重新加载数据(使用this pattern)
定期处理upsert的批处理cronjob
我相信,选项1可能是最好的方法 . AWS Data Pipeline通过将 insertMode 字段设置为 OVERWRITE_EXISTING 来支持RedshiftCopyActivity .
insertMode
OVERWRITE_EXISTING
在我的工作中,我们通过在同一个sql事务中运行load命令到staging表和upsert,在我们的数据管道中手动完成了这个操作 .
另一种方法(选项2)是让您的ETL只是将新数据附加到临时表(您可以使用AWS Firehose进行此类操作),然后将其与计划的cronjob一起使用以按计划更新目标表 . 这样做的好处是你的ETL更简单,但是cronjob成为另一个失败点 .
1 回答
我认为没有一个正确的答案 . 从广义上讲,我知道有两种基本方法 .
ETL中的一个显式步骤's performed as you'重新加载数据(使用this pattern)
定期处理upsert的批处理cronjob
我相信,选项1可能是最好的方法 . AWS Data Pipeline通过将
insertMode
字段设置为OVERWRITE_EXISTING
来支持RedshiftCopyActivity .在我的工作中,我们通过在同一个sql事务中运行load命令到staging表和upsert,在我们的数据管道中手动完成了这个操作 .
另一种方法(选项2)是让您的ETL只是将新数据附加到临时表(您可以使用AWS Firehose进行此类操作),然后将其与计划的cronjob一起使用以按计划更新目标表 . 这样做的好处是你的ETL更简单,但是cronjob成为另一个失败点 .