首页 > 解决方案 > 由于我的 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 

有人可以帮忙吗?

标签: amazon-web-servicescsvamazon-s3copyamazon-redshift

解决方案


您的命令中有ESCAPE参数, AWS COPY 示例提到:COPY

以下示例显示如何加载与分隔符字符(在本例中为管道字符)匹配的字符。在输入文件中,确保您要加载的所有管道字符 (|) 都使用反斜杠字符 () 进行转义。然后使用 ESCAPE 参数加载文件。

这导致在12\|xyz您逃离管道时被解释为一列。我想你可以在没有 ESCAPE 的情况下运行它 - 但是如果你真的|在一个列中它会失败。


推荐阅读