Hive-Tabelle-partition mit Spalte in der Mitte
Ich soll eine Tabelle erstellen, mit Partitionen aus vorhandenen Dateien auf Hadoop. Die datevalue auf die ich brauche, um partition ist verfügbar in den Dateien, aber die datevalue-Spalte position ist nicht die Letzte. Es ist in der Mitte. Wie kann ich die Tabelle erstellen, für die das gleiche?
Hier ist das Beispiel:
1 John 2012-01-10 Miller
2 Austin 2012-02-22 Powers
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen wir ein Beispiel: Sie wollen eine partitionierte hive-Tabelle mit drei Spalten
(id INT, fname STRING, dt STRING, lname STRING)
woid
,fname
,lname
sind Spalten, die Speicherung eines integer id, string name, Vorname, und ein string Nachname respecitvely und dt ist eine partition Spalte vom Typ string mit Datum im yyyy-MM-dd format. Erstellen Sie eine Tabelle wie diese würden Sie einen Befehl wie:Beim einfügen von Daten in diese Tabelle (per INSERT-Befehl ÜBERSCHREIBEN, sagen) und gehen überprüfen Sie die HDFS-Verzeichnis (/usr/hive/warehouse/my_table), würden Sie feststellen, dass die Daten in Verzeichnisse; ein Verzeichnis pro partition. Der name des Verzeichnisses, wäre so etwas wie dt=2012-01-01 oder dt=2012-02-22. In diesen Verzeichnissen würden die tatsächlichen Daten in welchem format auch immer Sie es ausgewählt hatten, um gespeichert werden. Die partition Spalte ist nicht gespeichert, diese Daten; es ist ein virtuellen Spalte, entziffert der partition mit dem Verzeichnis Ihrer Daten vorhanden ist.
Nun zu deiner Frage. Da Partitionierungs-Spalte ist eine virtuelle Spalte, die Sie nicht setzen können einen partitionierten Hive-Tabelle oben Ihre Daten, wie es ist (unabhängig davon, ob Ihr zu-sein-Partitionierungs-Spalte vorhanden ist, in der Mitte der Datei oder am Ende). Sie müssen das entsprechende Verzeichnis-Struktur vorhanden sein, in HDFS für die Partitionierung zu arbeiten. Sie möchten zum erstellen einer staging-Tabelle ist nicht partitioniert.
Dann verwenden Sie diese staging-Tabelle als Quelle für das Auffüllen Ihrer partitionierten Tabelle mithilfe der Dynamischen Partitionierung. Sie können mit einem Befehl wie dem folgenden: die
Dieser Befehl liest die Daten aus der staging-Tabelle und fügen Sie es in die partitionierte Tabelle erstellen die entsprechende Verzeichnis-Struktur für Sie auf dem HDFS.
Referenzen:
- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ - DDL
- https://cwiki.apache.org/Hive/dynamicpartitions.html