Redshift COPY завершается ошибкой, когда значение столбца является обратной косой чертой - PullRequest
0 голосов
/ 15 января 2019

Мой вопрос касается копирования данных из Postgres в S3 в Redshift, когда значение для одного столбца равно \.

Сначала я копирую данные из Postgres на S3, используя Python psycopg2.copy_expert

COPY schema.table1 TO stdout WITH CSV HEADER DELIMITER AS '|'
FORCE QUOTE * ESCAPE '\\'

Как только он находится в S3, я копирую его в Redshift из S3 с:

COPY rs_schema.rs_table (
  col1,
  col2,
  col3,
  date_col,
  col5
) FROM 's3://bucket/folder_with_file/'
DELIMITER AS '|'
IGNOREHEADER 1
EMPTYASNULL
ACCEPTINVCHARS
BLANKSASNULL
TRUNCATECOLUMNS
REMOVEQUOTES
ESCAPE
DATEFORMAT 'auto';

Данные как это выглядит в Postgres:

smith, john, \, 1920-02-20 00:00:00, 5

Данные, как это выглядит в S3:

"Smith"|"John"|"\\"|"1900-02-20 00:00:00"|"5"

Ошибка красного смещения от pg_catalog.stl_load_errors:

pg_catalog.stl_load_errors

Я полагаю, что ошибочными параметрами для копии являются ESCAPE и REMOVEQUOTES. Проблема с их удалением и использованием CSV QUOTE AS '"' состоит в том, что мои данные содержат разделитель | и обратную косую черту \, поэтому они не работают без этих параметров.

Редактировать 1:

Структура таблицы для таблицы postgres и таблицы красного смещения такова, что date_col равен DATETIME, а остальные (col1, col2, col3, col5) VARCHAR

...