Hive Serde Regex не распознает шаблон строки
Вот две строки из моих файлов журнала, которые я пытаюсь сопоставить. Я пытаюсь разделить каждую строку на четыре столбца (дата, имя хоста, команда, статус). Строка представляет собой табуляцию между датой, именем хоста, командой и состоянием в строке. Столбец состояния может содержать пробелы.
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.
([^]) \ s([^]) \ s([^]) \ s(. *)
И это мой оператор создания таблицы с результатами запроса select:
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 ответ
Я понял. hive regex распознает вкладки, используя '\t'. Я изменил выражение input.regex на это. "input.regex" = "([^]) \ t ([^]) \ t ([^]) \ t ([^].)"