【问题标题】:Redshift - Delimited value missing end quoteRedshift - 分隔值缺少结束引号
【发布时间】:2018-01-06 23:44:04
【问题描述】:

我正在尝试将 CSV 文件加载到 redshift。

分隔符“|”

第 1 列 CSV:

1 |Bhuvi|"This is ok"|xyz@domain.com

我用这个命令加载。

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 ; 

【问题讨论】:

  • iam_role 字符串中的第一个查询中可能有一个太多的单引号。我正在使用带有 aws_access_key、aws_secret_access_key 的“凭据”配置,但我无法重现您的错误:/
  • 当您尝试第二个 COPY 命令时发生了什么?你有同样的错误吗?尝试使用没有转义反斜杠的 CSV QUOTE AS '"'。
  • 我尝试运行第一个 COPY 命令,它对我来说很好,我认为您的数据实际上可能有一些缺少引号的行。无论使用 REMOVEQUOTES 还是不使用它,该查询都适用于我。如果您想简单地忽略缺少双引号的行,您可以在 COPY 命令的末尾添加 MAXERROR 10,这将在给您和错误之前最多跳过 10 行包含损坏/无效数据的行。您可以根据需要更改值“10”。

标签: csv amazon-web-services amazon-s3 amazon-redshift


【解决方案1】:

免责声明 - 尽管这篇文章没有回答这里提出的问题,但我发布此分析以防它对某些人有所帮助。

错误“Delimited value missing end quote”可能会在带引号的文本列缺少结束引号或文本列值本身有新行的情况下报告。就我而言,文本列值中有一个换行符。

根据RFC 4180 CSV 的规范,

包含换行符 (CRLF)、双引号和逗号的字段 应该用双引号括起来。
例如:

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

所以一个有效的 CSV 可以有多行,在 Redshift 中导入它的正确方法是指定CSV format option。这还假设值中包含引号字符的所有列都将引号字符由另一个前面的引号字符转义。这也符合 CSV RFC 规范。

如果使用双引号将字段括起来,则使用双引号 出现在字段内必须通过在它前面加上 另一个双引号。
例如:

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

如果我们尝试导入的文件不是有效的 CSV,而只是命名为 .CSV 文件(视情况而定),那么我们有以下选项。

  1. 尝试在不指定 CSV 选项的情况下复制文件,并使用相应的复制选项微调分隔符、转义和引用行为。
  2. 如果一组选项无法一致地复制数据,则对文件进行预处理以使其一致。

一般来说,如果我们尝试以一致的格式导出和导入数据,这有助于使行为具有确定性。

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多