Hive中选出最新一个分区中新增和变化的数据

0. 相关文章链接

   开发随笔文章汇总  

1. 为什么要获取最新的数据

        当为应用后台提供数据协助时(比如通过近段时间的数据用了计算用户特征时),在大数据是计算所有的有行为的用户,但是这些用户的特征不是都有变化,这时传送给应用后台的数据只需要传输有变化和新增的即可,并使用根据主键更新的模式传输数据,这样能减少数据的传输。

2. 怎么获取最新的数据

一般这种情况下,在大数据数仓中这样的表必须要设置成分区表,然后今天的数据和昨天的数据存储在不同分区中,再添加一个脚本对比这2个分区的数据,求出新增的和变化的。

主要知识点为使用 distinct 求出变化的,要在今天的分区中有数据而昨天的分区中没数据求出新增的,具体脚本如下:

drop table if exists temp_dtl_increment_new_user_feature;
create table temp_dtl_increment_new_user_feature as

-- 算出更改的(使用distinct对需要获取的字段去重,这样获取的数据都不一样的,然后对用户id进行聚合,当同一个用户id存在2条数据,即该用户的特征有更改)
select
    user_id
from(
        select
            distinct user_id,
            user_belong
        from
            yishou_daily.dtl_new_user_feature
        where
            dt 
                between 
                    to_char( dateadd( to_date1(${bdp.system.bizdate}, 'yyyymmdd'), -1, 'dd' ), 'yyyymmdd' )
                    and 
                    ${bdp.system.bizdate}
)
group by
    user_id
having
    count(*) > 1
    
union


-- 算出新增的(在今天的分区中有数据而昨天的分区中没数据,即是新增的)
select
    a.user_id
from
    (
        select
            user_id
        from
            yishou_daily.dtl_new_user_feature
        where
            dt = ${bdp.system.bizdate}
    ) a
    left join (
        select
            user_id
        from
            yishou_daily.dtl_new_user_feature
        where dt = to_char( dateadd( to_date1(${bdp.system.bizdate}, 'yyyymmdd'), -1, 'dd' ), 'yyyymmdd' )
    ) b on a.user_id = b.user_id
where
    b.user_id is null;
    


-- 使用特征表里面的新的分区,内连接上述求出的新增的和更改的用户表,可以求出对应的用户的特征
select
    a.user_id,
    user_belong
from yishou_daily.dtl_new_user_feature a

inner join temp_dtl_increment_new_user_feature b 
on a.user_id = b.user_id

where
    a.dt = ${bdp.system.bizdate};

注:其他相关文章链接由此进 ->   开发随笔文章汇总 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电光闪烁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值