对于Amazon RedShift,通常使用'copy'命令从S3加载数据。我想知道命令是否是原子的。例如。是否有可能在某些特殊情况下只将部分数据文件加载到RedShift表中?
答案 0 :(得分:7)
带有默认选项的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错误计数(100),则事务将被回滚。
有关COPY命令的详细信息,请参阅以下链接。 http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html
答案 1 :(得分:3)
您可以使用NOLOAD
标志在加载数据之前检查错误。这是验证数据格式的一种更快捷的方法,因为它不会尝试加载任何数据,只需解析它。
您可以使用MAXERROR
标记
如果您的计数超过MAXERROR
,则您的加载将失败并且不会添加任何记录。
在此处查看更多信息:http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html