2016-06-02 2 views
0

Momentan verwende ich Sqoop, um Daten von HP Vertica Datenbank zu Hive zu importieren, für einige Spalten mit Sonderzeichen unterscheidet sich das Ergebnis von den Daten in der Vertica DB, hier ist der Code:Extra Backslash in Sqoop Import Ergebnis

sqoop import --driver com.vertica.jdbc.Driver --connect jdbc:vertica://db.foo.com/corp \ 
--username xx --P --where 'SRC_SYS_CD=xxx' --null-string '\\N' --null-non-string '\\N' \ 
--m 1 --fields-terminated-by '\001' --hive-drop-import-delims --table addr    \ 
--target-dir /xxxx/addr 

Daten in vertica DB:

SRC_SYS_CD CTRY_CD ADDR_ID ADDR_TYP_CD ADDR_STR_1_LG_NM 
123456  NZ  107560 NULL  C\ - 108 Waiatarua Road 

Daten zeigten in Hive DB:

SRC_SYS_CD CTRY_CD ADDR_ID ADDR_TYP_CD ADDR_STR_1_LG_NM 
123456  NZ  107560 NULL  C\\ - 108 Waiatarua Road 

Der einzige Unterschied besteht in der Spalte ADDR_STR_1_LG_NM, die nach dem shoop-Import einen umgekehrten Schrägstrich (\) hinzugefügt hat. Andere Spalten, die keinen umgekehrten Schrägstrich (\) haben, wurden nicht geändert.

Da in Vertica NULL ist, müssen wir --null-string '\\ N' --null-non-string '\\ N' verwenden.

Ich habe ein paar andere Optionen ausprobiert wie:

--escaped-by \\ --optionally-enclosed-by '\"' 

Aber das funktioniert nicht.

Antwort

0

Für DBs dass Sqoop Direktverbindung unterstützt, verwenden --direct und entfernen --hive-Drop-Import-delims werden Daten importieren, wie sie ist.

This link lists DB that sqoop supported

Während ich Vertica habe bestätigt mit Direct Connect unterstützt wird, aber nicht aufgeführt.