到目前为止我做了什么,我在我的linux环境中设置了Hadoop和Hive,我正在尝试将数据从HDFS文件提取到我的Hive表中。
这就是日志行的样子:
apache 2013-10-09T14:04:32Zphp129.124.201.110 / EKEE.php20019705910Mozilla / 5.0 (X11; Linux i686)AppleWebKit / 534.24(KHTML,和Gecko一样) Chrome / 11.0.696.50 Safari / 534.24
这是我的Hive查询:
CREATE EXTERNAL TABLE LogParserSample(
logtype STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '^[^0-9]+'
)
STORED AS TEXTFILE
LOCATION '/mypath/';
当我执行上述操作时,表已成功创建。但是当我尝试使用 SELECT 语句从该表中查询数据时,我得到的是null而不是单词apache。对于这个例子,我试图从上面的日志行中提取单词 apache 。但后来我尝试在rubular中执行相同的正则表达式,结果是正确的,正如我预期的那样。我无法弄明白为什么!
答案 0 :(得分:1)
'input.regex' = '^([^0-9]+).*'
create external table logparsersample
(
logtype string
)
row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
with serdeproperties (
'input.regex' = '^([^0-9]+).*'
)
stored as textfile
;
select * from LogParserSample
;
+---------+
| logtype |
+---------+
| apache |
+---------+