2012-03-08 12 views
6

Gram z Hive od kilku dni, ale nadal mam problem z partycją.Jak mogę podzielić tabelę na HIVE?

Zapisuję logi Apache (format Połącz) w Hadoop przez kilka miesięcy. Są one przechowywane w formacie tekstowym rzędzie rozdzielono daty (poprzez koryta): /log/rrrr/mm/dd/HH/*

przykład:

/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) 

Data w pliku combined log obserwuje ten format [10/Feb/2012: 00: 00: 00 -0800]

Jak utworzyć zewnętrzną tabelę z partycją w Hive, która używa mojej fizycznej partycji. Nie mogę znaleźć żadnej dobrej dokumentacji na temat partycji Hive. Znalazłem powiązane pytanie, takie jak:

Gdybym załadować moje dzienniki w tabeli zewnętrznej z ula, nie mogę podzielić się z czasem, ponieważ nie jest to dobry format (Feb < => 02). Nawet jeśli był w dobrym formacie, jak przekształcić ciąg "10/02/2012: 00: 00: 00 -0800" w wielu katalogu "/ 2012/02/10/00"?

Mogę w końcu użyć skryptu świni do konwersji moich logów surowych na tabele ula, ale w tym momencie powinienem po prostu używać świni zamiast ula do wykonywania moich raportów.

Odpowiedz

5

Jeśli dobrze rozumiem, pliki znajdują się w folderach na 4 poziomie od logów katalogu. W takim przypadku definiujesz swoją tabelę jako zewnętrzną ze ścieżką "logi" i podzieloną na 4 wirtualne pola: rok, miesiąc, dzień_godzinny, godzina_dzienności.

Podział jest zasadniczo wykonywany dla ciebie przez Flume.

EDYCJA 3/9: Wiele szczegółów zależy od tego, jak dokładnie Flume zapisuje pliki. Ale ogólnie rzecz biorąc, Twój DDL powinien wyglądać mniej więcej tak:

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 życzenie Dodaję do wiadomości, że po utworzeniu tabeli, Hive musi zostać powiadomiony o utworzonych partycjach. Należy to zrobić wielokrotnie, o ile Flume lub inny proces tworzy nowe partycje. Zobacz moją odpowiedź na pytanie Create external with Partition.

+0

Czy powinienem więc wyglądać jak stół? i chciałbym zrobić zapytanie, aby użyć tej partycji? – zzarbi

+0

Zobacz moje zmiany w odpowiedzi. – Olaf

+0

Będę musiał przetestować, że wrócę do ciebie tak szybko, jak tylko będę mógł – zzarbi