Sqoop导出(Hive->mysql)更新及变化

Sqoop导出(Hive->mysql)

在采用Sqoop脚本导出至mysql,数据需要更新及变化
由于指标数据量不大,指标各项数据都会变化,最初采用的是在导入之前,先将MySQL目标表清空
在这里插入图片描述

清空表语句有两种,一个是delete,一个是truncate
如果MySQL设置了主键自增
使用delete后,会接着上次的继续递增,例:上一次导入主键id为1-100,在delete表之后,再次导入,则id变为101-200
使用truncate,则主键自增id会再从1开始
后来考虑到每天再导入之前清空,然后再重新导入可能对MySQL性能造成一定的影响,尝试使用Sqoop的更新及变化导入
目标:更新数据库中已存在的数据行,或者如果行尚未存在,也可以插入行
采用–update-mode参数指定allowinsert模式,默认为update only
踩坑:不更新,只新增(例:原来有10行,在导入后,直接是在后面追加10行,没有更新重复的行)
MySQL的表有自增主键id(建表不是我们这边建的…),hive表中没有id字段
hive表中没有主键,没有唯一非空字段,那么在使用allowinsert模式的时候,即使指定了–update-key的字段,那么在进行导出的时候,Sqoop也不会去检查,而是直接选择insert语句进行插入
–update-key指定的字段在数据库表中必须是唯一非空的(简单理解主键就行),这样此模式才能实现数据库表中已存在的数据进行更新,不存在的数据进行插入。否则这个模式会将所有数据都以insert语句插入数据库中。
解决:由于在MySQL表中有自增的主键id,hive表中没有id字段
在hive的表中使用row_number over(orderby ****)as id,增加id字段,再使用–update-key指定id,解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值