2016-07-30 7 views
0

Ich führte ein Experiment durch. Ich habe einen externen Tisch und partitioniert ihn nach Jahr, Monat, Tag und Stunde. Wenn ich INSERT OVERWRITE verwende und eine bestimmte Partition für die Daten vorschlage, wird die entsprechende Ordnerstruktur erstellt. z.B.Hive identifiziert manuell erstellte Ordner nicht als Partitionen

INSERT OVERWRITE TABLE default.testtable PARTITION(year = 2016, month = 7, day=29, hour=18) 
SELECT tbl.c1 FROM (select 'Test' as c1) as tbl; 

Diese Tabelle hat nur eine String-Spalte, aber das ist nicht sehr wichtig.

So erstellt die obige Anweisung entsprechende Ordnerstruktur. Wenn ich jedoch manuell versuche, eine ähnliche Struktur zu erstellen und eine SELECT-Abfrage auszulösen, gibt die Struktur keine Daten in manuell erstellten Ordnern zurück. In Bezug auf die Struktur habe ich sichergestellt, dass manuell erstellte Ordner genauso aussehen wie automatisch erstellte Ordner mit einer 0-Datei auf jeder Hierarchieebene. Liegt es daran, dass, wenn wir Daten in eine bestimmte Partition einfügen, Hive diese Partition erstellt (wenn sie nicht existiert) und die Partitionsinformationen auch in ihrer Metasorte speichert? Weil das die einzige Sache ist, die umgangen würde, wenn ich Ordnerstruktur manuell erstelle.

Antwort

0

Ich habe gerade herausgefunden, dass nur durch manuelles Erstellen eines Ordners Hive nicht beginnen wird, es als eine Partition zu behandeln. Ich muss Hive es mit als Partition behandeln erzwingen ALTER TABLE PARTITION Anweisung ADD: -

ALTER TABLE default.testtable ADD IF NOT EXISTS PARTITION (year = 2016, month = 7, day=29, hour = 18); 

Danach, wenn ich auf dem Tisch Select-Anweisung Feuer, ich bin in der Lage, die manuell erstellten Daten in diesem Ordner zu sehen.

Verwandte Themen