我试图使用Hive RegexSerDe解析下面的输入字符串,但没有得到预期的输出。我真的不知道问题出在我的regex查询还是RegexSerDe中。我的正则表达式查询在其他在线正则表达式模拟器中按预期工作,但在蜂巢的RegexSerDe中不起作用。有人可以帮我了解这里出了什么问题吗?

我正在使用apachehive-0.9.0版本。

输入:

1::玩具总动员(1995)::冒险|动画|儿童|喜剧|幻想

我的预期输出:

1 Toy Story 1995冒险|动画|儿童|喜剧|幻想

我的配置单元查询:

CREATE TABLE myMovie3(
id STRING,
name STRING,
year STRING,
category STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "^(.*?)::(.*)\(([0-9]*)\)::(.*)$","output.format.string" = "%1$s %2$s %3$s %4$s")
STORED AS TEXTFILE;

我从正则表达式得到的实际输出是:
hive> select * from mymovie3;
OK
1   Toy Story (1995)

最佳答案

正则表达式是原因。尽管在正常情况下是完美的,但是RegexSerDe是一个Java类,需要转义反斜杠。使用以下内容:

^(.*?)::(.*)\\(([0-9]*)\\)::(.*)$

关于regex - hive 的RegexSerDe没有提供正确的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25840492/

10-11 09:22