Amazon s3 红移卸载操作导致冗余数据

Amazon s3 红移卸载操作导致冗余数据,amazon-s3,amazon-redshift,amazon-redshift-spectrum,Amazon S3,Amazon Redshift,Amazon Redshift Spectrum,我们使用UNLOAD命令在基于s3的外部表上运行一些转换,并以拼花格式将数据发布到不同的s3存储桶中 我在卸载操作中使用ALLOWOVERWRITE选项来替换已经存在的文件。这在大多数情况下都可以正常工作,但有时会为相同的数据插入重复的文件,这会导致外部表显示重复的数字 例如,如果分区中的拼花是0000_part_00.parquet,它包含完整的数据。在下一次运行中,卸载将覆盖此文件,但会插入新文件0000_part_01.parquet,使总输出翻倍 如果我只是清理整个分区并再次运行,那么这

我们使用UNLOAD命令在基于s3的外部表上运行一些转换,并以拼花格式将数据发布到不同的s3存储桶中

我在卸载操作中使用ALLOWOVERWRITE选项来替换已经存在的文件。这在大多数情况下都可以正常工作,但有时会为相同的数据插入重复的文件,这会导致外部表显示重复的数字

例如,如果分区中的拼花是0000_part_00.parquet,它包含完整的数据。在下一次运行中,卸载将覆盖此文件,但会插入新文件0000_part_01.parquet,使总输出翻倍

如果我只是清理整个分区并再次运行,那么这种情况就不会再次发生。这种不一致性使得我们的系统不可靠

unload (<simple select statement>)
to 's3://<s3 bucket>/<prefix>/'
iam_role '<iam-role>' allowoverwrite
PARQUET
PARTITION BY (partition_col1, partition_col2);
unload()
至“s3://”
iam_角色“”允许重写
拼花地板
分区依据(分区1,分区2);

谢谢。

根据我的经验,ALLOWOVERWRITE参数仅基于生成的文件名:因此,仅当两个文件具有相同的名称时,才会覆盖结果

此参数适用于大多数情况,但在此领域中,“大多数情况”还不够好。从那以后我就不再使用它了(我很失望)。相反,我所做的是从S3控制台手动删除文件(或者实际上将它们移动到暂存文件夹中),然后卸载数据,而不依赖ALLOWOVERWRITE参数


此答案的注释中也提到了为防止冗余数据,您必须在
卸载
语句中使用Redshift的
CLEANPATH
选项。请注意不同之处(也许AWS可以进一步澄清这一点):

因此,如上所述,
ALLOWOVERWRITE
只覆盖与传入文件名共享相同名称的文件。对于不要求过去数据的状态保持完整的重复卸载操作,则必须使用
CLEANPATH

请注意,不能在同一UNLOAD语句中同时使用
ALLOWOVERWRITE
CLEANPATH

下面是一个例子:

f”“”
卸载(“{your_query}”)
到's3://{destination_prefix}/'
iam_角色{iam_角色}
拼花地板
最大文件大小4 GB
清单冗长
清洁路径
"""

您应该使用
CLEANPATH
而不是
ALLOWOVERWRITE
ALLOWOVERWRITE
By default, UNLOAD fails if it finds files that it would possibly overwrite. If ALLOWOVERWRITE is specified, UNLOAD overwrites existing files, including the manifest file.

CLEANPATH
The CLEANPATH option removes existing files located in the Amazon S3 path specified in the TO clause before unloading files to the specified location.
If you include the PARTITION BY clause, existing files are removed only from the partition folders to receive new files generated by the UNLOAD operation.
You must have the s3:DeleteObject permission on the Amazon S3 bucket. For information, see Policies and Permissions in Amazon S3 in the Amazon Simple Storage Service Console User Guide. Files that you remove by using the `CLEANPATH` option are permanently deleted and can't be recovered.
You can't specify the `CLEANPATH` option if you specify the `ALLOWOVERWRITE` option.