【问题标题】:Getting Null after extracting data from HDFS in Hive?从 Hive 中的 HDFS 提取数据后获取 Null?
【发布时间】:2018-07-20 16:04:56
【问题描述】:

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

【问题讨论】:

    标签: regex hadoop hive hdfs hiveql


    【解决方案1】:
    'input.regex' = '^([^0-9]+).*'
    
    1. 只有括号括起来的表达式才映射到列。
    2. 整个记录应该被正则表达式覆盖

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多