【问题标题】:Redshift Copy with Newline Embedded in Quotes引号中嵌入换行符的 Redshift 副本
【发布时间】:2019-08-21 23:07:03
【问题描述】:

尝试使用带引号的换行符将数据从 S3 复制到 Redshift CSV 文件示例:

Line 1 -->  ID,Description,flag
Line 2 -->  "1111","this is a test", "FALSE"
Line 3 -->  "2222","I hope someone
            could help", "TRUE"
Line 4 -->  "3333", "NA", "FALSE"

样本表:

TEST_TABLE:
ID VARCHAR(100)
DESCRIPTION VARCHAR(100)
FLAG VARCHAR(100)

如果您注意到第 2 行有一个换行符,我在使用 COPY 命令时收到错误 Delimited value missing end quote

这是我使用的复制命令:

copy table_name
from sample.csv
  credentials aws_access_key_id= blah; aws_secret_access_key=blah
  DELIMITER ','
  removequotes
  trimblanks
  ESCAPE ACCEPTINVCHARS
  EMPTYASNULL
  IGNOREHEADER 1
  COMPUPDATE OFF;
commit;

我也尝试了 CSV 选项,但得到“找到额外的列”:

copy table_name
from sample.csv
  credentials aws_access_key_id= blah; aws_secret_access_key=blah
  CSV
  IGNOREHEADER 1
  COMPUPDATE OFF;
commit;

我希望第 2 行中的描述列与换行符一起加载。

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    由于字段由引号分隔,请使用CSV option

    注意:CSV 不能与FIXEDWIDTHREMOVEQUOTESESCAPE 一起使用。

    【讨论】:

    • 我已经尝试使用 CSV 选项,现在得到一个“找到额外的列”
    • 您应该查看STL_LOADERROR_DETAIL 表中提供的行以查看导致问题的数据。 CSV 选项也可能无法处理换行符。
    • 我确实查看了 STL_LOADERROR_DETAIL 并在带有换行符的列之后的下一列中使用 CSV 选项声明“找到额外的列”。我认为它也不处理换行符。必须有办法。我敢肯定有很多数据文件也有这个特殊问题。
    • 我找到了一个不使用 CSV 选项的修复程序。我在 csv 文件中为任何有换行符的字段添加了 /n 并添加了 Escape。在加载到 S3 之前,我运行一个 python 脚本以编程方式添加 /n。然后我成功地将副本运行到 Redshift。
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多