使用正则表达式和RegexSerDe解析配置单元的字符串

使用正则表达式和RegexSerDe解析配置单元的字符串,regex,parsing,hadoop,hive,string-parsing,Regex,Parsing,Hadoop,Hive,String Parsing,我试图使用RegexSerDe来解析一个字符串输入,该字符串输入到具有配置单元的表的不同属性。原始字符串的格式为 。。。A.bx;Y 我期望的结果是 foo=A;B和bar=X;Y 作为表中的两个独立属性。我用作input.regex的正则表达式是 > CREATE EXTERNAL TABLE test( ... foo STRING, bar STRING )ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSer

我试图使用RegexSerDe来解析一个字符串输入,该字符串输入到具有配置单元的表的不同属性。原始字符串的格式为

。。。A.bx;Y

我期望的结果是

foo=A;B和bar=X;Y

作为表中的两个独立属性。我用作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;
它可以在我找到的其他web工具上正确解析我的字符串。但是SerDe无法匹配字符串return null。尝试使用双反斜杠没有帮助。 我也试着用一些其他的表达,比如

input.regex=…\.\\\*\

对于最后两个括号,配置单元将解析后的字符串输出为

foo=A;B X和bar=Y


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

你的问题表示法相当混乱。格式化/美化它,并在需要时突出显示,如使用正则表达式、记录样本等。@ramisetty.vijay感谢您的建议。已更改。您缺少output.format.string=%1$s%2$s@ramisetty.vijay抱歉,我在发布时不小心删除了它们。