Обработка исключений при массовом копировании в Amazon Redshift с использованием файлов Avro

#json #exception #amazon-s3 #amazon-redshift #avro

#json #исключение #amazon-s3 #amazon-redshift #avro

Вопрос:

Я пытаюсь загрузить файлы avro в S3 в таблицу в Redshift. один из файлов Avro имеет неправильный формат. проблема в том, что когда команда copy пытается загрузить этот файл, она выдает исключение и не запускает копирование для правильных файлов. как я могу пропустить файл с неправильным форматом и скопировать правильные файлы? вот мой код для загрузки файла:

 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]
  

Комментарии:

1. Есть ли у вас какие-либо другие файлы, которые начинаются с того же префикса в этой комбинации s3 bucket-prefix, которые не являются avro? Это распространенная проблема при использовании чего-то вроде Spark и неиспользовании файлов манифеста для копирования Redshift. Редактировать: после повторного прочтения вопроса я понимаю, что вы хотите сделать, и это невозможно. Redshift попытается обработать все файлы по пути s3.

2. спасибо @B. Песевски за ответ на этот вопрос. нет, у меня нет другого файла с таким же префиксом. что я сделал, так это изменил вручную одно из полей в файле avro, чтобы формат отличался от ожидаемого, и я получил эту ошибку

Ответ №1:

Вы можете предварительно обработать файлы s3: //{BUCKET} / {PREFIX} и создать файл манифеста только из файлов Avro, которые имеют правильный формат / схему. Redshift не может сделать это за вас и попытается обработать все файлы по пути s3: //{BUCKET} / {PREFIX}.