python-3.x - 每天将 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
),因为我已经有了其他行。
进行这种增量加载的最佳方式应该是什么?
解决方案
COPY 命令将始终加载整个表。但是,您可以使用 Redshift Spectrum 创建一个外部表来访问文件,而无需将它们加载到 Redshift 中。然后,您可以构造一个执行 INSERT 的查询,其中 ID 大于 Redshift 表中使用的最后一个 ID。
也许我应该解释得更简单一些......
existing_table
Redshift 中的表已经有多达id = 2
CREATE EXTERNAL TABLE in_data
指向 S3 中包含数据的文件- 使用
INSERT INTO existing_table SELECT * FROM in_data WHERE id > (SELECT MAX(id) FROM existing_table
理论上,这应该只将新行加载到表中。
推荐阅读
- java - 一串二进制数从一串十进制数中提取
- c++ - 映射进程和映射文件(非平台)具有不同的团队 ID
- javascript - 组件错过了第一个更新周期
- python - 我需要使用检查元素从网站获取特定数据
- typescript - 打字稿条件参数类型不起作用
- kubernetes - 重新启动在主图表的子图表中定义的部署
- grpc-go - protoc-gen-go 和 protoc-gen-go-grpc 的区别
- xcode - 更新到 Xcode 12.2 后无法使用 BMI2 编译项目
- julia - Julia JuMP 中的绑定 2 范数
- android - Android ML Kit Translator.getClient() 未解析参考