КОПИРОВАТЬ из Parquet S3 в типы Redshift и decimal в сравнении с int

#amazon-redshift #parquet

#amazon-redshift #parquet

Вопрос:

Я сталкиваюсь с этой ошибкой при попытке скопировать данные из Parquet в S3 в Redshift:

 S3 Query Exception (Fetch). Task failed due to an internal error. File
 'https://...../part-00000-xxxxx.snappy.parquet  
has an incompatible Parquet schema for column 's3://table_name/.column_name'. 
Column type: INT, Parquet schema:
optional fixed_len_byte_array COLUMN_NAME
  

Я подозреваю, что это связано с тем, что файл Parquet имеет числовой / десятичный тип с большей точностью, чем помещается в INT столбец, однако я считаю, что все фактические значения находятся в пределах диапазона, в который они могли бы поместиться. (В ошибке не указан номер строки.)

Есть ли способ принудительно преобразовать тип при копировании и принимать сбои в отдельной строке (как в CSV) вместо сбоя всего файла?

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

1. Есть ли у вас какая-либо строка в pg_catalog.stl_load_errors , связанная с этой загрузкой?

2. Вышеуказанная ошибка возникла из SVL_S3LOG . STL_LOAD_ERRORS пусто.

Ответ №1:

Потратил день на аналогичную проблему и не нашел способа принудительно вводить типы с помощью команды COPY. Я создавал свои файлы parquet с помощью Pandas, и мне нужно было сопоставить типы данных с типами в Redshift. Для целых чисел у меня был Pandas int64 с Redshift BIGINT. Аналогично, мне пришлось изменить числовые столбцы на ДВОЙНУЮ ТОЧНОСТЬ (Pandas float64).

Файл завершается ошибкой в целом, потому что команда КОПИРОВАНИЯ для файлов со столбцами (например, parquet) копирует весь столбец, а затем переходит к следующему. Таким образом, нет способа вывести из строя каждую отдельную строку. Смотрите Документацию AWS .

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

1. Спасибо, это было полезно