Hive数仓筛选出2秒内可能重复下单的订单id列表

背景:

    因为弱网缘故,公司的业务系统对下单的防重处理没有完全防住,导致了可能出现重复单情况。面对海量订单人工进行全部排查十分困难且是不现实的,所以在此背景下,基于全量数据,写了一个HiveSQL来筛选出可能重复订单数据。然后再对指定订单id查询订单明细进行人工确认即可找出准确的重复单,再进行操作(可能退掉其中一单)。

 

-- 同一门店、同一商品金额,下单时间相差2秒内的订单ids
select 
shop_id,
p_sp_amt,
concat(date_format(created_at,'yyyy-MM-dd HH:mm'),':',if(floor(date_format(created_at,'ss')/2)*2 < 10,concat('0',floor(date_format(created_at,'ss')/2)*2),floor(date_format(created_at,'ss')/2)*2)) createtime,
count(1) num,
collect_set(id) order_ids
from ods_t.o_order_header
group by shop_id,p_sp_amt,concat(date_format(created_at,'yyyy-MM-dd HH:mm'),':',if(floor(date_format(created_at,'ss')/2)*2 < 10,concat('0',floor(date_format(created_at,'ss')/2)*2),floor(date_format(created_at,'ss')/2)*2))
having count(1) > 1
order by shop_id,createtime

      如果是同一秒内的重复单筛选,将createtime前面的公式替换为:  date_format(created_at,'yyyy-MM-dd HH:mm:ss'), group by同步替换。

     2秒及以上判重,只需将上面的2替换为想要判重的数字即可。

     希望以上对读者有所帮助。

 

你可能感兴趣的:(hive,大数据,sql,大数据,hive,订单,防重,hadoop)