Мой вопрос касается копирования данных из 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:
Данные, как это выглядит в S3:
"Smith"|"John"|"\\"|"1900-02-20 00:00:00"|"5"
Ошибка красного смещения от pg_catalog.stl_load_errors
:
Я полагаю, что ошибочными параметрами для копии являются ESCAPE
и REMOVEQUOTES
. Проблема с их удалением и использованием CSV QUOTE AS '"'
состоит в том, что мои данные содержат разделитель |
и обратную косую черту \
, поэтому они не работают без этих параметров.
Редактировать 1:
Структура таблицы для таблицы postgres и таблицы красного смещения такова, что date_col равен DATETIME
, а остальные (col1, col2, col3, col5
) VARCHAR