2016-05-26 1 views
0

J'utilise Hive v1.2.1 avec Tez. J'ai une table partitionnée externe. Les partitions sont toutes les heures et de la forme p = aaaa_mm_dd_hh. La situation est que ces répertoires de partition dans hdfs sont susceptibles d'être supprimés parfois. Après leur suppression, hive contient toujours les métadonnées pour cette partition, et une commande 'show partitions' liste toujours la partition dont le répertoire a été supprimé de hdfs. Normalement, cela ne devrait pas causer de problème, et une requête de sélection pour la partition (dont le répertoire a été supprimé) serait simplement résulter d'un resultset vide:Les requêtes agrégées échouent dans la ruche si le répertoire de partition n'existe pas

hive> select * from test_tab where p='2015_01_01_01'; 
OK 
Time taken: 2.168 seconds 

Cependant, sur l'exécution de toute requête globale contre la même partition, Je reçois une erreur:

hive> select count(*) from test_tab where p='2015_01_01_01'; 
FAILED: SemanticException java.io.FileNotFoundException: File hdfs://localhost:8020/user/root/data/test_db/test_tab/p=2015_01_01_01 does not exist. 

J'ai besoin d'avoir le même comportement dans les requêtes agrégées que dans d'autres requêtes select. C'est probablement un bug dans la ruche. Toute solution de contournement pour ce problème serait appréciée. Meilleures salutations.

+0

J'encountred ce comportement lorsque vous travaillez avec HCAT et je pense que ce ne est pas un bug, car dans le comportement normal, l'utilisateur doivent déposer des partitions avant supprimer leurs dossiers. – 54l3d

+0

_Hive s'en fiche si un répertoire de partition n'existe pas pour une partition ou s'il ne contient aucun fichier. Dans les deux cas, vous n'obtiendrez aucun résultat pour une requête qui filtre pour la partition_ - Cité dans Programming Hive: [lien] (https://www.safaribooksonline.com/library/view/programming-hive/9781449326944/ch04 .html). Si Hive n'est pas censé se soucier si le répertoire de partition existe, pourquoi l'erreur dans la requête agg? Cela me fait penser que c'est un bug –

Répondre

0

run ci-dessous commande

msck repair table test_tab;

puis exécutez votre requête

+0

Cela ne supprimera pas les partitions pointant vers les fichiers supprimés manuellement sur HDFS. Il ajoute simplement le dossier de partitions créé manuellement au métastore Hive. – cheseaux