蜂巢创建表input.regex-筛选出以char开头的所有行

时间:2019-06-06 12:47:00

标签: regex hive

我想在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 来过滤出以所选字符开头的所有行,还是我必须使用临时表来处理此标头?

1 个答案:

答案 0 :(得分:1)

如果您尝试这样过滤:

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

无论如何该行都将返回NULL,您可以过滤这些记录。

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

解决方案是在从中选择表格时使用中间表+过滤器行。