当列的值是反斜杠时,Redshift COPY失败

时间:2019-01-15 15:59:26

标签: postgresql amazon-web-services amazon-s3 copy amazon-redshift

我的问题是,当一列的值为\时,将数据从Postgres复制到S3到Redshift。

首先,我使用Python的psycopg2.copy_expert

将数据从Postgres复制到S3
COPY schema.table1 TO stdout WITH CSV HEADER DELIMITER AS '|'
FORCE QUOTE * ESCAPE '\\'

一旦在S3中,我就使用以下命令将其从S3复制到Redshift:

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的Redshift错误:

pg_catalog.stl_load_errors

我认为该副本的令人讨厌的参数是ESCAPEREMOVEQUOTES。删除它们并使用CSV QUOTE AS '"'的问题在于我的数据包含定界符|和反斜杠\,因此如果没有这些参数,它将失败。

编辑1:

postgres表和redshift表的表结构是date_col为DATETIME,其余(col1, col2, col3, col5)为VARCHAR

0 个答案:

没有答案