При копировании паркета в Redshift произошла ошибка 1216 Отсутствует перевод строки: в местоположении 4 обнаружен неожиданный символ 0x15 - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть таблица mysql

create table orderitems
(
    id char(36) collate utf8_bin not null
        primary key,
    store_id char(36) collate utf8_bin not null,
    ref_type int not null,
    ref_id char(36) collate utf8_bin not null,
    store_product_id char(36) collate utf8_bin not null,
    product_id char(36) collate utf8_bin not null,
    product_name varchar(50) null,
    main_image varchar(200) null,
    price int not null,
    count int not null,
    is_gift tinyint(1) not null,
);

Мой коллега использовал sqoop dump этой таблицы в несколько файлов паркета по пути s3.Мне нужно загрузить эти файлы в красное смещение.

Сначала

Я пробовал выше MySQL таблицы DDL и обнаружил, что collate, utf8_bin, null, not null и tinyint неподдержка в красном смещении.Поэтому я использую ниже, чтобы создать таблицу элементов порядка в красное смещение

create table orderitems
(
    id char(36),
    store_id char(36),
    ref_type int,
    ref_id char(36),
    store_product_id char(36),
    product_id char(36),
    product_name varchar(50),
    main_image varchar(200),
    price int,
    count int,
    is_gift SMALLINT,
);

Затем

Импорт данных по:

COPY orderitems from 's3://xxxx/arch/M/orderitems/' CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' 

Но получил ошибку

[XX000][500310] [Amazon](500310) Invalid operation: Load into table 'orderitems' failed.  Check 'stl_load_errors' system table for details.;

Проверьте таблицу STL_LOAD_ERRORS и найдете

1216    Missing newline: Unexpected character 0x15 found at location 4

Я искал вокруг, но ничего не нашел.Может кто-нибудь сказать мне, как решить эту проблему?

1 Ответ

0 голосов
/ 02 января 2019

Вы оставляете части формата команды копирования по умолчанию.

Per Документация Redshift :

По умолчанию команда COPY ожидает, что исходные данные находятся в текстовых файлах UTF-8 с разделителями символов.Разделителем по умолчанию является символ канала (|).

В файлах с разделителями символов используются новые строки для различения каждой записи, объясняющей полученное вами сообщение об ошибке.

Поскольку Parquet является уникальным форматомпо своим собственным правилам вы должны предоставить Redshift дополнительную информацию о типе файла, который вы пытаетесь загрузить.

IE:

COPY orderitems from 's3://xxxx/arch/M/orderitems/'
CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' 
FORMAT AS PARQUET;
...