regex - 在 Hive 中从 HDFS 中提取数据后获取 Null?

标签 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, 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]+).*'
  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  |
+---------+

关于regex - 在 Hive 中从 HDFS 中提取数据后获取 Null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44773404/

相关文章:

hadoop - 插入覆盖目录的 Hive Case 语句

apache-spark - 无法从 spark 插入到配置单元分区表中

hadoop - E0701 : XML schema error, cvc-pattern-valid oozie 错误

regex - Mathematica中的错误: regular expression applied to very long string

regex - 正则表达式匹配

javascript - 多次使用否定前瞻(或用 ^ 匹配多个字符)?

hadoop - 配置单元中带有参数的两个查询

java - 排除特殊字符的正则表达式

Hadoop:没有这样的文件或目录

hadoop - 为什么 Hadoop 不使用其他硬盘?