【问题标题】:hive create table input.regex - filter out all rows starting with a charhive create table input.regex - 过滤掉所有以 char 开头的行
【发布时间】:2019-06-06 12:47:00
【问题描述】:

我想在 Hive 中创建表

CREATE TABLE table (
    a     string
   ,b     string
) 
PARTITIONED BY ( pr_filename string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex'='reg_exp') ;

但源数据有以“#”开头的多行标题

# <some comment>
#
# <some other comments>
# <some other comments>
# <some other comments>
#
a,b
1,2
8,2
8,9

是否可以编写 reg_exp 来过滤掉所有以所选字符开头的行,还是我必须使用临时表来处理这个标题?

【问题讨论】:

    标签: regex hive create-table hive-serde regexserde


    【解决方案1】:

    如果你尝试像这样过滤:

    'input.regex'='^([^#]+),([a-zA-Z])' --first group is everything except #
    

    该行无论如何都会返回 NULL,您可以过滤此类记录。

    RegexSerDe JavaDocs 说: 在反序列化阶段,如果一行与正则表达式不匹配,则该行中的所有列都将为 NULL。如果一行与正则表达式匹配但组数少于预期,则缺少的组将为 NULL。如果一行与正则表达式匹配但组数多于预期组,则忽略其他组

    解决办法是从中选择时使用中间表+过滤行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多