【发布时间】:2021-08-28 12:05:39
【问题描述】:
我有一个表,其中有几列包含数据中的换行符。我曾尝试使用 Glue Crawler 在 Athena 中创建表,但由于换行符,这些值会溢出到错误的列中。源数据是 S3 存储桶中的 CSV
现在我试图通过使用 Regex SerDe 创建一个表来实现相同的目标。我的问题是我无法处理数据中的换行符。我读了这篇文章:How to handle new line characters in hive?,想知道下面的情况是否仍然如此:
您不能将由数据本身包含换行符的换行符分隔的记录放入 Hive。至少,不是纯文本。您需要使用 sqoop 才能解析和加载正确的列 – OneCricketeer 2018 年 3 月 4 日 7:24
没有换行符的简单源数据示例: “这是一个句子,用逗号,很棒”,“亲切的问候,约翰”
“这是另一个逗号,不太好”,你好
两列,两行,下面是有效的正则表达式:
CREATE EXTERNAL TABLE `commas_regex`(
`col1` string COMMENT '',
`col2` string COMMENT '')
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex'='(\"*[\\w|,|\\s|\\n|\\r]+\"*),(\"*[\\w|,|\\s\\n|\\r]+\"*)$[\\r\\n]*')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://....' /* removed for security */
TBLPROPERTIES (
'has_encrypted_data'='false',
'transient_lastDdlTime'='1623409617')
现在更改源数据以包含换行符,它会停止工作:
"这是一个句子,用逗号,很好","亲切的问候,
约翰
“这是另一个逗号,不太好”,你好 See picture of the results in Athena here
【问题讨论】:
标签: regex amazon-web-services hive amazon-athena ddl