2012-03-08 6 views
6

Я играю с Hive в течение нескольких дней, но мне все еще трудно с разделом.Как я могу разбить таблицу с помощью HIVE?

Я записывал журналы Apache (формат Combine) в Hadoop в течение нескольких месяцев. Они хранятся в текстовом формате строка, распределяли по дате (через водослив): /журналы/гггг/мм/дд/чч/*

Пример:

/logs/2012/02/10/00/Part01xx (02/10/2012 12:00 am) 
/logs/2012/02/10/00/Part02xx 
/logs/2012/02/10/13/Part0xxx (02/10/2012 01:00 pm) 

Дату в файле combined log имеет следующую этот формат [10/Feb/2012: 00: 00: 00 -0800]

Как создать внешнюю таблицу с разделом в Hive, использующую мой физический раздел. Я не могу найти хорошую документацию на разделе Hive. Я нашел родственный вопрос, таких как:

Если я загружаю мои журналы во внешней таблице с Улей, я не могу разделить со временем, так как это не хороший формат (Февраль < => 02). Даже если бы он был в хорошем формате, как мне преобразовать строку «10/02/2012: 00: 00: 00 -0800» в несколько каталогов «/ 2012/02/10/00»?

В конечном итоге я мог бы использовать скрипт свиньи для преобразования моих сырых журналов в таблицы улья, но в этот момент я должен просто использовать свиньи вместо улья, чтобы делать свои сообщения.

ответ

5

Если я правильно понял, у вас есть файлы в папках на 4 уровня в глубину от журналов каталога. В этом случае вы определяете свою таблицу как внешнюю с помощью «журналов» и разделяете на 4 виртуальных поля: год, месяц, день_о__мех, час_of_day.

Разделение по существу сделано для вас Flume.

EDIT 3/9: Много деталей зависит от того, как именно Flume записывает файлы. Но в общих чертах, ваш DDL должен выглядеть примерно так:

CREATE TABLE table_name(fields...) 
PARTITIONED BY(log_year STRING, log_month STRING, 
    log_day_of_month STRING, log_hour_of_day STRING) 
format description 
STORED AS TEXTFILE 
LOCATION '/your user path/logs'; 

EDIT 3/15: Per zzarbi запроса, я добавляю к сведению, что после того, как таблица создана, Улей должен быть проинформирован о создании разделов. Это нужно делать несколько раз, пока Flume или другой процесс создает новые разделы. См. Мой ответ на вопрос Create external with Partition.

+0

Таким образом, я бы сделал создание таблицы? и я бы сделал запрос на использование этого раздела? – zzarbi

+0

См. Мои изменения в ответе. – Olaf

+0

Мне нужно будет проверить, что я вернусь к вам, как только смогу – zzarbi