目前我正在使用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数据库中的数据:
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\u str\u 1\u lg\u nm列,在sqoop导入之后,添加了一个反斜杠(\)。而其他没有反斜杠(\)的列没有更改。
因为vertica中有null,所以必须使用--null string'\n'--null non string'\n'。
我尝试过其他一些选择,比如:
--escaped-by \\ --optionally-enclosed-by '\"'
但这行不通。
1条答案
按热度按时间egmofgnx1#
对于sqoop支持直接连接的dbs,使用--direct和remove--hive drop import delims将按原样导入数据。
此链接列出了sqoop支持的数据库
虽然我已经确认vertica支持direct connect,但没有列出。