到目前为止,我已经在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
这是我的配置单元查询:
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中执行相同的正则表达式,结果如我所料是正确的。我不知道为什么!
1条答案
按热度按时间x8diyxa71#
只有用括号括起来的表达式才会Map到列。
正则表达式应该覆盖整个记录