2013-03-29 36 views
0

目标问题: - 分析和使用负载日志数据转换HIVE SERDE feature.Facing的问题,而使用SELECT语句检索数据。数据与HIVE SERDE

我们创建了一个表并能够成功加载数据。但是,select语句只检索NULL值。

样品日志数据:

2013-02-21 00:13:48,916 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: Verification succeeded for blk_5729677439273359430_1495 

正则表达式,我们想出了解析上述日志:

([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): ([[^ ]*\s]*) 

创建表

CREATE EXTERNAL TABLE log (
dt STRING, 
time STRING, 
loglevel STRING, 
check STRING, 
status STRING) 
ROW FORMAT 
SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
"input.regex"([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): ([[^ ]*\s]*)", 
"output.format.string"="%1$s %2$s %3$s %4$s %5$s") 
STORED AS TEXTFILE LOCATION '/tmp/log/'; 

我们增加的jar:

add jar /usr/lib/hive/lib/hive-contrib-0.7.1-cdh3u4.jar; 

加载数据:

load data local inpath "/tmp/logdata.txt" into table log; 

Retreive数据:

Select * from log LIMIT 1; 

输出:

NULL NULL NULL NULL NULL 

示例日志数据:

2013-02-21 00:13:48,916 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: 
Verification succeeded for blk_5729677439273359430_1495 

2013-02-21 00:15:39,929 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: 
Verification succeeded for blk_-4787916211671845946_1464 

先谢谢了!

回答

0

请试试这个,Rubular link

([^ ]*) ([^ ]{8})[^ ]* ([A-Z]*) ([^ ]*): (.*) 
0

看起来你应该添加“=”下面的“input.regex”

,通常,这种错误是由正则表达式引起的不充分匹配输入。