0
copy Agent1
from 's3://my-bucket/Reports/Historical Metrics Report (1).csv' 
iam_role 'arn:aws:iam::my-role:role/RedshiftRoleForS3'
csv
null as '\000'
IGNOREHEADER 1;

我正在使用这个(上图)将数据从 s3 拉到 redshift 表。它工作正常但是有一个问题,当数据在第一次插入表时被提取/复制,但是当数据在 s3 存储桶文件中更新并且我们运行相同的查询时,它所做的是添加全新的数据行而不是覆盖已经创建的行。

如何停止重复?我只想在 s3 文件上更新数据时,在运行复制命令后,我的数据(行)被覆盖并用新数据替换行数据。

这是屏幕截图 - 正在添加更新数据的行

4

2 回答 2

1

Redshift 不强制执行唯一性。请参阅 - https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html

要更新表,您需要将数据复制到“暂存”表并执行 UPSERT 过程。请参阅 - https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-upsert.html

于 2022-01-25T06:58:27.580 回答
0

如果您的目标是在通过 加载数据之前清空表COPY,那么您可以使用以下TRUNCATE命令清空表:

TRUNCATE tablename;

请注意,这不能在提交中回滚。

使用比立即删除与表关联的所有存储空间TRUNCATE要高效得多。DELETE FROM tablename

于 2022-01-25T12:02:15.270 回答