HIVE周期合数功能

最近需要做一个hive周期合数的功能,考虑了一下,记录一下实现实现。

实现思路:使用datax抽取一张临时表 c.o_a_l_mytable,用临时表和原表o.o_a_l_mytable进行比对,将需要纠正的数据查询出,发送KAFKA等,统一进行数据Sink。

1. INSERTUPDATE(已验证)

-- 获取insert及delete数据
select max(rowkey), max(aa), bb, max(cc), max(remark), max(timestamp), max(datatype) datatype from (
select 'DELETE_CHK' datatype, rowkey, bb from o.o_m_l_mytable a 
union all
select 'INSERT_CHK' datatype, rowkey, bb from c.o_a_l_mytable b
)m
group by bb having count(*)=1

2. UPDATE(待验证)

思路:使用LEFT JOIN, 将条件作为on的关联条件进行比对

-- 通过左连接判断对应的值cutime是否相等,连接表对应的字段为null则不相等,将数据捞出,并把原数据和现在的数据取出
with temp3 as(
SELECT m.rowkey, m.id from o.o_m_l_mytable m LEFT JOIN c.o_a_l_mytable c ON m.id=c.id and m.cutime=c.cutime
where c.cutime is null)
select m.*, 'DELETE' dbtype from o.o_m_l_mytable m JOIN temp3 ON m.rowkey=temp3.rowkey
UNION
select c.*, 'ISNERT' dbtype from  c.o_a_l_mytable c JOIN temp3 on c.id=temp3.id

 

你可能感兴趣的:(database)