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 ([^].)"

Другие вопросы по тегам