2016-03-18 14 views
5

Mam tabelę partycjonowaną - z 201 partycjami. Potrzebuję znaleźć najnowszą partycję w tej tabeli i użyć jej do opublikowania moich danych. Kwerenda do wyszukania listy wszystkich partycji to:Jak znaleźć najnowszą partycję w tabeli HIVE

use db; 
show partitions table_name; 

Potrzebuję zapytania, aby znaleźć najnowsze z tych partycji. Partycje mają format

ingest_date=2016-03-09 

Próbowałem użyć max(), który dał mi zły wynik. Nie chcę przechodzić przez cały stół, wykonując

select max(ingest_date) from db.table_name; 

Dałoby mi oczekiwanego wyjście .. ale zabić cały sens posiadania partycje w 1 miejscu.

Czy istnieje bardziej wydajne zapytanie, aby uzyskać najnowszą partycję dla tabeli HIve?

+0

Możliwy duplikat [Hive: jak wyświetlić wszystkie partycje tabeli?] (Http://stackoverflow.com/questions/15616290/hive-how-to-show-all-partitions-ofa-a-table) – zero323

+0

Niestety, Hive nie ujawnia metadanych jako wirtualnych tabel - nic takiego jak baza danych "SYS" lub "INFORMATION_SCHEMA". Jedynym skutecznym sposobem wyświetlania partycji tabeli Hive jest użycie ** interfejsu API Metastore java **. Lub, aby odwrócić sposób, w jaki zorganizowane są partycje ** w HDFS ** _ (całkiem proste) _, następnie listę katalogów, mając nadzieję, że HDFS i Metastore są w 100% zsynchronizowane. –

+0

Lub, jeśli możesz wysłać zapytanie bezpośrednio do bazy Metastore * (prawdopodobnie w MySQL lub PostgreSQL) *, przeprowadź inżynierię wsteczną modelu danych i uruchom dowolny kod SQL, który Ci odpowiada. –

Odpowiedz

4

Można użyć "pokaż partycji":

hive -e "set hive.cli.print.header=false;show partitions table_name;" | tail -1 | cut -d'=' -f2 

to daje "09/03/2016" jako wyjście.

+0

dziękuję za odpowiedź ... ale szybkie pytanie na ten temat ... jest szansa, ponieważ liczba rozdzialów tabeli ula rośnie ... na przykład powiedz lakh ... czy to polecenie nadal pracować lub wykonywać w krótkim czasie? – Raja