数据同步之关系型数据库删数据解决方案

之前介绍了从oracle,mysql,pg等数据库增量同步数据到hive中,并且能使关系型数据库中的数据修改之后,hive也能与之一致。

但是之前的方案,只能解决源数据端的数据修改同步一致性的问题,而不能解决源数据端删除数据一致性问题。

下面给出一个解决方案以供参考:

如下图所示oracle和hive中正常情况下数据同步应该保持一致:
这里写图片描述

但是oracle源端数据库进行了数据删除,删除了zhangsan这一条数据,导致使oracle中的数据比hive中的数据少:
这里写图片描述

如果要保持hive和oracle中数据一致,该怎么做呢?(该表的字段特别多比如有200个字段,数据量也特别大,所以重新全量同步不行)

我们可以只同步oracle源表的主键字段到hive中的一个临时表中(只同步主键字段时间很快,实测oracle一个表有300G数据,只同步主键,大概耗时2小时),将hive中的表和这个临时表做inner join,然后将结果overwrite 到最终的这个hive表中即可实现。
如下图:
这里写图片描述

insert overwrite table lijie_table
select 
    a.id,a.name.a.addr 
from
    lijie_table a
inner join
    lijie_table_tmp b
on
    a.id = b.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值