Ich habe eine Protokolldatei in HDFS, Werte werden durch Komma getrennt. Zum Beispiel:
2012-10-11 12:00,opened_browser,userid111,deviceid222
Nun möchte ich diese Datei in die Hive-Tabelle laden, die Spalten "timestamp", "action" und partitioniert von "userid", "deviceid" hat. Wie kann ich Hive bitten, die letzten beiden Spalten in der Protokolldatei als Partition für die Tabelle zu verwenden? Alle Beispiele e.g. "hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');"
erfordern die Definition von Partitionen im Skript, aber ich möchte, dass Partitionen automatisch aus der HDFS-Datei eingerichtet werden.
Die einzige Lösung besteht darin, eine nicht partitionierte Zwischentabelle mit allen 4 Spalten zu erstellen, sie aus der Datei aufzufüllen und dann eine INSERT into first_table PARTITION (userid,deviceid) select from intermediate_table timestamp,action,userid,deviceid;
zu erstellen, aber das ist eine zusätzliche Aufgabe und wir werden 2 sehr ähnliche Tabellen haben. Oder wir sollten Erstellen Sie eine externe Tabelle als Zwischenstufe.
Ning Zhang hat eine großartige Antwort auf das Thema unter Ссылка .
Der schnelle Kontext ist der:
Ich habe an genau diesem Szenario gearbeitet, aber stattdessen haben wir separate HDFS-Datendateien für jede zu ladende Partition erstellt.
Da unsere Daten von einem MapReduce-Job stammen, haben wir MultipleOutputs in unserer Reducer-Klasse, um die Daten in die entsprechende Partitionsdatei zu multiplexen. Danach muss nur noch das Skript mit der Partition aus dem HDFS-Dateinamen erstellt werden.
Wie in @Denny Lees Antwort erwähnt, müssen wir eine Staging-Tabelle einbeziehen (invests_stg) verwaltet oder extern und dann INSERT von Staging-Tabelle in partitionierte Tabelle (lädt in diesem Fall).
Stellen Sie sicher, dass diese beiden Eigenschaften auf Folgendes festgelegt sind: SET hive.exe.dynamoc.partition = Wahr SET hive.exec.dynamic.partition.mode = nicht-strikt
Und schließlich einfügen, lädt ein, INSERT OVERWRITE TABLE Indien PARTITION (STAAT) Wählen Sie COL's FROM invests_stg;
Siehe diesen Link für Hilfe: Ссылка