目前我正在使用Sqoop将数据从HP Vertica数据库导入Hive,对于某些具有特殊字符的列,结果与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
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
数据显示在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
唯一的区别在于ADDR_STR_1_LG_NM列,在sqoop导入后,添加了一个反斜杠(\)。而其他没有反斜杠(\)的列未更改。
由于vertica中有NULL,我们必须使用--null-string' \\ N' --null-non-string' \\ N'。
我尝试了其他一些选项,例如:
--escaped-by \\ --optionally-enclosed-by '\"'
但这不起作用。
答案 0 :(得分:0)
对于sqoop支持直接连接的数据库,使用 - 直接并删除 - hive-drop-import-delims 将按原样导入数据。
This link lists DB that sqoop supported
虽然我已确认Vertica支持直接连接但未列出。