如何处理 AWS Athena 中的嵌入换行符

2024-02-03

我在 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/'

在存储桶中,我放置了一个具有以下上下文的简单 CSV 文件:

rec1 col1,rec2 col2
rec2 col1,"rec2, col2"
rec3 col1,"rec3
col2"

When I run data preview request SELECT * FROM "default"."test_line_breaks" limit 10; then Athena returns the following response: Athena query response

我应该如何设置ROW FORMAT正确处理字段值内的换行符?以便rec3\ncol2出现在col2.


这里的问题是 OpenCSV 序列化器-反序列化器

不支持 CSV 文件中嵌入换行符。

See 此文档来自 AWS http://docs.aws.amazon.com/athena/latest/ug/csv.html.

但是,也许可以使用正则表达式串行器 https://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/serde2/RegexSerDe.html。请记住,该解串器将采用“爪哇味 https://stackoverflow.com/questions/47846031/how-to-regex-apache-log-date-and-time-into-hive" 正则表达式。因此,请务必在调试中使用支持该语法的在线正则表达式工具。

编辑:仍在研究处理嵌入换行的语法\n。但是,这里是一个处理带有可选引号的两列的示例。以下正则表达式"*([^"]*)"*,"*([^"]*)"* worked https://regex101.com/r/hF4fP8/13在您的线路上带有嵌入式回程托架。但是,我thinkPresto 引擎只是为其提供动力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';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 AWS Athena 中的嵌入换行符 的相关文章

随机推荐