首页 > 解决方案 > 每天将 Amazon S3 数据增量复制到 Amazon Redshift

问题描述

我有一个 RDS 数据库,它每天拍摄快照并保存在 S3 存储桶中。我每天将 RDS 快照数据从 S3 复制到 Amazon Redshift 数据库。我可以copy用来复制表,但不是复制整个表,我只想复制自上次拍摄快照以来添加的行(增量复制)。

例如,在 RDS 中,有一个表名“user”,它在 25-05-2021 看起来像这样

id | username
1  | john
2  | cathy

当我在 2021 年 5 月 26 日第一次运行数据加载器时,它会将这两行复制到同名的 Redshift 表中。

现在在 26-05-2021,RDS 中的表格如下所示:

id | username
1  | john
2  | cathy
3  | ola
4  | mike

当我将在 27-05-2021 运行数据加载器时,我不想复制所有三行,而是只想复制/获取新添加的行(id = 3 and id = 4),因为我已经有了其他行。

进行这种增量加载的最佳方式应该是什么?

标签: python-3.xamazon-web-servicesamazon-s3pysparkamazon-redshift

解决方案


COPY 命令将始终加载整个表。但是,您可以使用 Redshift Spectrum 创建一个外部表来访问文件,而无需将它们加载到 Redshift 中。然后,您可以构造一个执行 INSERT 的查询,其中 ID 大于 Redshift 表中使用的最后一个 ID。

也许我应该解释得更简单一些......

  • existing_tableRedshift 中的表已经有多达id = 2
  • CREATE EXTERNAL TABLE in_data指向 S3 中包含数据的文件
  • 使用INSERT INTO existing_table SELECT * FROM in_data WHERE id > (SELECT MAX(id) FROM existing_table

理论上,这应该只将新行加载到表中。


推荐阅读