csv Redshift -分隔值缺少结束引号

qmelpv7a  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我试图加载一个CSV文件到红移。
分隔符号'|'

CSV的第一列:

我用这个命令来加载。

copy tbl from 's3://datawarehouse/source.csv'   
iam_role  'arn:aws:iam:::role/xxx'cas-pulse-redshift' 
delimiter '|' 
removequotes 
ACCEPTINVCHARS ;

错误:

raw_field_value | This is ok" |xyz@domain.com
err_code        | 1214
err_reason      | Delimited value missing end quote

然后我也试了这个。

copy tbl from 's3://datawarehouse/source.csv'   
iam_role  'arn:aws:iam:::role/xxx' 
CSV QUOTE '\"' 
DELIMITER '|'   
ACCEPTINVCHARS ;
djp7away

djp7away1#

免责声明-即使这篇文章没有回答这里提出的问题,我张贴这个分析的情况下,它有助于一些人。
如果带引号的文本列缺少结束引号,或者文本列值本身有新行,则会报告错误**“Delimited value missing end quote”**。在我的示例中,文本列值中有新行。
根据RFC 4180,CSV的规范规定:
包含换行符(CRLF)、双引号和逗号的字段应该用双引号括起来。
例如:

"aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx

所以一个有效的CSV可以有多行,在Redshift中导入它的正确方法是指定CSV格式选项。这也假设所有在值中有引号字符的列都将用另一个前面的引号字符转义引号字符。这也符合CSV RFC规范。
如果使用双引号将字段括起来,则必须在字段内出现的双引号前面加上另一个双引号,以对其进行转义。
例如:

"aaa","b""bb","ccc"

如果我们尝试导入的文件不是有效的CSV文件,并且只是根据具体情况命名为.CSV文件,则我们有以下选项。
1.尝试在不指定CSV选项的情况下复制文件,并使用相应的复制选项微调分隔符、转义符和引号行为。
1.如果一组选项无法一致地复制数据,请预处理文件以使其一致。
通常,如果我们尝试以一致的格式导出和导入数据,则有助于使行为具有确定性。

相关问题