2016-12-29 2 views
1

Ich wollte eine externe Tabelle erstellen und Daten über Schwein Skript laden. Ich folgte dem folgenden Ansatz:Schreiben von Daten mit PIG zu HIVE externe Tabelle


Ok. Erstellen Sie eine externe Hive-Tabelle mit einem Schemalayout irgendwo im HDFS-Verzeichnis. Sagen wir

create external table emp_records(id int, 
           name String, 
           city String) 
           row formatted delimited 
           fields terminated by '|' 
           location '/user/cloudera/outputfiles/usecase1'; 

Erstellen Sie einfach eine Tabelle wie oben und keine Notwendigkeit, eine Datei in dieses Verzeichnis zu laden.

Jetzt ein Schwein Skript schreiben, das wir Daten für einiges Eingabeverzeichnis lesen und dann, wenn Sie die Ausgabe dieses Schwein Skript Verwendung speichern, wie unten

A = LOAD 'inputfile.txt' USING PigStorage(',') AS(id:int,name:chararray,city:chararray); 
B = FILTER A by id > = 678933; 
C = FOREACH B GENERATE id,name,city; 
STORE C INTO '/user/cloudera/outputfiles/usecase1' USING PigStorage('|'); 

Stellen Sie sicher, dass die Zielposition und Trennzeichen und das Schema Layout final FOREACH Anweisung in dir passt Pigscript mit Hive DDL-Schema.


Mein Problem ist, wenn ich zum ersten Mal die Tabelle erstellt, es ein Verzeichnis in hdfs schafft, und wenn ich eine Datei mit Skript zu speichern versucht, wirft es eine Fehlermeldung, „Ordner bereits vorhanden ist“. Es sieht so aus, als ob pig store immer in ein neues Verzeichnis mit nur spezifischem Namen schreibt.

Gibt es eine Möglichkeit, dieses Problem zu vermeiden?

Und gibt es noch andere Attribute, die wir mit STORE-Befehl in PIG verwenden können, um jedes Mal auf eine bestimmte Verzeichnis/Datei zu schreiben?

Dank Ram

Antwort

1

YES Sie die HCatalog zur Erreichung Ihr Ergebnis nutzen können.

erinnern Sie Ihr Schwein Skript wie laufen müssen:

pig -useHCatalog your_pig_script.pig 

oder wenn Sie grunzen Shell verwenden dann verwenden Sie einfach:

pig -useHCatalog 

nächsten ist Ihr Speicherbefehl Ihre Beziehung speichern direkt in Bienenstock Tabellen verwenden:

STORE C INTO 'HIVE_DATABASE.EXTERNAL_TABLE_NAME' USING org.apache.hive.hcatalog.pig.HCatStorer(); 
Verwandte Themen