現在、私はSqoopを使用してHP VerticaデータベースからHiveにデータをインポートしていますが、特殊文字を含むカラムの場合、結果はVertica DBのデータと異なります。コードはSqoopの余分なバックスラッシュインポート結果
ですVertica DBに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
データ:
SRC_SYS_CD CTRY_CD ADDR_ID ADDR_TYP_CD ADDR_STR_1_LG_NM
123456 NZ 107560 NULL C\ - 108 Waiatarua Road
データはハイブDBに示した:
SRC_SYS_CD CTRY_CD ADDR_ID ADDR_TYP_CD ADDR_STR_1_LG_NM
123456 NZ 107560 NULL C\\ - 108 Waiatarua Road
列ADDR_STR_1_LG_NMの唯一の違いは、sqoopのインポート後にバックスラッシュ(¥)が1つ追加されたことです。バックスラッシュ(\)を持たない他の列は変更されませんでした。
頂点にNULLがあるので、 - null-string '\\ N' --null-non-string '\\ N'を使用する必要があります。
私はのようないくつかの他のオプションを試してみた:
--escaped-by \\ --optionally-enclosed-by '\"'
をしかし、それは動作しません。そのままsqoopが直接接続をサポートしていることのDBについては