Hive lädt in partitionierte Tabelle

8

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.

    
Valery Yesypenko 30.10.2012, 21:58
quelle

3 Antworten

12

Ning Zhang hat eine großartige Antwort auf das Thema unter Ссылка .

Der schnelle Kontext ist der:

  1. Lade Daten einfach kopiert Daten, es liest es nicht, so dass es nicht herausfinden kann, was zu partitionieren
  2. Würde vorschlagen, dass Sie zuerst Daten in eine Zwischentabelle laden (oder eine externe Tabelle verwenden, die auf alle Dateien verweist) und dann die dynamische Einfügung der Partition zulassen, um sie in eine partitionierte Tabelle
  3. zu laden
Denny Lee 05.11.2012, 00:45
quelle
1

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.

    
Mauricio Morales 11.01.2013 14:59
quelle
0
  1. 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).

  2. 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

  3. Und schließlich einfügen, lädt ein, INSERT OVERWRITE TABLE Indien PARTITION (STAAT) Wählen Sie COL's FROM invests_stg;

  4. aus

Siehe diesen Link für Hilfe: Ссылка

    
appleboy 23.04.2017 13:48
quelle

Tags und Links