2016-03-18 3 views
5

У меня есть секционированный стол - с 201 разделом. Мне нужно найти последний раздел в этой таблице и использовать его для публикации моих данных. Запрос для поиска списка всех разделов:Как найти последний раздел в таблице HIVE

use db; 
show partitions table_name; 

Мне нужен запрос, чтобы найти последний из этих разделов. Перегородки находятся в формате

ingest_date=2016-03-09 

Я пробовал использовать max(), что дало мне неправильный результат. Я не хочу, чтобы пройти через всю таблицу, делая

select max(ingest_date) from db.table_name; 

Это дало бы мне ожидаемый выход .. но убить весь смысл наличия перегородок в 1-ом месте.

Есть ли более эффективный запрос для получения последнего раздела для таблицы HIve?

+0

Возможный дубликат [Hive: как показать все разделы таблицы?] (Http://stackoverflow.com/questions/15616290/hive-how-to-show-all-partitions-of-a-table) – zero323

+0

Увы, Hive не предоставляет метаданные в виде виртуальных таблиц - ничего похожего на базу данных 'SYS' или' INFORMATION_SCHEMA'. Единственный эффективный способ перечислить разделы таблицы Hive - это использовать API-интерфейс ** Metastore java **. Или реверсировать процесс упорядочения разделов ** в HDFS ** _ (довольно просто на самом деле) _ затем перечислить каталоги, надеясь, что HDFS и Metastore будут синхронизированы на 100%. –

+0

Или, если вы можете напрямую запросить базу данных Metastore * (возможно, в MySQL или PostgreSQL) *, перепроектировать модель данных и запустить любой SQL, который вам нравится. –

ответ

4

Вы можете использовать "показать разделы":

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

Это даст вам "2016-03-09" в качестве выходного сигнала.

+0

спасибо за ответ ... но быстрый вопрос вокруг этого .... есть шанс, так как количество разделов таблицы улей растет ... например, говорят, что lakh ... будет ли эта команда еще работать или выполнять в короткие сроки? – Raja