我试图使用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)"
,因为它将我的字符串拆分为最后一个空格。我想我没有正确处理正确的括号,但我无法找到正确的方法。