使用正则表达式与RegexSerDe进行Hive的字符串解析

时间:2014-07-14 08:53:35

标签: regex parsing hadoop hive string-parsing

我试图使用RegexSerDe将字符串输入解析为使用Hive的表的不同属性。原始字符串的格式为

  

" ...(A; B)(X; Y);"

我预期的输出是

  

foo =" A; B"和bar =" X; Y'#34;

(作为表中的两个单独属性)。我使用的正则表达式为" input.regex"是

> CREATE EXTERNAL TABLE test(
...
foo STRING,
bar STRING
)ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "... \(([^\)]*?)\) \(([^\)]*?)\)",
"output.format.string" = "...%4$s %5$s"
)
stored as textfile;

在我找到的其他网络工具上正确解析我的字符串。但SerDe无法匹配字符串(返回null)。尝试使用双反斜杠并没有帮助。 我还尝试使用其他表达式,如

  

" input.regex" =" ... \(。* \)\(。* \)"

对于最后两个括号,HIVE将解析后的字符串输出为

  

" foo ="(A; B)(X"和bar =" Y)"

,因为它将我的字符串拆分为最后一个空格。我想我没有正确处理正确的括号,但我无法找到正确的方法。

0 个答案:

没有答案