使用 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 中的异常处理的主要内容,如果未能解决你的问题,请参考以下文章
使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错
如何将文件从 S3 复制到 Amazon EMR HDFS?