Umgang mit Feldern in Anführungszeichen (CSV) beim Importieren von Daten aus S3 in DynamoDB mit EMR / Hive
Ich versuche, mit EMR - /Hive importieren von Daten aus S3 in DynamoDB. Meine CSV-Datei hat Felder, die sind eingeschlossen in doppelten Anführungszeichen und durch Komma getrennt.
Beim anlegen der externen Tabelle in hive, ich bin in der Lage, geben Sie Trennzeichen wie Komma, aber wie kann ich festlegen, dass Felder, die sind eingeschlossen in Anführungszeichen?
Wenn ich nicht angeben, ich sehe, dass die Werte in DynamoDB sind aufgefüllt, die innerhalb von zwei doppelten Anführungszeichen ""Wert"" das scheint falsch zu sein.
Ich bin mit dem folgenden Befehl create external table. Gibt es eine Möglichkeit, um anzugeben, dass die Felder eingeschlossen in doppelten Anführungszeichen?
CREATE EXTERNAL TABLE emrS3_import_1(col1 string, col2 string, col3 string, col4 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '","' LOCATION 's3://emrTest/folder';
Irgendwelche Vorschläge würden geschätzt.
Dank
Jitendra
InformationsquelleAutor der Frage RandomQuestion | 2012-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie stecken mit der CSV-Datei-format, müssen Sie eine benutzerdefinierte SerDe; und hier sind einige die Arbeit basiert auf der opencsv library.
Aber, wenn Sie können, ändern Sie die Quell-Dateien, können Sie entweder wählen Sie ein neues Trennzeichen, so dass die angegebenen Felder sind nicht notwendig (gut Glück), oder schreiben Sie, um zu entkommen eingebettete Kommas mit einem einzigen escape-Zeichen, z.B. '\', die angegeben werden können in das FORMAT ZEILE mit ENTKAM DURCH:
InformationsquelleAutor der Antwort libjack
Ich war auch fest mit dem gleichen Problem, wie meine Felder sind, die in doppelten Anführungszeichen und getrennt durch Semikolon(;). Meine Tabelle name employee1.
Also suchte ich mit links und ich habe die perfekte Lösung für diese.
Wir haben die Verwendung von serde. Bitte laden Sie serde Glas mit diesem link : https://github.com/downloads/IllyaYalovyy/csv-serde/csv-serde-0.9.1.jar
dann Folgen Sie unten Schritte mit hive prompt :
und laden Sie dann Daten von Ihr bestimmten Pfad mit folgenden Abfrage:
und führen Sie dann :
Nun sehen Sie die Magie. Danke.
InformationsquelleAutor der Antwort Cast_A_Way
Folgenden code gelöst gleiche Art von problem
InformationsquelleAutor der Antwort Shankar
Hive enthält jetzt eine
OpenCSVSerde
was richtig analysieren diese zitiert Felder ohne zusätzliche Gläser oder fehleranfällig und langsam regex.ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
InformationsquelleAutor der Antwort Ben Doerr
Hive nicht unterstützt quoted strings direkt aus der box. Es gibt zwei Ansätze zur Lösung diese:
Schneller (und wohl auch vernünftigeren) Ansatz ist zu ändern Sie Ihren ersten export zu verwenden ein anderes Trennzeichen, so können Sie vermeiden, quoted strings. Auf diese Weise können Sie sagen, Hive verwenden Sie eine externe Tabelle mit einem tab oder pipe-Trennzeichen:
InformationsquelleAutor der Antwort Jeremiah Peschka
Verwenden Sie die
csv-serde-0.9.1.jar
- Datei in Ihrem hive-query finden Sie unterhttp://illyayalovyy.github.io/csv-serde/
InformationsquelleAutor der Antwort Amit
Kann es mehrere Lösungen für dieses problem.
Lesen Sie mehr auf http://grokbase.com/t/hive/user/117t2c6zhe/urgent-hive-not-respecting-escaped-delimiter-characters
InformationsquelleAutor der Antwort minhas23