2016-05-26 12 views
0

Ich verwende Hive v1.2.1 mit Tez. Ich habe eine externe partitionierte Tabelle. Die Partitionen sind stündlich und haben die Form p = yyyy_mm_dd_hh. Die Situation ist, dass diese Partitionsverzeichnisse in hdfs wahrscheinlich irgendwann gelöscht werden. Nach dem Löschen enthält die Struktur immer noch die Metadaten für diese Partition, und der Befehl "Partitionen anzeigen" listet immer noch die Partition auf, deren Verzeichnis von hdfs gelöscht wurde. Normalerweise ist dies nicht wahrscheinlich ist, irgendein Problem zu verursachen, und eine Auswahlabfrage für die Partition (dessen Verzeichnis gelöscht wurde) würde einfach ein leeres Resultset führen:Aggregierte Abfragen schlagen fehl, wenn das Partitionsverzeichnis nicht existiert

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

jedoch auf jede Aggregat-Abfrage für die gleiche Partition ausgeführt wird, Ich erhalte einen Fehler:

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. 

Ich brauche das gleiche Verhalten in Aggregatabfragen wie in anderen ausgewählten Abfragen. Dies ist wahrscheinlich ein Fehler im Bienenstock. Alle Umgehungshinweise für dieses Problem sind willkommen. Freundliche Grüße.

+0

ich dieses Verhalten encountred haben, wenn sie mit HCAT arbeiten, und ich denke, es ist nicht ein Fehler, weil in normalen Verhalten, Benutzer Partitionen löschen, bevor Löschen ihrer Ordner. – 54l3d

+0

_Hive ist es egal, ob ein Partitionsverzeichnis für eine Partition nicht existiert oder ob es keine Dateien hat. In beiden Fällen erhalten Sie nur keine Ergebnisse für eine Abfrage, die nach der Partition filtert - Zitat aus Programming Hive: [link] (https://www.safaribooksonline.com/library/view/programming-hive/9781449326944/ch04 .html). Wenn Hive nicht darauf achten soll, ob das Partitionsverzeichnis existiert, warum der Fehler in der Agg-Abfrage? Dies lässt mich glauben, dass es sich um einen Fehler handelt. –

Antwort

0

Lauf unter Befehl

msck repair table test_tab;

und führen Sie Ihre Anfrage

+0

Dadurch werden die Partitionen, die auf die manuell gelöschten Dateien auf HDFS verweisen, nicht entfernt. Es fügt nur manuell erstellten Partitionen Ordner zu Hive-Metastore. – cheseaux