hive create table input.regex - 过滤掉所有以 char 开头的行

hive create table input.regex - filter out all rows starting with a char

我想在 Hive 中创建 table

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

但源数据有多行 header 以“#”开头

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

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

如果您尝试这样过滤:

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

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

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

解决方案是在从中选择时使用中间 table + 筛选行。