ant*_*lim 4 amazon-web-services amazon-athena
我在AWS Athena中创建了一个表,如下所示:
CREATE EXTERNAL TABLE IF NOT EXISTS default.test_line_breaks (
col1 string,
col2 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
STORED AS TEXTFILE
LOCATION 's3://bucket/test/'
Run Code Online (Sandbox Code Playgroud)
在桶中我放了一个简单的CSV文件,其中包含以下内容:
rec1 col1,rec2 col2
rec2 col1,"rec2, col2"
rec3 col1,"rec3
col2"
Run Code Online (Sandbox Code Playgroud)
当我运行数据预览请求时,SELECT * FROM "default"."test_line_breaks" limit 10;Athena会返回以下响应:

我应该如何设置ROW FORMAT正确处理字段值中的换行符?所以rec3\ncol2出现在col2.
这里的问题是OpenCSV Serializer-Deserializer
不支持CSV文件中的嵌入式换行符.
请参阅AWS的此文档.
但是,也许可以使用RegexSerDe.请记住,这个Deserializer将采用" Java Flavored "正则表达式.因此,请确保在调试中使用支持该语法的在线Regex工具.
编辑:仍在处理嵌入式换行的语法\n.但是,这是一个使用可选引号处理两列的示例.下面的正则表达式"*([^"]*)"*,"*([^"]*)"* 的工作对你行与嵌入式回报马车.但是,我认为 Presto引擎只是喂它rec3 col1,"rec3.我继续努力.
CREATE EXTERNAL TABLE IF NOT EXISTS default.test_line_breaks (
col1 string,
col2 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = '"*([^"]*)"*,"*([^"]*)"*'
)
STORED AS TEXTFILE
LOCATION 's3://.../47936191';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |