app端-用户连续活跃区间记录表开发

-- 用户连续活跃区间记录表
CREATE TABLE dws.mall_app_uac_range(
    guid              bigint  -- 用户id
    ,first_login_dt   string  -- 首访日期
    ,range_start_dt   string  -- 区间起始日期
    ,range_end_dt     string  -- 区间结束日期
)
partitioned by (dt string)
stored as orc
tblproperties('orc.compress'='snappy')
;

--从哪里计算  T-1日的连续活跃区间表  T日的日活表
--计算逻辑
     -- 已封闭区间不用动;
     -- 未封闭区间得看该用户在T日的日活中是否出现,如出现,不用动;否则,将区间封闭掉
     -- 如果一个用户的区间记录中全部都是已封闭区间,但该用户在T日活跃了,则要为它生成一条新的区间记录
     -- 如果日活中某用户在区间记录表中不存在,则为该用户生成新的区间记录

/* 站在2022-03-28日的角度
   1,2022-01-01,2022-01-01,2022-02-10    1,0
   1,2022-01-01,2022-02-14,9999-12-31    1,0
   2,2022-02-03,2022-02-03,2022-02-12
   3,2022-02-03,2022-02-03,2022-02-13    3,0
   4,2022-02-04,2022-02-04,9999-12-31
                                         5,1

   2022-03-29日的日活数据
   1,0
   3,0
   5,1

   得出2022-03-29日的区间记录表
   1,2022-01-01,2022-01-01,2022-02-10
   1,2022-01-01,2022-01-14,9999-12-31
   2,2022-02-03,2022-02-03,2022-02-12
   3,2022-02-03,2022-02-03,2022-02-13
   3,2022-02-03,2022-03-29,9999-12-31
   4,2022-02-04,2022-02-04,2022-03-28
   5,2022-02-16,2022-03-29,9999-12-31


   -- 1.先拿T-1区间表  FULL JOIN  T日活
   -- 2.再从T-1区间表中,筛选出:不存在未封闭区间的人   JOIN  T日活
   -- 合并1、2 两部分结果

*/

with rng as (
    SELECT
        guid,
        first_login_dt,
        range_start_dt,
        range_end_dt
    FROM dws.mall_app_uac_range
    WHERE dt='2022-03-28'
),dau as (
    SELECT
        guid,
        is_new
    FROM dws.mall_app_dau
    WHERE dt='2022-03-29'
)
INSERT INTO TABLE dws.mall_app_uac_range PARTITION (dt='2022-03-29')
SELECT
    nvl(rng.guid,dau.guid) as guid,
    nvl(rng.first_login_dt,'2022-03-29') as first_login_dt,
    nvl(rng.range_start_dt,'2022-03-29') as range_start_dt,
    case
        when dau.guid is null and rng.range_end_dt='9999-12-31' then '2022-03-28'  --该用户今天没来,该情况需要封闭区间
        when dau.guid is not null and rng.range_end_dt is null then '9999-12-31'
        else rng.range_end_dt
        end as range_end_dt
FROM
     rng
FULL JOIN
     dau
ON rng.guid=dau.guid
UNION  ALL

SELECT
    t1.guid as guid,
    t1.first_login_dt as first_login_dt,
    '2022-03-29' as range_start_dt,
    '9999-12-31' as range_end_dt
FROM
    (
    SELECT
        guid,
        first_login_dt
    FROM rng
    GROUP BY guid,first_login_dt
    HAVING max(range_end_dt) != '9999-12-31'
    ) t1
JOIN
    dau
ON t1.guid=dau.guid
;
-- 算完最新区间表后,可以立即删除前日区间表分区
ALTER TABLE dws.mall_app_uac_range DROP PARTITION (dt='2022-03-28');

课程简介:  本项目课程是一门极具综合性和完整性的大型项目课程;课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。 本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。  拒绝demo,拒绝宏观抽象,拒绝只讲不练,本课程高度揉和理论与实战,并兼顾各层次的学员,真正从0开始,循序渐进,每一个步骤每一个环节,都会带领学员从需求分析开始,到逻辑设计,最后落实到每一行代码,所有流程都采用企业级解决方案,并手把手带领学员一一实现,拒绝复制粘贴,拒绝demo化的实现。并且会穿插大量的原创图解,来帮助学员理解复杂逻辑,掌握关键流程,熟悉核心架构。   跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建......逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。  由于本课程不光讲解项目的实现,还会在实现过程中反复揉和各种技术细节,各种设计思想,各种最佳实践思维,学完本项目并勤于实践的话,学员的收获将远远超越一个项目的具体实现,更能对大型数据系统开发产生深刻体悟,对很多技术的应用将感觉豁然开朗,并带来融会贯通能力的巨大飞跃。当然,最直接的收获是,学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER课程模块: 1. 数据采集:涉及到埋点日志flume采集系统,sqoop业务数据抽取系统等; 2. 数据预处理:涉及到各类字典数据构建,复杂结构数据清洗解析,数据集成,数据修正,以及多渠道数据的用户身份标识打通:ID-MAPPING等;3. 数据仓库:涉及到hive数仓基础设施搭建,数仓分层体系设计,数仓分析主题设计,多维分析实现,ETL任务脚本开发,ETL任务调度,数据生命周期管理等;4. 数据治理:涉及数据资产查询管理,数据质量监控管理,atlas元数据管理系统,atlas数据血缘管理等;5. 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签的机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构设计,技术选型,底层存储实现,Presto查询引擎搭建,数据服务接口开发等;7. 数据服务:涉及数据服务的整体设计理念,架构搭建,各类数据访问需求的restapi开发等;课程所涉及的技术: 整个项目课程中,将涉及到一个大型数据系统中所用到的几乎所有主要技术,具体来说,包含但不限于如下技术组件:l Hadoopl Hivel HBasel SparkCore /SparkSQL/ Spark GRAPHX / Spark Mllibl Sqoopl Azkabanl Flumel lasal Kafkal Zookeeperl Solrl Prestop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值