amazon-web-services - 由于我的 csv 文件中的某些数据中存在“\”,Redshift Copy 命令失败
问题描述
我正在尝试将 csv 文件从 S3 复制到 Redshift 表。我的 csv 文件中几乎没有列在数据中包含“\”。以下是样本数据:
columnA|columnB|columnC|columnD|columnE
-------+-------+-------+-------+-------
abc | 12\ | xyz | test | hello
lmn | 123 | pqr\ | test | bye
jkl | 124 | deg | test | hi
我正在使用以下命令在 Redhisft 中进行复制,但它失败了:
COPY redshif_schema.redshift_table_name from 's3://bucket/folder/inputfile.csv' access_key_id '<access_id>' secret_access_key '<secret_key>' fillrecord escape delimiter as '|' IGNOREHEADER as 1 ACCEPTANYDATE emptyasnull blanksasnull maxerror 0 ;
当我在 stl_load_errors 表中检查 raw_line 时,我看到下面(2 个反斜杠):
abc | 12\\ | xyz | test | hello
有人可以帮忙吗?
解决方案
您的命令中有ESCAPE
参数, AWS COPY 示例提到:COPY
以下示例显示如何加载与分隔符字符(在本例中为管道字符)匹配的字符。在输入文件中,确保您要加载的所有管道字符 (|) 都使用反斜杠字符 () 进行转义。然后使用 ESCAPE 参数加载文件。
这导致在12\|xyz
您逃离管道时被解释为一列。我想你可以在没有 ESCAPE 的情况下运行它 - 但是如果你真的|
在一个列中它会失败。