我的问题是,当一列的值为\
时,将数据从Postgres复制到S3到Redshift。
首先,我使用Python的psycopg2.copy_expert
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中显示的数据:
在S3中显示的数据:
"Smith"|"John"|"\\"|"1900-02-20 00:00:00"|"5"
来自pg_catalog.stl_load_errors
的Redshift错误:
我认为该副本的令人讨厌的参数是ESCAPE
和REMOVEQUOTES
。删除它们并使用CSV QUOTE AS '"'
的问题在于我的数据包含定界符|
和反斜杠\
,因此如果没有这些参数,它将失败。
编辑1:
postgres表和redshift表的表结构是date_col为DATETIME
,其余(col1, col2, col3, col5
)为VARCHAR