到目前为止我所做的是,我已经在我的 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, like 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 中执行相同的正则表达式,结果如我所料是正确的。我想不通为什么!
最佳答案
'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 |
+---------+
关于regex - 在 Hive 中从 HDFS 中提取数据后获取 Null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44773404/