我需要从平面文件中读取数据。它包含许多行但希望从以下行中提取数据:
REVISION 12 30364918 Anarchism 2005-12-06T17:44:47Z RJII 141644
我只想要这一行的第2,第3和第5个条目并将它们放入Hive表中;我已发出此命令但收到错误
create external table testTable (
tag string,
a string,
r string
)
row format SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES(
"input.regex" = "REVISION\s,[0-9]*,\s,[0-9]*,\s[a-zA-Z0-9]*\s,[0-9]*-[0-9]*-[0-9]*T[0-9]*:[0-9]*:[0-9]*Z",
"output.format.string" = "%1$s %2$s %3$s")
stored as textfile
location 'hdfs://location:8020/user/bd4-project1/enwiki-20080103-sample';
它似乎无法正常工作并不断发出异常。有任何想法吗? 正则表达式可能是错误的,但我只是不知道
我可以稍后发布异常,暂时无法访问群集
答案 0 :(得分:3)
我使用Hive 0.10.0测试了它,它应该适合你。
create table ts_test2(
tag string,
a string,
r string
)
row format SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES(
"input.regex" = "REVISION ([0-9]+) ([0-9]+) [a-zA-Z0-9]+ ([0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+:[0-9]+[Z]) RJII [0-9]+$",
"output.format.string" = "%1$s %2$s %3$s");
一些注意事项:
1.确保你的正则表达式完全正确以确定所有行,或者你将在你的hive表中获得NULL
。 至少在this之类的地方测试正则表达式
2.使用()
包装您感兴趣的字段。
3.我正在使用空格,您可以将其更改为\s
(或者\\s
)。