1

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

4

1 回答 1

1

如果您尝试像这样过滤:

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

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

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

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

于 2019-06-06T14:58:23.383 回答