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?
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.
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.