仅向红移表添加新的或修改的数据

Posted

技术标签:

【中文标题】仅向红移表添加新的或修改的数据【英文标题】:Adding only new or modified data to a redshift table 【发布时间】:2020-09-27 19:16:38 【问题描述】:

每个月我都会收到一个带有数据的 tsv。我需要一个反映此 tsv 中数据的表。此表中的每一行都有添加日期。 tsv 可能与上个月的 tsv 完全相同,在这种情况下,表中的任何数据都不会更改。数据也可能有上个月的修改行,在这种情况下,我们需要更新该行并将日期列更改为今天的日期。或者最后,我们可能只有新数据,在这种情况下,将这些新数据添加到带有今天日期的表中。想知道最简单的方法是什么。目前已经有 python 使用 COPY 命令将 tsv 文件写入 redshift 但需要帮助以正确的 sql 命令来更新表。

例子:

当前表:

9/1/2020  Mike 3  
9/1/2020  Jake 4

新的 tsv 文件:

10/1/2020  Mike 5  
10/1/2020  Kevin 4

我们添加新的 tsv 数据后的表格:

9/1/2020  Jake 4
10/1/2020  Mike 5  
10/1/2020  Kevin 4

【问题讨论】:

除了 TSV 文件中的内容之外,表中是否还有其他数据?如果没有,为什么不简单地将整个表格替换为 TSV 文件的内容? 你试过了吗:Updating and inserting new data - Amazon Redshift 我想尝试维护添加/修改数据的日期 【参考方案1】:

根据Performing a merge operation by replacing existing rows - Amazon Redshift给出的建议,一个典型的流程是:

将数据加载到临时临时表中 删除需要替换的行 (DELETE FROM target USING stage WHERE target.primarykey = stage.primarykey) 跨 (INSERT INTO target SELECT * FROM stage) 复制数据

您需要稍微修改该过程以在这些新行中插入今天的日期。

【讨论】:

以上是关于仅向红移表添加新的或修改的数据的主要内容,如果未能解决你的问题,请参考以下文章

反正有没有在红移表中只保留一周的数据

提高效率的红移表设计

从红移表中获取上次更新时间戳

Spark Redshift:使用火花读取红移表时出错

我可以直接查询以镶木地板格式存储在 s3 中的数据的红移表吗

如何从 pcollection 将多个值写入红移表