2013-01-11 17 views

Odpowiedz

11

Uważam, że Twój przypadek użycia bardzo dobrze nadaje się do używania partycji "dziennej" w tabeli ula. Jeśli "dzień" jest tylko kolumną, trudno będzie utrzymać i wyczyścić stolik.

Co partycja naprawdę oznacza w Hive jest to, że trzeba będzie katalog dla każdego „dzień”

Tak na przykład:

create table mytable (
    ... 
) partitioned by (day string) 

Więc po dodaniu danych byś na przykład następujące struktura w HDFS:

/user/hive/warehouse/mytable/day=2013-01-10 
/user/hive/warehouse/mytable/day=2013-01-11 
... 

I w każdej partycji trzeba zawartości dla tego dnia.

Następnie usuwanie starych danych staje się trywialne, można mieć na przykład zadanie cron, który działa codziennie i usuwa dane dla X dni temu (na przykład za pomocą polecenia date --date '30 days ago' +\%Y-\%m-\%d) i po prostu wykonaj następujące polecenia:

hadoop fs -rmr -skiptrash /user/hive/warehouse/mytable/day=`date --date '30 days ago' +\%Y-\%m-\%d` 

W tym momencie nadal będziesz mieć partycję w tabeli Hive, jeśli wykonasz show partitions mytable, ale każde zapytanie do partycji, na których dane zostały usunięte, nie zwróci nic. Jeśli naprawdę chcesz usunąć partycję w metastore trzeba użyć następującego polecenia:

ALTER TABLE mytable DROP PARTITION (day='xxxx-xx-xx'); 

Używam bardzo podobny wzorzec powodzeniem na chwilę i to działa dobrze.

Powiązane problemy