Hive Serde Regex无法识别字符串模式

时间:2014-04-25 17:07:59

标签: regex hive

以下是我尝试匹配的日志文件中的两行。我试图将每一行分成四列(日期,主机名,命令,状态)。 该行是日期,主机名,命令和行中状态之间的制表符。状态列可能包含空格。

03-24-2014      fm506      TOTAL-PROCESS   OK;HARD;1;PROCS OK: 717 processes
03-24-2014      fm504      CHECK-LOAD      OK;SOFT;2;OK - load average: 54.61, 56.95

在Rubular(http://rubular.com/)中,我的正则表达式完全符合我的要求;然而,在我查询我的hive表中的日期列之后,我得到整行,这让我相信正则表达式语句与HIVE正在寻找的不匹配。

([^] )\ s ([^] )\ s ([^] )\ s (。*)< / p>

这是我的create table语句,其结果来自select query:

CREATE EXTERNAL TABLE IF NOT EXISTS sys_results(
date STRING
,hostname STRING
,command STRING
,status STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\\s*(.*)",
"output.format.string" = "%1$s %2$s %3$s %4$s"
)
STORED AS TEXTFILE
LOCATION  '/user/sys_log_output/sys-results/';


select date from sys_results;
03-24-2014      fm506      TOTAL-PROCESS   OK;HARD;1;PROCS OK: 717 processes

1 个答案:

答案 0 :(得分:0)

我明白了。 hive正则表达式使用'\ t'识别标签我将input.regex表达式更改为此。     “input.regex”=“([^] )\ t([^] )\ t([^] )\ t \ t([^]。)”< / p>