您的位置:首页 > 数据库 > SQL

sqoop oracle2hive 通过表名表抽取 和 通过sql抽取 列切分异常

2018-03-09 14:18 489 查看
需求:之前数据从生产系统抽取到hive数据仓库都是全表抽取,然后在仓库接口层 或者在ods前置机上处理。因为项目需要 ,部分全量表是直接按表名抽取 ,部分增量 通过sql 添加where 条件来筛选数据。环境:sqoop 版本Sqoop 1.4.6-cdh5.12.1 hadoop使用cdh版本现象:sqoop 使用SQL抽取 sqoop import --connect jdbc:oracle:thin:@IP:1521:sid --username 用户名 --password 密码 --hive-overwrite --hive-database atg --hive-table dwi_dcspp_shipitem_rel_m --hive-import --delete-target-dir --null-string '' --null-non-string '' --fields-terminated-by \001 --hive-drop-import-delims --target-dir /user/hive/warehouse/atg.db/dwi_dcspp_shipitem_rel_m/m=2017-05 --query "from UATCORE.DCSPP_SHIPITEM_REL SIR where \\\$CONDITIONS and SIR.COMMERCE_ITEM_ID in (select OI.COMMERCE_ITEMS from UATCORE.DCSPP_ORDER_ITEM OI where \\\$CONDITIONS and OI.Order_Id in (select DCSO.Order_Id from UATCORE.DCSPP_ORDER DCSO where \\\$CONDITIONS and TO_CHAR(DCSO.LAST_MODIFIED_DATE, 'YYYY-MM') = "$thisMonth" ))"
数据是导入过来了 ,但是切分异常 ,都在第一列里。


查看 hive 仓库导入的文件 ,写到本地 用vim 查看,发现分隔符有乱码,因为是指定的分隔符,以前也没有出现问题。所以不确定 是oracle所在的系统问题 还是sqoop转化的java文件有问题。或者是hive所在的linux系统有问题。
时间紧急,我用参数排除法 最终发现删除--fields-terminated-by \001 用默认的就正常了。


时间紧没有去探查sqoop生成的java文件 应该问题在这里可以找到答案。
--hive-import 是使用默认分割符  可能是,也可能是\001 最好指定分隔符。不用此参数。不用理会hive日志警告。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐