Amazon RedShift 中的“复制”命令是不是是原子的?

Posted

技术标签:

【中文标题】Amazon RedShift 中的“复制”命令是不是是原子的?【英文标题】:Is 'copy' command in Amazon RedShift atomic or not?Amazon RedShift 中的“复制”命令是否是原子的? 【发布时间】:2013-08-08 06:34:42 【问题描述】:

对于 Amazon RedShift,通常使用“复制”命令从 S3 加载数据。我想知道命令是否是原子的。例如。是否有可能在某些特殊情况下仅将部分数据文件加载到 RedShift 表中?

【问题讨论】:

【参考方案1】:

带有默认选项的 COPY 命令是原子的。如果文件包含可能导致加载失败的无效行,则 COPY 事务将被回滚并且不会导入任何数据。

如果您想跳过无效行而不停止事务,您可以对忽略无效行的 COPY 命令使用 MAXERROR 选项。这是忽略多达 100 行无效行的示例。

COPY table_name from 's3://[bucket-name]/[file-path or prefix]' CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' DELIMITER '\t' MAXERROR 100;

如果无效行数超过 MAXERROR error count(100),事务将被回滚。

有关 COPY 命令的详细信息,请参阅以下链接。 http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

【讨论】:

【参考方案2】:

您可以使用NOLOAD 的标志在加载数据之前检查错误。这是一种更快的验证数据格式的方法,因为它不会尝试加载任何数据,只需对其进行解析。

您可以使用MAXERROR 标志定义您愿意容忍多少错误

如果您有超过MAXERROR 计数,您的加载将失败并且不会添加任何记录。

在此处查看更多信息:http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

【讨论】:

你的意思是即使发生错误也不能加载部分记录? 如果错误数小于MAXERROR,其余的将被正确复制

以上是关于Amazon RedShift 中的“复制”命令是不是是原子的?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理

复制命令 Amazon Redshift

在 Amazon Redshift 中的表之间传输数据

使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错

将数据从 Amazon S3 复制到 Redshift 并避免重复行

Amazon Redshift 错误地四舍五入 Numeric(9,4) 值