数据仓库dws层,DWS层搭建--商品主题宽表,md,review第1遍,220622,

本文详细介绍了如何构建数据仓库DWS层的商品主题宽表,涉及需求分析、下单、支付、退款、购物车、收藏等统计指标的计算,以及使用UNION ALL和FULL JOIN进行结果合并的比较。通过对dwb_order_detail、fact_shop_cart等表进行处理,实现了商品的各种行为统计数据。最后讨论了Hive中的索引优化,包括ORC文件的Row Group Index和Bloom Filter Index的应用。
摘要由CSDN通过智能技术生成

知识点03:DWS层搭建--商品主题宽表--需求分析

  • 确定指标字段与表的关系

    当需求提出指标和维度之后,我们需要做的就是确定通过哪些表能够提供支撑。

    思考:是不是意味着数仓分层之后,上一层的表只能查询下一层的,能不能跨层?

    答案是不一定的。

    #下单次数、下单件数、下单金额
    dwb_order_detail
         order_id: 下单次数相当于下了多少订单(有多少个包含这个商品的订单)
         buy_num : 下单件数相当于下了多少商品
         total_price  每个商品下单金额指的是订单金额还是商品金额?应该是商品金额(订单中可能会包含其他商品)

    #被支付次数、被支付件数、被支付金额
    dwb_order_detail
        #支付状态的判断
            order_state: 只要不是1和7  就是已经支付状态的订单
            is_pay: 这个字段也可以 0表示未支付,1表示已支付。#推荐使用这个字段来判断
        #次数 件数 金额
            order_id
            buy_num
            total_price

    #被退款次数、被退款件数、被退款金额
    dwb_order_detail
        #退款的判断
            refund_id: 退款单号 is not null的就表明有退款
        #次数 件数 金额    
            order_id
            buy_num
            total_price

    #被加入购物车次数、被加入购物车件数
    yp_dwd.fact_shop_cart(能够提供购物车相关信息的只有这张表)
        id: 次数
        buy_num: 件数

    #被收藏次数
    yp_dwd.fact_goods_collect
        id: 次数

    #好评数、中评数、差评数
    yp_dwd.fact_goods_evaluation_detail
        geval_scores_goods:商品评分0-10分
        
        #如何判断 好  中  差 (完全业务指定)
            得分: >= 9      好
            得分: >6  <9   中
            得分:<= 6      差

    #维度
        时间、商品

概况起来,计算商品主题宽表,需要参与计算的表有:

yp_dwb.dwb_order_detail 订单明细宽表

yp_dwd.fact_shop_cart 购物车表

yp_dwd.fact_goods_collect 商品收藏表

yp_dwd.fact_goods_evaluation_detail 商品评价表

知识点04:DWS层搭建--商品主题宽表--step1--下单、支付、退款统计

大前提:使用row_number对数据进行去重

基于dwb_order_detail表根据商品(goods_id)进行统计各个指标的时候;

为了避免同一笔订单下有多个重复的商品出现(正常来说重复的应该合并在一起了);

应该使用row_number对order_id和goods_id进行去重。

--订单明细表抽取字段,并且进行去重,作为后续的base基础数据
--体现:列裁剪  尽量不要select *
with order_base as (select
    dt,
    order_id, --订单id
    goods_id, --商品id
    goods_name,--商品名称
    buy_num,--购买商品数量
    total_price,--商品总金额(数量*单价)
    is_pay,--支付状态(1表示已经支付)
    row_number() over(partition by order_id,goods_id) as rn
from yp_dwb.dwb_order_detail),

-- 后面跟,表示后面继续使用CTE,语法如下
with t1 as (select....),
     t2 as (select....)
select * from t1 join t2;    

下单次数、件数、金额统计

基于上述的order_base进行查询

--下单次数、件数、金额统计
order_count as (select
    dt,goods_id as sku_id,goods_name as sku_name,
    count(order_id) order_count,
    sum(buy_num) order_num,
    sum(total_price) order_amount
from order_base where rn =1
group by dt,goods_id,goods_name),

支付次数、件数、金额统计

计算支付相关指标之前,可以先使用is_pay进行订单状态过滤

然后基于过滤后的数据进行统计

可以继续使用CTE引导

--订单状态,已支付
pay_base as(
    select *,
    row_number() over(partition by order_id, goods_id) rn
    from yp_dwb.dwb_order_detail
    where is_pay=1
),

--支付次数、件数、金额统计
payment_count as(
    select dt, goods_id sku_id, goods_name sku_name,
       count(order_id) payment_count,
       sum(buy_num) payment_num,
       sum(total_price) payment_amount
    from pay_base
    where rn=1
    group by dt, goods_id, goods_name
),

退款次数、件数、金额统计

可以先使用refund_id is not null查询出退款订单,然后进行统计

 --先查询出退款订单
refund_base as(
    select *,
       row_number() over(partition by order_id, goods_id) rn
    from yp_dwb.dwb_order_detail
    where refund_id is not null
),
-- 退款次数、件数、金额
refund_count as (
    select dt, goods_id sku_id, goods_name sku_name,
       count(order_id) refund_count,
       sum(buy_num) refund_num,
       sum(total_price) refund_amount
    from refund_base
    where rn=1
    group by dt, goods_id, goods_name
),

知识点05:DWS层搭建--商品主题宽表--step2--购物车、收藏统计

思考:为什么下面这两个查询需要考虑拉链的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值