【问题标题】:Can Regex Serde in AWS Athena handle new line characters?AWS Athena 中的 Regex Serde 可以处理换行符吗?
【发布时间】: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


    【解决方案1】:

    根据我的研究,hive serde 目前不支持嵌入式换行符。

    https://community.cloudera.com/t5/Support-Questions/Hive-Regex-Serde-for-Multiple-Line/td-p/37097

    “目前 Hive 不支持识别文本格式数据中嵌入的换行符,即使通过其 OpenCSV 实现也是如此”

    【讨论】:

      【解决方案2】:

      只有像ORCParquet 这样的二进制格式可以存储换行符,并且在查询中,您只能在使用二进制格式时使用正则表达式检查换行符,此外,如果您不在查询中删除某些工具可能会显示行换行符与不同的行一样少,尽管这可能不是您的工具的问题。

      TEXTFILE、JSON 等文本格式不应包含换行符,因为行是逐行处理的,将换行符视为行分隔符。

      使用 JSON 时事情会更复杂。 JSON 可以包含 \n \r \t 组合,根据 JSON 规范,这些组合被 JSONSerDe 解释为换行符、回车符和制表符,这就是为什么在使用 JSONSerDe 时需要注意这些组合的原因, \\n \\t \\r 这样的组合也应该小心,因为它们将在输出期间被解释。最好删除带有任意数量的斜杠以及换行符、制表符、CR 的所有此类组合。

      【讨论】:

        猜你喜欢
        • 2018-06-04
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2018-08-02
        • 2020-02-13
        • 2023-02-25
        • 2018-07-02
        相关资源
        最近更新 更多