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

需求:之前数据从生产系统抽取到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日志警告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值