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.