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

Posted

技术标签:

【中文标题】使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理【英文标题】:Exception handling in Bulk Copying to Amazon Redshift Using Avro files 【发布时间】:2020-08-19 22:55:53 【问题描述】:

我正在尝试将 S3 中的 avro 文件加载到 Redshift 中的表中。 Avro 文件之一的格式不正确。问题是当复制命令尝试加载该文件时,它会引发异常并且不会为正确的文件运行复制。如何跳过格式错误的文件和 c opy 正确的文件?这是我加载文件的代码:

COPY tmp.table
FROM 's3://BUCKET/PREFIX'
IAM_ROLE 'ROLE' 
FORMAT AVRO 's3://BUCKET/AVRO_PATH'

我得到的错误是:

  code:      8001
  context:   Cannot init avro reader from s3 file Incorrect Avro container file magic number 
  query:     19308992
  location:  avropath_request.cpp:438
  process:   query0_125_19308992 [pid=23925]

【问题讨论】:

在 s3 存储桶前缀组合中是否还有其他以相同前缀开头但不是 avro 的文件?这是使用 Spark 之类的东西而不使用清单文件进行 Redshift Copy 时的常见问题。编辑:重新阅读问题后,我了解您想要做什么,这是不可能的。 Redshift 将尝试处理 s3 路径上的所有文件。 感谢@B.Pesevski 回答这个问题。不,我没有任何其他具有相同前缀的文件。我所做的是手动将 avro 文件中的一个字段更改为与预期不同的格式,我得到了这个错误 【参考方案1】:

您可以预处理 s3://BUCKET/PREFIX 文件并创建一个清单文件,其中仅包含具有正确格式/架构的 Avro 文件。 Redshift 无法为您执行此操作,并将尝试处理 s3://BUCKET/PREFIX 路径上的所有文件。

【讨论】:

以上是关于使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 将目录复制到另一个目录

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

使用 scp 将文件复制到 Amazon EC2 实例?

如何将文件从 S3 复制到 Amazon EMR HDFS?

使用 scp 文件复制到 Amazon EC2 时停止传输 16K

如何将嵌套的 Avro 字段作为单个字段复制到 Redshift?