我尝试使用Hive RegexSerDe解析下面的输入字符串,但我没有得到预期的输出。我真的不知道问题是在我的正则表达式查询还是在RegexSerDe中。我的正则表达式查询在其他在线正则表达式模拟器中正如预期的那样工作,但它不适用于hive的RegexSerDe。有人可以帮我理解这里出了什么问题吗?
我正在使用apachehive-0.9.0版本。
输入:
1 ::玩具总动员(1995)::冒险|动画|儿童|喜剧|幻想
我的预期输出:
1玩具总动员1995年冒险|动画|儿童|喜剧|幻想
我的hive查询:
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)
答案 0 :(得分:2)
正则表达式是原因。虽然它在正常情况下是完美的,但RegexSerDe是一个需要转义反斜杠的Java类。使用以下内容:
^(.*?)::(.*)\\(([0-9]*)\\)::(.*)$