2013-07-04 3 views
0

У меня есть несогласованный файл журнала, который я хотел бы разделить с помощью Hive, используя динамическое разбиение.Hive непоследовательный входной файл

20/06/13 20:: 21: Пример файла 42,637 ВПТ CPTView :: OnInitialUpdate nRemoveAppShareQSize0 = 50000 \ п
20/06/13 20: 21: 42.638 FLW \ п
BandwidthGlobalSettings: Старый Bandwidth общие Определяет \ n

Иногда файл журнала содержит строку, которая начиналась с некоторого слова, отличного от даты. Каждая строка делится на \ n.

Я бегу команды:

CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_temp (date STRING,time STRING,severity STRING,message STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/tmp';

CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_partitioned (time STRING,severity STRING,message STRING) PARTITIONED BY (date STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/partitions';

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
FROM log_messages_temp pvs INSERT OVERWRITE TABLE log_messages_partitioned PARTITION(date) SELECT pvs.time, pvs.severity, pvs.message, pvs.date;

В результате были созданы два динамических разделов: дата = 20/06/13 и даты = BandwidthGlobalSettings: Старые

Я хотел бы определить, что Hive игнорирует строки, начинающиеся с n ot date string.

Как это сделать? Или может быть другое решение? Спасибо.

ответ

0

Я думаю, вы можете написать UDF, который будет использовать регулярное выражение, чтобы принимать только формат даты (например: 20/06/13) и отбросить всех остальных, таких как «BandwidthGlobalSettings: Old». Вы можете использовать этот UDF в своем последнем запросе, вставляя в итоговую таблицу.

Я надеюсь, что это объяснение поможет вашему требованию.

Смежные вопросы