Hive RegexSerDe

时间:2013-12-03 23:32:03

标签: regex hadoop hive hiveql

我需要从平面文件中读取数据。它包含许多行但希望从以下行中提取数据:

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';

它似乎无法正常工作并不断发出异常。有任何想法吗? 正则表达式可能是错误的,但我只是不知道

我可以稍后发布异常,暂时无法访问群集

1 个答案:

答案 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)。