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 中的异常处理
使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错