#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. Спасибо, это было полезно