以下是我尝试匹配的日志文件中的两行。我试图将每一行分成四列(日期,主机名,命令,状态)。 该行是日期,主机名,命令和行中状态之间的制表符。状态列可能包含空格。
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
答案 0 :(得分:0)
我明白了。 hive正则表达式使用'\ t'识别标签我将input.regex表达式更改为此。 “input.regex”=“([^] )\ t([^] )\ t([^] )\ t \ t([^]。)”< / p>