从hive中的hdfs提取数据后获取null?

vshtjzan  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(290)

到目前为止,我已经在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中执行相同的正则表达式,结果如我所料是正确的。我不知道为什么!

x8diyxa7

x8diyxa71#

'input.regex' = '^([^0-9]+).*'

只有用括号括起来的表达式才会Map到列。
正则表达式应该覆盖整个记录

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  |
+---------+

相关问题