web-dev-qa-db-fra.com

Comment trouver la partition la plus récente dans la table Hive

J'ai une table partitionnée - avec 201 partitions. Je dois trouver la dernière partition dans cette table et l’utiliser pour post-traiter mes données. La requête pour trouver la liste de toutes les partitions est:

use db;
show partitions table_name; 

J'ai besoin d'une requête pour trouver la dernière de ces partitions. Les partitions sont au format 

ingest_date=2016-03-09

J'ai essayé d'utiliser max (), ce qui m'a donné un résultat erroné. Je ne veux pas parcourir toute la table en faisant 

select max(ingest_date) from db.table_name; 

Cela me donnerait le résultat attendu .. mais détruit tout l'intérêt d'avoir des partitions à la 1ère place.

Existe-t-il une requête plus efficace pour obtenir la dernière partition pour la table Hive? 

9
underwood

Vous pouvez utiliser "show partitions":

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

Cela vous donnera "2016-03-09" en sortie.

5
pkgajulapalli

Si vous souhaitez éviter d'exécuter les "partitions" dans Hive Shell comme suggéré ci-dessus, vous pouvez appliquer un filtre à votre requête max (). Cela évitera de faire une analyse complète et les résultats devraient être assez rapides!

select max(ingest_date) from db.table_name where ingest_date>date_add(current_date,-3) n'analysera que 2 ou 3 partitions.

1
Kash