筛选出以字符开头的所有行

ncecgwcz  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(383)

我想在配置单元中创建表

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\u exp来过滤掉所有以所选字符开头的行,或者我必须使用临时表来处理这个头?

ui7jx7zq

ui7jx7zq1#

如果您尝试这样过滤:

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

行将返回空值,您可以过滤这样的记录。
regexserdejavadocs说:在反序列化阶段,如果一行与regex不匹配,那么该行中的所有列都将为null。如果一行与regex匹配,但包含的组少于预期的组,则缺少的组将为null。如果一行与regex匹配,但有多于预期的组,则忽略其他组
解决方案是在从中间表中进行选择时使用中间表+筛选器行。

相关问题