引号中嵌入换行符的 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
不能与FIXEDWIDTH
、REMOVEQUOTES
或ESCAPE
一起使用。
【讨论】:
我已经尝试使用 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 副本的主要内容,如果未能解决你的问题,请参考以下文章
将 CSV 加载到 Redshift,缺少换行符:在位置 38 发现意外字符 0x76
Redshift COPY 无法从 S3 读取 tar.gz。错误代码 1216。缺少换行符:在位置 1 发现意外字符 0x2f