引号中嵌入换行符的 Redshift 副本

Posted

技术标签:

【中文标题】引号中嵌入换行符的 Redshift 副本【英文标题】:Redshift Copy with Newline Embedded in Quotes 【发布时间】: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 行中的描述列与换行符一起加载。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我已经尝试使用 CSV 选项,现在得到一个“找到额外的列” 您应该查看STL_LOADERROR_DETAIL 表中提供的行以查看导致问题的数据。 CSV 选项也可能无法处理换行符。 我确实查看了 STL_LOADERROR_DETAIL 并在带有换行符的列之后的下一列中使用 CSV 选项声明“找到额外的列”。我认为它也不处理换行符。必须有办法。我敢肯定有很多数据文件也有这个特殊问题。 仅供参考:amazon web services - How to deal with Linebreaks in redshift load? - Stack Overflow 我找到了一个不使用 CSV 选项的修复程序。我在 csv 文件中为任何有换行符的字段添加了 /n 并添加了 Escape。在加载到 S3 之前,我运行一个 python 脚本以编程方式添加 /n。然后我成功地将副本运行到 Redshift。

以上是关于引号中嵌入换行符的 Redshift 副本的主要内容,如果未能解决你的问题,请参考以下文章

从 S3 复制到 Redshift 不识别换行符

将 CSV 加载到 Redshift,缺少换行符:在位置 38 发现意外字符 0x76

powershell:单引号字符串中的换行符?

Redshift ROW_ID 列换行?

Redshift COPY 无法从 S3 读取 tar.gz。错误代码 1216。缺少换行符:在位置 1 发现意外字符 0x2f

在Javascript中显示带有引号和换行符的PHP字符串(警报)[重复]