从Hive中的HDFS中提取数据后获取Null?

时间:2017-06-27 06:17:18

标签: regex hadoop hive hdfs hiveql

到目前为止我做了什么,我在我的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中执行相同的正则表达式,结果是正确的,正如我预期的那样。我无法弄明白为什么!

1 个答案:

答案 0 :(得分:1)

'input.regex' = '^([^0-9]+).*'
  1. 只有括号括起来的表达式才会映射到列。
  2. 整个记录应由正则表达式
  3. 涵盖
    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  |
    +---------+