数据建模案例

本文探讨了在数据量亿级、日增量千万级的背景下,如何进行数据建模以实现快速查询日、月、季、年的交易额和用户数。通过ODS、DWD、DWS和DWM层的构建,以及粒度、指标的设计,实现了历史累积汇总。DIM层则关注一致性维度建设,如时间、用户维度表。增量更新思路包括t-2的DWM与t-1的DWS全连接生成t-1的DWM,以支持APP层的个性化指标计算和模型扩展,平衡过度设计与设计不足的问题。
摘要由CSDN通过智能技术生成

需求:数据量亿级、日增量千万级
1、 如何快速的查询任意一天的 日累积、月累积、季累积、年累积的交易额
2、 如何快速的查询任意一天的 日累积、月累积、季累积、年累积的交易用户数

ODS:增量抽取数据

DROP TABLE IF EXISTS ods_order_info_di_james;
CREATE TABLE IF NOT EXISTS ods_order_info_di_james (
    userid STRING COMMENT '用户ID',
    order_id STRING COMMENT '订单ID',
    order_date STRING COMMENT '订单日期',
    pay_amt DOUBLE COMMENT '支付金额'
) COMMENT '订单表'
PARTITIONED by (ds STRING) 
LOCATION '/user/hive/warehouse/datacenter/ods_order_info_di_james'
--ods dynamic partition init data
insert overwrite table ods_order_info_di_james partition (ds)
    SELECT  'james' as userid
            ,'1' as order_id
            ,'20211026' as order_date
            ,100 as pay_amt
            ,'20211026' as ds
    union all 
    SELECT  'james' as userid
            ,'2' as order_id
            ,'20211026' as order_date
            ,200 as pay_amt
            ,'20211026' as ds
    union all 

    SELECT  'james' as userid
            ,'3' as order_id
            ,'20211027' as order_date
            ,100 as pay_amt
            ,'20211027' as ds

    union all 
    SELECT  'james' as userid
            ,'4' as order_id
            ,'20211027' as order_date
            ,200 as pay_amt
            ,'20211027' as ds
    union all 
    SELECT  'james' as userid
            ,'5' as order_id
            ,'20210909' as order_date
            ,100 as pay_amt
            ,'20210909' as ds
    union all 
    SELECT  'james' as userid
            ,'6' as order_id
            ,'20210909' as order_date
            ,200 as pay_amt
            ,'20210909' as ds;

DWD:增量、标准化、退维

DROP TABLE IF EXISTS dwd_order_info_di_james;
CREATE TABLE dwd_order_info_di_james (
    userid STRING COMMENT '用户ID',
    order_id STRING COMMENT '订单ID',
    order_date STRING COMMENT '订单日期',
    pay_amt DOUBLE COMMENT '支付金额'
) COMMENT 'dwd层订单表'
PARTITIONED by (ds STRING) 
LOCATION '/user/hive/warehouse/datacenter/dwd_order_info_di_james'
--dwd dynamic partition init data
insert overwrite table dwd_order_info_di_james partition(ds)
	 select 
        userid
        ,order_id
        ,order_date
        ,pay_amt
        ,ds 
    from 
        ods_order_info_di_james
    where ds > 0;

 DWS: 轻度汇总

 粒度:userid date_id (用户+天)

指标:amt_dtd (用户当天的支付金额) 

DROP TABLE IF EXISTS dws_user_day_summary_james;
CREATE TABLE dws_user_day_summary_james (
    userid STRING COMMENT '用户ID',
    date_id STRING COMMENT '日期ID',
    amt_dtd DOUBLE COMMENT '用户当天的支付金额'
) COMMENT 'dws层订单表'
PARTITIONED by (ds STRING)
LOCATION '/user/hive/wareh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值