0

我正在尝试使用 Amazon S3 Select 从 CSV 文件中读取记录,如果该字段包含换行符 (\n),则该记录不会被解析为单个记录。此外,根据标准 CSV 格式,字段内的换行符已通过双引号正确转义。

例如,下面的 CSV 文件

Id,Name,Age,FamilyName,Place

p1,Albert Einstein,25,"Einstein

Cambridge",Cambridge

p2,Thomas Edison,30,"Edison

Cardiff",Cardiff

被解析为

第 1 行:身份证、姓名、年龄、姓氏、地点

第 2 行: p1,Albert Einstein,25,"Einstein

3号线:​​剑桥”,剑桥

4号线: p2,Thomas Edison,30,”Edison

5号线:加的夫”,加的夫

理想情况下,它应该被解析如下:

第 1 行:

身份证、姓名、年龄、姓氏、地点

第 2 行:

p1,阿尔伯特·爱因斯坦,25,”爱因斯坦

剑桥”,剑桥

第 3 行:

p2,托马斯·爱迪生,30,”爱迪生

加的夫”,加的夫

我在他们的文档中给出的 SelectObjectContentRequest 中将 AllowQuotedRecordDelimiter 设置为 TRUE。它仍然无法正常工作。

有谁知道 Amazon S3 Select 是否支持上述案例中所述的字段内换行符?或者我需要更改或设置任何其他参数才能使其正常工作?

4

1 回答 1

0

这是正确解析/打印的。混淆在于文字换行符正在输出中打印。如果您在给定的 csv 上运行以下表达式,则可以对此进行测试:

SELECT COUNT(*) from s3Object s

输出:2

请注意,如果您仅指定第三列,则只会得到正确的值:

SELECT s._3 frin s3Object s

您只得到包含所述字段的每行的部分:

"Einstein
Cambridge"
"Edison
Cardiff"

发生的情况是该字段中的字符与\n导致冲突的默认 CSVOutput.RecordDelimiter 值 ( ) 相同。如果您想以不同的方式分隔每个字段,可以将以下内容添加到 OutputSerialization 的CSVOutput部分:

"RecordDelimiter": "\r\n"

或使用其他类型的 1-2 长度字符序列代替\r\n

于 2020-12-21T02:11:29.243 回答