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.