将数据从 s3 复制到 redshift 时忽略所有无效记录

Posted

技术标签:

【中文标题】将数据从 s3 复制到 redshift 时忽略所有无效记录【英文标题】:Ignore all invalid records while copy data from s3 to redshift 【发布时间】:2019-02-21 20:14:20 【问题描述】:

我正在将数十亿条记录从 s3(多个文件)复制到有无效记录的 redshift 表中。我想在。但是当我检查“MAXERROR”限制是“100000”。但在我的情况下,无效记录的总数大于“100000”。将数据复制到红移表时,有没有办法忽略所有无效记录?

但就我而言,每个 s3 文件的无效记录不会超过“100000”。如果我为每个文件配置“MAXERROR”,那么我可以解决这个问题,但我没有找到任何参考?

是否可以为每个文件配置“MAXERROR”?如果没有,有没有其他替代方法来解决这个问题?

【问题讨论】:

【参考方案1】:

MAXERROR 根据复制命令进行检查,并且由于 Amazon Redshift 的并行特性,它允许您并行处理多个 S3 文件以加快加载速度,但所有复制节点异步共享单个 MAXERROR 值。当然,并行运行时会出现预期的不一致,这就是 AWS 指南指出实际 ERROR_COUNT 可能超出 MAXERROR 的原因。

由于 Amazon Redshift 的并行特性,实际报告的错误数可能大于指定的 MAXERROR。如果 Amazon Redshift 集群中的任何节点检测到已超出 MAXERROR,则每个节点都会报告其遇到的所有错误。

TLDR; 简而言之,回答您的问题:不,您不能为每个 S3 文件定义 MAXERROR。 但要实现所需结果,您可以将负载分解为多个复制命令,并通过key_prefix 一次处理较小的 S3 文件块。

【讨论】:

以上是关于将数据从 s3 复制到 redshift 时忽略所有无效记录的主要内容,如果未能解决你的问题,请参考以下文章

来自 S3 的 Redshift 复制命令有效,但没有上传数据

使用 Psycopg2 将数据从 S3 复制到 AWS Redshift 时出错

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容

使用 Airflow 将数据从 Redshift 卸载到 S3

REDSHIFT:仅复制新记录并忽略现有记录

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?