zoukankan      html  css  js  c++  java
  • 离线数仓(六)

    7 数仓搭建-DWS

    7.1 系统函数

    7.1.1 nvl函数

      1)基本语法:

        NVL(表达式1,表达式2

        如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。

        该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型但是表达式1和表达式2的数据类型必须为同一个类型

      2)案例实操

    select nvl(1,0);

    select nvl(null,"hello");

    7.1.2 日期处理函数

      1date_format函数(根据格式整理日期

    select date_format('2021-06-08','yyyy-MM');

      2date_add函数(加减日期

    select date_add('2021-06-08',-1);

      3)next_day函数

        (1)取当前天的下一个周一

    select next_day('2021-06-08','MO');

          说明:星期一到星期日的英文MondayTuesdayWednesdayThursdayFridaySaturdaySunday

        (2)取当前周的周一

    select date_add(next_day('2021-06-08','MO'),-7);

      4)last_day函数(求当月最后一天日期

    select last_day('2021-06-08');

    7.1.3 复杂数据类型定义

      1map结构数据定义

    map<string,string>

      2)array结构数据定义

    array<string>

      3)struct结构数据定义

    struct<id:int,name:string,age:int>

      4)structarray嵌套定义

    array<struct<id:int,name:string,age:int>>

    7.2 DWS

    7.2.1 访客主题

      1)建表语句

    drop table if exists dws_visitor_action_daycount;
    create external table dws_visitor_action_daycount(
    --dwd_page_log
    `mid_id` string comment '设备id',
    `brand` string comment '设备品牌',
    `model` string comment '设备型号',
    `is_new` string comment '是否首次访问', -- 将这个设备一天中所有访问记录的 is_new字段进行聚合,只要一天中有一次为0,即为0,否则即为1
    `channel` array<string> comment '渠道',
    `os` array<string> comment '操作系统',
    `area_code` array<string> comment '地区ID',
    `version_code` array<string> comment '应用版本',
    `visit_count` bigint comment '访问次数',
    `page_stats` array<struct<page_id: string,page_count: bigint,during_time: bigint>> comment '页面访问统计'
    ) comment '每日设备行为表'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_visitor_action_daycount'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载(首日/每日一样,改个日期就行)

    insert overwrite table dws_visitor_action_daycount partition (dt = '2021-06-08')
    select t1.mid_id, --设备id
    brand, --设备品牌
    model, --设备型号
    is_new, --是否首次访问
    channel, --渠道
    os, --操作系统
    area_code, --地区ID
    version_code, --应用版本
    visit_count, --访问次数
    page_stats --每个设备访问所有页面的统计信息聚合的结果(数组里装载的是一个结构体)
    from
    (
    select mid_id, --设备id
    concat_ws('|',collect_set(brand)) brand, --设备品牌
    concat_ws('|',collect_set(model)) model, --设备型号
    `if`(array_contains(collect_set(is_new),'0'),'0','1') is_new, --是否首次访问
    collect_set(channel) channel, --渠道
    collect_set(os) os, --操作系统
    collect_set(area_code) area_code, --地区ID
    collect_set(version_code) version_code, --应用版本
    sum(`if`(last_page_id is null,1,0)) visit_count --访问次数
    from dwd_page_log
    where dt = '2021-06-08'
    group by mid_id
    ) t1
    join
    (
    --在当天中,每个设备访问所有页面的统计信息聚合的结果
    select mid_id,collect_list(page_struct) page_stats
    from
    (
    --在当天中,每个设备访问每个页面的统计信息
    select mid_id,named_struct('page_id',page_id,'page_count',count(*),'during_time',sum(during_time)) page_struct
    from dwd_page_log
    where dt = '2021-06-08'
    group by mid_id,page_id
    ) tmp
    group by mid_id
    ) t2
    on t1.mid_id = t2.mid_id;

      3)查询加载结果

    7.2.2 用户主题

      1)建表语句

    drop table if exists dws_user_action_daycount;
    create external table dws_user_action_daycount(
    `user_id` string comment '用户id',
    -- 从dwd_page_log
    `login_count` string comment '登录次数',
    -- dwd_action_log
    `cart_count` bigint comment '加入购物车次数',
    `favor_count` bigint comment '收藏次数',
    -- dwd_order_info or dwd_order_detail
    `order_count` bigint comment '下单次数',
    `order_activity_count` bigint comment '订单参与活动次数',
    `order_activity_reduce_amount` decimal(16,2) comment '订单减免金额(活动)',
    `order_coupon_count` bigint comment '订单用券次数',
    `order_coupon_reduce_amount` decimal(16,2) comment '订单减免金额(优惠券)',
    `order_original_amount` decimal(16,2) comment '订单单原始金额',
    `order_final_amount` decimal(16,2) comment '订单总金额',
    -- dwd_payment_info
    `payment_count` bigint comment '支付次数',
    `payment_amount` decimal(16,2) comment '支付金额',
    -- dwd_order_refund_info
    `refund_order_count` bigint comment '退单次数',
    `refund_order_num` bigint comment '退单件数',
    `refund_order_amount` decimal(16,2) comment '退单金额',
    -- dwd_refund_payment
    `refund_payment_count` bigint comment '退款次数',
    -- dwd_refund_payment 关联 dwd_order_refund_info
    `refund_payment_num` bigint comment '退款件数',
    `refund_payment_amount` decimal(16,2) comment '退款金额',
    -- dwd_coupon_use
    `coupon_get_count` bigint comment '优惠券领取次数',
    `coupon_using_count` bigint comment '优惠券使用(下单)次数',
    `coupon_used_count` bigint comment '优惠券使用(支付)次数',
    -- dwd_comment_info
    `appraise_good_count` bigint comment '好评数',
    `appraise_mid_count` bigint comment '中评数',
    `appraise_bad_count` bigint comment '差评数',
    `appraise_default_count` bigint comment '默认评价数',
    -- dwd_order_detail
    `order_detail_stats` array<struct<sku_id:string,sku_num:bigint,order_count:bigint,activity_reduce_amount:decimal(16,2),coupon_reduce_amount:decimal(16,2),original_amount:decimal(16,2),final_amount:decimal(16,2)>> comment '下单明细统计'
    ) comment '每日用户行为'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_user_action_daycount/'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载

        (1)首日装载

    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table dws_user_action_daycount partition (dt)
    select  user_id,
            sum(login_count) ,
            sum(cart_count),
            sum(favor_count),
            sum(order_count),
            sum(order_activity_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_count),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(coupon_get_count),
            sum(coupon_using_count),
            sum(coupon_used_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            max(if( order_detail_stats[0].sku_id = '-1' , null ,order_detail_stats )) order_detail_stats,
            dt
    from
         (
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    collect_list(sku_struct) order_detail_stats
             from (
                 select user_id,
                        dt,
                        named_struct('sku_id',sku_id,       --skuid
                        'sku_num',sum(sku_num),                --商品数量
                        'order_count',count(*),                --下单次数
                        'activity_reduce_amount',cast (sum(split_activity_amount) as decimal(16,2)), --活动优惠分摊
                        'coupon_reduce_amount',cast(sum(split_coupon_amount) as decimal(16,2)),    --优惠券优惠分摊
                        'original_amount',cast(sum(original_amount) as decimal(16,2)),         --原始价格
                        'final_amount',cast(sum(split_final_amount) as decimal(16,2))          --最终价格分摊
                        ) sku_struct    --结构体
                 from dwd_order_detail
                 where dt <='2021-06-08'
                 group by user_id,dt,sku_id
             ) tmp
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    sum(`if`(last_page_id is not null,1,0)) login_count,    --登录次数
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_page_log
             where dt = '2021-06-08' and user_id is not null
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    sum(`if`(action_id = 'cart_add',1,0)) cart_count,       --加入购物车次数
                    sum(`if`(action_id = 'favor_add',1,0)) favor_count,     --收藏次数
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_action_log
             where dt = '2021-06-08' and user_id is not null and action_id in ('cart_add','favor_add')
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    count(distinct order_id) order_count,                       --下单次数
                    count(activity_rule_id) order_activity_count,               --订单参与活动次数
                    sum(split_activity_amount) order_activity_reduce_amount,    --订单减免金额(活动)
                    count(coupon_id) order_coupon_count,                        --订单用券次数
                    sum(split_coupon_amount) order_coupon_reduce_amount,        --订单减免金额(优惠券)
                    sum(original_amount) order_original_amount,                 --订单单原始金额
                    sum(split_final_amount) order_final_amount,                 --订单总金额
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_order_detail
             where dt <= '2021-06-08'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    count(*) payment_count,                 --支付次数
                    sum(payment_amount) payment_amount,     --支付金额
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_payment_info
             where dt <= '2021-06-08'
             group by user_id,dt
             union all
             -- 退单次数:  用户申请退回的一笔订单的一种商品,算一次
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    count(*) refund_order_count,            --退单次数
                    sum(refund_num) refund_order_num,       --退单件数
                    sum(refund_amount) refund_order_amount, --退单金额
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_order_refund_info
             where dt <= '2021-06-08'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    count(*) refund_payment_count,              --退款次数
                    sum(refund_num) refund_payment_num,   --退款件数
                    sum(refund_amount) refund_payment_amount,   --退款金额
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        dt,
                        refund_amount,      --退款金额
                        sku_id,
                        order_id
                 from dwd_refund_payment
                 where dt <= '2021-06-08'
             ) t1
             left join
             (
                 select refund_num,   --退款件数
                        sku_id,
                        order_id
                 from dwd_order_refund_info
                 where dt <= '2021-06-08'
             ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    sum(coupon_get_count) coupon_get_count,     --优惠券领取次数
                    sum(coupon_using_count) coupon_using_count, --优惠券使用(下单)次数
                    sum(coupon_used_count)  coupon_used_count,  --优惠券使用(支付)次数
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        date_format(get_time,'yyyy-MM-dd') dt,  --优惠券领取时间
                        count(*) coupon_get_count,           --优惠券领取次数
                        0 coupon_using_count,                --优惠券使用(下单)次数
                        0 coupon_used_count                  --优惠券使用(支付)次数
                 from dwd_coupon_use
                 where dt <= '2021-06-08' or dt='9999-99-99'    --dt: 优惠券的完成时间
                 group by user_id,date_format(get_time,'yyyy-MM-dd')
                 union all
                 select user_id,
                        date_format(using_time,'yyyy-MM-dd') dt,
                        0 coupon_get_count,                  --优惠券领取次数
                        count(*) coupon_using_count,         --优惠券使用(下单)次数
                        0 coupon_used_count                  --优惠券使用(支付)次数
                 from dwd_coupon_use
                 where dt <= '2021-06-08' or dt='9999-99-99' and using_time is not null
                 group by user_id,date_format(using_time,'yyyy-MM-dd')
                 union all
                 select user_id,
                        date_format(used_time,'yyyy-MM-dd') dt,
                        0 coupon_get_count,                   --优惠券领取次数
                        0 coupon_using_count,                 --优惠券使用(下单)次数
                        count(*) coupon_used_count            --优惠券使用(支付)次数
                 from dwd_coupon_use
                 where dt <= '2021-06-08' and used_time is not null
                 group by user_id, date_format(used_time,'yyyy-MM-dd')
             ) tmp2
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    sum(`if`(appraise = '1201',1,0)) appraise_good_count,       --好评数
                    sum(`if`(appraise = '1202',1,0)) appraise_mid_count,        --中评数
                    sum(`if`(appraise = '1203',1,0)) appraise_bad_count,        --差评数
                    sum(`if`(appraise = '1204',1,0)) appraise_default_count,    --默认评价数
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_comment_info
             where dt <= '2021-06-08'
             group by user_id,dt
         ) tmp3
    group by user_id,dt;

        (2)每日装载

    insert overwrite table dws_user_action_daycount partition (dt='2021-06-09')
    select  user_id,
            sum(login_count) ,
            sum(cart_count),
            sum(favor_count),
            sum(order_count),
            sum(order_activity_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_count),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(coupon_get_count),
            sum(coupon_using_count),
            sum(coupon_used_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            max(if( order_detail_stats[0].sku_id = '-1' , null ,order_detail_stats )) order_detail_stats
    from
         (
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    collect_list(sku_struct) order_detail_stats
             from (
                 select user_id,
                        dt,
                        named_struct('sku_id',sku_id,       --skuid
                        'sku_num',sum(sku_num),                --商品数量
                        'order_count',count(*),                --下单次数
                        'activity_reduce_amount',cast (sum(split_activity_amount) as decimal(16,2)), --活动优惠分摊
                        'coupon_reduce_amount',cast(sum(split_coupon_amount) as decimal(16,2)),    --优惠券优惠分摊
                        'original_amount',cast(sum(original_amount) as decimal(16,2)),         --原始价格
                        'final_amount',cast(sum(split_final_amount) as decimal(16,2))          --最终价格分摊
                        ) sku_struct    --结构体
                 from dwd_order_detail
                 where dt <='2021-06-09'
                 group by user_id,dt,sku_id
             ) tmp
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    sum(`if`(last_page_id is not null,1,0)) login_count,    --登录次数
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_page_log
             where dt = '2021-06-09' and user_id is not null
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    sum(`if`(action_id = 'cart_add',1,0)) cart_count,       --加入购物车次数
                    sum(`if`(action_id = 'favor_add',1,0)) favor_count,     --收藏次数
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_action_log
             where dt = '2021-06-09' and user_id is not null and action_id in ('cart_add','favor_add')
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    count(distinct order_id) order_count,                       --下单次数
                    count(activity_rule_id) order_activity_count,               --订单参与活动次数
                    sum(split_activity_amount) order_activity_reduce_amount,    --订单减免金额(活动)
                    count(coupon_id) order_coupon_count,                        --订单用券次数
                    sum(split_coupon_amount) order_coupon_reduce_amount,        --订单减免金额(优惠券)
                    sum(original_amount) order_original_amount,                 --订单单原始金额
                    sum(split_final_amount) order_final_amount,                 --订单总金额
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_order_detail
             where dt <= '2021-06-09'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    count(*) payment_count,                 --支付次数
                    sum(payment_amount) payment_amount,     --支付金额
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_payment_info
             where dt <= '2021-06-09'
             group by user_id,dt
             union all
             -- 退单次数:  用户申请退回的一笔订单的一种商品,算一次
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    count(*) refund_order_count,            --退单次数
                    sum(refund_num) refund_order_num,       --退单件数
                    sum(refund_amount) refund_order_amount, --退单金额
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_order_refund_info
             where dt <= '2021-06-09'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    count(*) refund_payment_count,              --退款次数
                    sum(refund_num) refund_payment_num,   --退款件数
                    sum(refund_amount) refund_payment_amount,   --退款金额
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        dt,
                        refund_amount,      --退款金额
                        sku_id,
                        order_id
                 from dwd_refund_payment
                 where dt <= '2021-06-09'
             ) t1
             left join
             (
                 select refund_num,   --退款件数
                        sku_id,
                        order_id
                 from dwd_order_refund_info
                 where dt > date_sub('2021-06-09',15)
             ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    count(*) coupon_get_count,     --优惠券领取次数
                    sum(if(date_format(using_time,'yyyy-MM-dd') = '2021-06-09',1,0 )) coupon_using_count, --优惠券使用(下单)次数
                    sum(if(date_format(used_time,'yyyy-MM-dd') = '2021-06-09',1,0 ))  coupon_used_count,  --优惠券使用(支付)次数
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_coupon_use
             where (dt = '2021-06-09' or dt='9999-99-99') and date_format(get_time,'yyyy-MM-dd')='2021-06-09'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    sum(`if`(appraise = '1201',1,0)) appraise_good_count,       --好评数
                    sum(`if`(appraise = '1202',1,0)) appraise_mid_count,        --中评数
                    sum(`if`(appraise = '1203',1,0)) appraise_bad_count,        --差评数
                    sum(`if`(appraise = '1204',1,0)) appraise_default_count,    --默认评价数
                    `array`(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from dwd_comment_info
             where dt <= '2021-06-09'
             group by user_id,dt
         ) tmp3
    group by user_id,dt;

      3)查询加载结果

    7.2.3 商品主题

      1)建表语句

    drop table if exists dws_sku_action_daycount;
    create external table dws_sku_action_daycount(
        `sku_id` string comment 'sku_id',
        --dwd_order_detail
        `order_count` bigint comment '被下单次数',
        `order_num` bigint comment '被下单件数',
        `order_activity_count` bigint comment '参与活动被下单次数',
        `order_coupon_count` bigint comment '使用优惠券被下单次数',
        `order_activity_reduce_amount` decimal(16,2) comment '优惠金额(活动)',
        `order_coupon_reduce_amount` decimal(16,2) comment '优惠金额(优惠券)',
        `order_original_amount` decimal(16,2) comment '被下单原价金额',
        `order_final_amount` decimal(16,2) comment '被下单最终金额',
        --dwd_payment_info join dwd_order_detail
        `payment_count` bigint comment '被支付次数',
        `payment_num` bigint comment '被支付件数',
        `payment_amount` decimal(16,2) comment '被支付金额',
        --dwd_order_refund_info
        `refund_order_count` bigint comment '被退单次数',
        `refund_order_num` bigint comment '被退单件数',
        `refund_order_amount` decimal(16,2) comment '被退单金额',
        --dwd_refund_payment
        `refund_payment_count` bigint comment '被退款次数',
        `refund_payment_num` bigint comment '被退款件数',
        `refund_payment_amount` decimal(16,2) comment '被退款金额',
        --dwd_action_log
        `cart_count` bigint comment '被加入购物车次数',
        `favor_count` bigint comment '被收藏次数',
        --dwd_comment_info
        `appraise_good_count` bigint comment '好评数',
        `appraise_mid_count` bigint comment '中评数',
        `appraise_bad_count` bigint comment '差评数',
        `appraise_default_count` bigint comment '默认评价数'
    ) comment '每日商品行为'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_sku_action_daycount/'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载

        (1)首日装载

    set hive.exec.dynamic.partition.mode=nonstrict;    --开启动态分区
    insert overwrite table dws_sku_action_daycount partition (dt)
    select  sku_id,
            sum(order_count),
            sum(order_num),
            sum(order_activity_count),
            sum(order_coupon_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_num),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(cart_count),
            sum(favor_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            dt
    from
    (
        select  sku_id,
                dt,
                count(*) order_count,                                       --被下单次数
                sum(sku_num) order_num,                                     --被下单件数
                count(activity_rule_id) order_activity_count,               --参与活动被下单次数
                count(coupon_id) order_coupon_count,                        --使用优惠券被下单次数
                sum(split_activity_amount) order_activity_reduce_amount,    --优惠金额(活动)
                sum(split_coupon_amount) order_coupon_reduce_amount,        --优惠金额(优惠券)
                sum(original_amount) order_original_amount,                 --被下单原价金额
                sum(split_final_amount) order_final_amount,                 --被下单最终金额
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_order_detail
        where dt <= '2021-06-08'
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                     --被支付次数
                sum(sku_num) payment_num,                   --被支付件数
                sum(split_final_amount) payment_amount,     --被支付金额
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select sku_id,
                   split_final_amount,      --被下单最终金额
                   order_id,                --订单id
                   sku_num                  --商品数量
            from dwd_order_detail
            where dt <= '2021-06-08'        -- dt是下单日期,不是支付日期
        ) t1
        join
        (
            select order_id,
                   dt
            from dwd_payment_info
            where dt <= '2021-06-08'        -- dt是支付日期
        ) t2 on t1.order_id = t2.order_id
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                count(*) refund_order_count,                 --被退单次数
                sum(refund_num) refund_order_num,            --被退单件数
                sum(refund_amount) refund_order_amount,      --被退单金额
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_order_refund_info
        where dt <= '2021-06-08'
        group by sku_id,dt
        union all
        select  t1.sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                count(*) refund_payment_count,              --被退款次数
                sum(refund_num) refund_payment_num,         --被退款件数
                sum(refund_amount) refund_payment_amount,   --被退款金额
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select refund_amount,   --退款金额
                   sku_id,
                   order_id,
                   dt
            from dwd_refund_payment     --退款表
            where dt <= '2021-06-08'
        ) t1
        left join
        (
            select refund_num,      --退款件数
                   sku_id,
                   order_id         --退单表
            from dwd_order_refund_info
            where dt <= '2021-06-08'
        ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
        group by t1.sku_id,dt
        union all
        select  item sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                sum(`if`(action_id = 'cart_add',1,0)) cart_count,       --被加入购物车次数
                sum(`if`(action_id = 'favor_add',1,0)) favor_count,     --被收藏次数
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_action_log
        where dt <= '2021-06-08' and action_id in ('cart_add', 'favor_add')
        group by item,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                sum(`if`(appraise = '1201',1,0)) appraise_good_count,         --好评数
                sum(`if`(appraise = '1202',1,0)) appraise_mid_count,          --中评数
                sum(`if`(appraise = '1203',1,0)) appraise_bad_count,          --差评数
                sum(`if`(appraise = '1204',1,0)) appraise_default_count       --默认评价数
        from dwd_comment_info
        where dt <= '2021-06-08'
        group by sku_id,dt
    ) tmp
    group by sku_id,dt;

        (2)每日装载

    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table dws_sku_action_daycount partition (dt)
    select  sku_id,
            sum(order_count),
            sum(order_num),
            sum(order_activity_count),
            sum(order_coupon_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_num),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(cart_count),
            sum(favor_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            dt
    from
    (
        select  sku_id,
                dt,
                count(*) order_count,                                       --被下单次数
                sum(sku_num) order_num,                                     --被下单件数
                count(activity_rule_id) order_activity_count,               --参与活动被下单次数
                count(coupon_id) order_coupon_count,                        --使用优惠券被下单次数
                sum(split_activity_amount) order_activity_reduce_amount,    --优惠金额(活动)
                sum(split_coupon_amount) order_coupon_reduce_amount,        --优惠金额(优惠券)
                sum(original_amount) order_original_amount,                 --被下单原价金额
                sum(split_final_amount) order_final_amount,                 --被下单最终金额
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_order_detail
        where dt = '2021-06-09'
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                     --被支付次数
                sum(sku_num) payment_num,                   --被支付件数
                sum(split_final_amount) payment_amount,     --被支付金额
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select sku_id,
                   split_final_amount,      --被下单最终金额
                   order_id,                --订单id
                   sku_num                  --商品数量
            from dwd_order_detail           --订单事实表
            -- 跨天支付的问题:  2021-06-09日支付的订单,可能是 2021-06-09日下的单,也可能是 2021-06-08日下的单
            where dt = '2021-06-09' or dt = date_sub('2021-06-09',1)        -- dt是下单日期,不是支付日期
        ) t1
        join
        (
            select order_id,
                   dt
            from dwd_payment_info           --支付事实表
            where dt = '2021-06-09'         -- dt是支付日期
        ) t2 on t1.order_id = t2.order_id
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                count(*) refund_order_count,                 --被退单次数
                sum(refund_num) refund_order_num,            --被退单件数
                sum(refund_amount) refund_order_amount,      --被退单金额
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_order_refund_info
        where dt = '2021-06-09'
        group by sku_id,dt
        union all
        select  t1.sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                count(*) refund_payment_count,              --被退款次数
                sum(refund_num) refund_payment_num,         --被退款件数
                sum(refund_amount) refund_payment_amount,   --被退款金额
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select refund_amount,   --退款金额
                   sku_id,
                   order_id,
                   dt
            from dwd_refund_payment     --退款表:只统计退款完成的
            where dt = '2021-06-09'
        ) t1
        left join
        (
            select refund_num,      --退款件数
                   sku_id,
                   order_id         --退单表
            from dwd_order_refund_info
            --事务型事实表 dt:退单的发起时间
            where dt > date_sub('2021-06-09',15)
        ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
        group by t1.sku_id,dt
        union all
        select  item sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                sum(`if`(action_id = 'cart_add',1,0)) cart_count,       --被加入购物车次数
                sum(`if`(action_id = 'favor_add',1,0)) favor_count,     --被收藏次数
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from dwd_action_log
        where dt = '2021-06-09' and action_id in ('cart_add', 'favor_add')
        group by item,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                sum(`if`(appraise = '1201',1,0)) appraise_good_count,         --好评数
                sum(`if`(appraise = '1202',1,0)) appraise_mid_count,          --中评数
                sum(`if`(appraise = '1203',1,0)) appraise_bad_count,          --差评数
                sum(`if`(appraise = '1204',1,0)) appraise_default_count       --默认评价数
        from dwd_comment_info
        where dt = '2021-06-09'
        group by sku_id,dt
    ) tmp
    group by sku_id,dt;

      3)查询加载结果

    7.2.4 优惠券主题

      1)建表语句

    drop table if exists dws_coupon_info_daycount;
    --理论上产生行为的 coupon的各种指标(1,2,3) =  理论上产生行为的 coupon的各种指标(1,2,3) left join 实际上产生行为的 coupon的各种指标(1)
    create external table dws_coupon_info_daycount(
        `coupon_id` string comment '优惠券ID',
        -- dwd_coupon_use
        `get_count` bigint comment '领取次数',
        `order_count` bigint comment '使用(下单)次数',
        -- dwd_order_detail
        `order_reduce_amount` decimal(16,2) comment '使用某券的订单优惠金额',
        `order_original_amount` decimal(16,2) comment '使用某券的订单原价金额',
        `order_final_amount` decimal(16,2) comment '使用某券的订单总价金额',
        -- dwd_order_detail  join  dwd_payment_info  求出支付的订单的详请,统计用了哪种券
        `payment_count` bigint comment '使用(支付)次数',
        `payment_reduce_amount` decimal(16,2) comment '使用某券的支付优惠金额',
        `payment_amount` decimal(16,2) comment '使用某券支付的总金额',
        `expire_count` bigint comment '过期次数'    --expire_time为null,代表永久有效
    ) comment '每日活动统计'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_coupon_info_daycount/'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载

        (1)首日装载

    insert overwrite table dws_coupon_info_daycount partition (dt)
    select t3.coupon_id,                        --优惠券id
           nvl(get_count,0),                    --领取次数
           nvl(order_count,0),                  --使用(下单)次数
           nvl(order_reduce_amount,0.0) ,       --使用某券的订单优惠金额
           nvl(order_original_amount,0.0) ,     --使用某券的订单原价金额
           nvl(order_final_amount,0.0) ,        --使用某券的订单总价金额
           nvl(payment_count,0) ,               --使用(支付)次数
           nvl(payment_reduce_amount,0.0) ,     --使用某券的支付优惠金额
           nvl(payment_amount,0.0) ,            --使用某券支付的总金额
           nvl(expire_count,0) ,                --过期次数:为null,代表永久有效
           t3.dt
    from
    (
        --理论上产生行为的 couponid和行为产生的日期
        select  id coupon_id,        --优惠券id
                date_id dt
        from
        (
             -- 求截至到2021-06-08日所有的优惠券
            select id,              --优惠券id
                   start_time,      --可以领取的开始日期
                   create_time,     --创建时间
                   expire_time      --过期时间
            from dim_coupon_info
            where dt = '2021-06-08'
        ) t1
        join
        (
            --取商城app上线第一天 到 6月8日所有的日期
            select date_id
            from dim_date_info
            where date_id between '2021-06-05' and '2021-06-08'
        ) t2
        where date_id >= nvl(start_time,create_time) and date_id <= nvl(expire_time,'9999-99-99')
    ) t3
    left join
    (
        --实际上产生行为的 coupon的各种指标
        select  coupon_id,
                dt,
                sum(get_count) get_count,                           --领取次数
                sum(order_count) order_count,                       --使用(下单)次数
                sum(order_reduce_amount) order_reduce_amount,       --使用某券的订单优惠金额
                sum(order_original_amount) order_original_amount,   --使用某券的订单原价金额
                sum(order_final_amount) order_final_amount,         --使用某券的订单总价金额
                sum(payment_count) payment_count,                   --使用(支付)次数
                sum(payment_reduce_amount) payment_reduce_amount,   --使用某券的支付优惠金额
                sum(payment_amount) payment_amount,                 --使用某券支付的总金额
                sum(expire_count) expire_count                      --过期次数
        from
        (
            select  coupon_id,
                    dt,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    sum(split_coupon_amount) payment_reduce_amount, --使用某券的支付优惠金额
                    sum(split_final_amount) payment_amount          --使用某券支付的总金额
            from
            (
                select split_final_amount,      --最终价格分摊
                       order_id,                --订单id
                       split_coupon_amount,     --优惠券优惠分摊
                       coupon_id                --优惠券id
                from dwd_order_detail           --订单明细事实表表
                where dt <= '2021-06-08' and coupon_id is not null      --dt是下单日期,不是支付日期
            ) t1
            join
            (
                --求被支付的订单详请
                select order_id,
                       dt
                from dwd_payment_info           --支付事实表表
                where dt <= '2021-06-08'        -- dt是支付日期
            ) t2 on t1.order_id = t2.order_id
            group by coupon_id,dt
            union all
            select  coupon_id,
                    dt,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    sum(split_coupon_amount) order_reduce_amount,       --使用某券的订单优惠金额
                    sum(original_amount) order_original_amount,         --使用某券的订单原价金额
                    sum(split_final_amount) order_final_amount,         --使用某券的订单总价金额
                    0 payment_reduce_amount,
                    0 payment_amount
            from dwd_order_detail
            where dt <= '2021-06-08' and coupon_id is not null  --只取使用了优惠券的订单
            group by coupon_id,dt
            union all
            select  coupon_id,
                    dt,
                    sum(get_count) get_count,           --领取次数
                    sum(order_count) order_count,       --使用(下单)次数
                    sum(payment_count) payment_count,   --使用(支付)次数
                    sum(expire_count) expire_count,     ----过期次数
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_reduce_amount,
                    0 payment_amount
            from
            (
                --求每种券在每一天的领取次数
                select  coupon_id,
                        date_format(get_time,'yyyy-MM-dd') dt,      --优惠券领取时间
                        count(*) get_count,                          --领取次数
                        0 order_count,
                        0 payment_count,
                        0 expire_count
                from dwd_coupon_use     --优惠券领用事实表
                where dt <= '2021-06-08' or dt='9999-99-99'         --dt: 优惠券的完成时间
                group by coupon_id,date_format(get_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的下单次数
                select coupon_id,
                       date_format(using_time,'yyyy-MM-dd') dt,    --使用时间(下单)
                       0 get_count,
                       count(*) order_count,                    --使用(下单)次数
                       0 payment_count,
                       0 expire_count
                from dwd_coupon_use
                where dt <= '2021-06-08' or dt='9999-99-99' and using_time is not null
                group by coupon_id,date_format(using_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的支付次数
                select  coupon_id,
                        date_format(used_time,'yyyy-MM-dd') dt,     --使用时间(支付)
                        0 get_count,
                        0 order_count,
                        count(*) payment_count,                     --使用(支付)次数
                        0 expire_count
                from dwd_coupon_use
                where dt <= '2021-06-08' or dt='9999-99-99' and used_time is not null   --dt: 优惠券的完成时间
                group by coupon_id,date_format(used_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的过期次数
                select  coupon_id,
                        date_format(expire_time,'yyyy-MM-dd') dt,   --过期时间
                        0 get_count,
                        0 order_count,
                        0 payment_count,
                        count(*) expire_count                       --过期次数
                from dwd_coupon_use
                where dt <= '2021-06-08' or dt='9999-99-99' and expire_time is not null
                group by coupon_id,date_format(expire_time,'yyyy-MM-dd')
            )tmp
            group by coupon_id,dt
        ) tmp2
        group by coupon_id, dt
    ) t4
    on t3.coupon_id = t4.coupon_id and t3.dt = t4.dt;

        (2)每日装载

    insert overwrite table dws_coupon_info_daycount partition (dt = '2021-06-09')
    select t3.coupon_id,                        --优惠券id
           nvl(get_count,0),                    --领取次数
           nvl(order_count,0),                  --使用(下单)次数
           nvl(order_reduce_amount,0.0) ,       --使用某券的订单优惠金额
           nvl(order_original_amount,0.0) ,     --使用某券的订单原价金额
           nvl(order_final_amount,0.0) ,        --使用某券的订单总价金额
           nvl(payment_count,0) ,               --使用(支付)次数
           nvl(payment_reduce_amount,0.0) ,     --使用某券的支付优惠金额
           nvl(payment_amount,0.0) ,            --使用某券支付的总金额
           nvl(expire_count,0)                  --过期次数:为null,代表永久有效
    from
    (
        --理论上产生行为的 couponid和行为产生的日期
        select  id coupon_id        --优惠券id
        from dim_coupon_info
        where dt = '2021-06-09' and dt >= nvl(start_time,create_time) and dt <= nvl(expire_time,'9999-99-99')
    ) t3
    left join
    (
        --实际上产生行为的 coupon的各种指标
        select  coupon_id,
                sum(get_count) get_count,                           --领取次数
                sum(order_count) order_count,                       --使用(下单)次数
                sum(order_reduce_amount) order_reduce_amount,       --使用某券的订单优惠金额
                sum(order_original_amount) order_original_amount,   --使用某券的订单原价金额
                sum(order_final_amount) order_final_amount,         --使用某券的订单总价金额
                sum(payment_count) payment_count,                   --使用(支付)次数
                sum(payment_reduce_amount) payment_reduce_amount,   --使用某券的支付优惠金额
                sum(payment_amount) payment_amount,                 --使用某券支付的总金额
                sum(expire_count) expire_count                      --过期次数
        from
        (
            select  coupon_id,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    sum(split_coupon_amount) payment_reduce_amount, --使用某券的支付优惠金额
                    sum(split_final_amount) payment_amount          --使用某券支付的总金额
            from dwd_order_detail
            where (dt = '2021-06-09' or dt = date_sub('2021-06-09',1)) and coupon_id is not null
                and order_id in (
                    select order_id
                    from dwd_payment_info
                    where dt = '2021-06-09'
                )
            group by coupon_id
            union all
            select  coupon_id,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    sum(split_coupon_amount) order_reduce_amount,       --使用某券的订单优惠金额
                    sum(original_amount) order_original_amount,         --使用某券的订单原价金额
                    sum(split_final_amount) order_final_amount,         --使用某券的订单总价金额
                    0 payment_reduce_amount,
                    0 payment_amount
            from dwd_order_detail
            where dt = '2021-06-09' and coupon_id is not null  --只取使用了优惠券的订单
            group by coupon_id
            union all
            select  coupon_id,
                    sum(`if`(date_format(get_time,'yyyy-MM-dd') = '2021-06-09',1,0)) get_count,         --领取次数
                    sum(`if`(date_format(using_time,'yyyy-MM-dd') = '2021-06-09',1,0)) order_count,     --使用(下单)次数
                    sum(`if`(date_format(used_time,'yyyy-MM-dd') = '2021-06-09',1,0)) payment_count,    --使用(支付)次数
                    sum(`if`(date_format(expire_time,'yyyy-MM-dd') = '2021-06-09',1,0)) expire_count,   ----过期次数
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_reduce_amount,
                    0 payment_amount
            from dwd_coupon_use
            where dt = '2021-06-09' or dt = '9999-99-99'
            group by coupon_id
        ) tmp2
        group by coupon_id
    ) t4
    on t3.coupon_id = t4.coupon_id;

      3)查询加载结果

    7.2.5 活动主题

      1)建表语句

    drop table if exists dws_activity_info_daycount;
    create external table dws_activity_info_daycount(
        `activity_rule_id` string comment '活动规则ID',
        `activity_id` string comment '活动ID',
        -- dwd_order_detail
        `order_count` bigint comment '参与某活动某规则下单次数',                       --注意:针对的是某个活动的某个具体规则
        `order_reduce_amount` decimal(16,2) comment '参与某活动某规则下单减免金额',
        `order_original_amount` decimal(16,2) comment '参与某活动某规则下单原始金额',   --只统计参与活动的订单明细,未参与活动的订单明细不统计
        `order_final_amount` decimal(16,2) comment '参与某活动某规则下单最终金额',
        -- dwd_order_detail join dwd_payment_info
        `payment_count` bigint comment '参与某活动某规则支付次数',
        `payment_reduce_amount` decimal(16,2) comment '参与某活动某规则支付减免金额',
        `payment_amount` decimal(16,2) comment '参与某活动某规则支付金额'
    ) comment '每日活动统计'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_activity_info_daycount/'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载

        (1)首日装载

    insert overwrite table dws_activity_info_daycount partition (dt)
    select t3.activity_rule_id,                 --活动id
           t3.activity_id,                      --活动规则id
           nvl(order_count,0),                  --参与某活动某规则下单次数
           nvl(order_reduce_amount,0.0),        --参与某活动某规则下单减免金额
           nvl(order_original_amount,0.0),      --参与某活动某规则下单原始金额
           nvl(order_final_amount,0.0),         --参与某活动某规则下单最终金额
           nvl(payment_count,0),                --参与某活动某规则支付次数
           nvl(payment_reduce_amount,0.0),      --参与某活动某规则支付减免金额
           nvl(payment_amount,0.0),             --参与某活动某规则支付金额
           t3.dt
    from
    (
        -- 求理论上 可能产生行为的活动id和日期
        select activity_id,                 --活动id
               activity_rule_id,            --活动规则id
               date_id dt
        from
        (
            select activity_id,             --活动id
                   activity_rule_id,        --活动规则id
                   start_time,              --活动开始时间
                   end_time                 --活动结束时间
            from dim_activity_rule_info
            where dt = '2021-06-08'
        ) t1
        join
        (
            select date_id
            from dim_date_info
            where date_id between '2021-06-05' and '2021-06-08'
        ) t2
        where date_id >= start_time and date_id <= end_time     --商城APP上线时间应该在活动时间范围内
    ) t3
    left join
    (
        -- 实际上 产生行为的活动统计的指标
        select activity_rule_id,
               activity_id,
               dt,
               sum(order_count) order_count,                        --参与某活动某规则下单次数
               sum(order_reduce_amount) order_reduce_amount,        --参与某活动某规则下单减免金额
               sum(order_original_amount) order_original_amount,    --参与某活动某规则下单原始金额
               sum(order_final_amount) order_final_amount,          --参与某活动某规则下单最终金额
               sum(payment_count) payment_count,                    --参与某活动某规则支付次数
               sum(payment_reduce_amount) payment_reduce_amount,    --参与某活动某规则支付减免金额
               sum(payment_amount) payment_amount                   --参与某活动某规则支付金额
        from
        (
            select activity_rule_id,
                   activity_id,
                   dt,
                   0 order_count,                                       --参与某活动某规则下单次数
                   0 order_reduce_amount,                               --参与某活动某规则下单减免金额
                   0 order_original_amount,                             --参与某活动某规则下单原始金额
                   0 order_final_amount,                                --参与某活动某规则下单最终金额
                   count(*) payment_count,                               --参与某活动某规则支付次数
                   sum(split_activity_amount) payment_reduce_amount,     --参与某活动某规则支付减免金额
                   sum(split_final_amount) payment_amount                --参与某活动某规则支付金额
            from
            (
                select split_final_amount,      --最终价格分摊
                       order_id,                --订单id
                       activity_rule_id,        --活动规则id
                       activity_id,             --活动id
                       split_activity_amount    --活动优惠分摊
                from dwd_order_detail           --订单明细事实表
                where dt <= '2021-06-08' and activity_rule_id is not null   -- dt是下单日期,不是支付日期
            ) t1
            join
            (
                --求被支付的订单详请
                select order_id,                --订单id
                       dt
                from dwd_payment_info
                where dt <= '2021-06-08'        -- dt是支付日期
            ) t2 on t1.order_id = t2.order_id
            group by activity_rule_id,activity_id,dt
            union all
            select activity_rule_id,
                   activity_id,
                   dt,
                   count(*) order_count,                            --参与某活动某规则下单次数
                   sum(split_activity_amount) order_reduce_amount,  --参与某活动某规则下单减免金额
                   sum(original_amount) order_original_amount,      --参与某活动某规则下单原始金额
                   sum(split_final_amount) order_final_amount,      --参与某活动某规则下单最终金额
                   0 payment_count,
                   0 payment_reduce_amount,
                   0 payment_amount
            from dwd_order_detail
            where dt <= '2021-06-08' and activity_rule_id is not null
            group by activity_rule_id,activity_id,dt
        ) tmp
        group by activity_rule_id,activity_id,dt
    ) t4
    on t3.activity_rule_id = t4.activity_rule_id and t3.dt = t4.dt;

        (2)每日装载

    insert overwrite table dws_activity_info_daycount partition (dt='2021-06-09')
    select t3.activity_rule_id,                 --活动id
           t3.activity_id,                      --活动规则id
           nvl(order_count,0),                  --参与某活动某规则下单次数
           nvl(order_reduce_amount,0.0),        --参与某活动某规则下单减免金额
           nvl(order_original_amount,0.0),      --参与某活动某规则下单原始金额
           nvl(order_final_amount,0.0),         --参与某活动某规则下单最终金额
           nvl(payment_count,0),                --参与某活动某规则支付次数
           nvl(payment_reduce_amount,0.0),      --参与某活动某规则支付减免金额
           nvl(payment_amount,0.0)             --参与某活动某规则支付金额
    from
    (
        -- 求理论上 可能产生行为的活动id和日期
        select activity_id,                 --活动id
               activity_rule_id             --活动规则id
        from dim_activity_rule_info
        where dt = '2021-06-09'
          and dt >= start_time and dt <= end_time     --商城APP上线时间应该在活动时间范围内
    ) t3
    left join
    (
        -- 实际上 产生行为的活动统计的指标
        select activity_rule_id,
               activity_id,
               sum(order_count) order_count,                        --参与某活动某规则下单次数
               sum(order_reduce_amount) order_reduce_amount,        --参与某活动某规则下单减免金额
               sum(order_original_amount) order_original_amount,    --参与某活动某规则下单原始金额
               sum(order_final_amount) order_final_amount,          --参与某活动某规则下单最终金额
               sum(payment_count) payment_count,                    --参与某活动某规则支付次数
               sum(payment_reduce_amount) payment_reduce_amount,    --参与某活动某规则支付减免金额
               sum(payment_amount) payment_amount                   --参与某活动某规则支付金额
        from
        (
            select activity_rule_id,
                   activity_id,
                   0 order_count,                                       --参与某活动某规则下单次数
                   0 order_reduce_amount,                               --参与某活动某规则下单减免金额
                   0 order_original_amount,                             --参与某活动某规则下单原始金额
                   0 order_final_amount,                                --参与某活动某规则下单最终金额
                   count(*) payment_count,                               --参与某活动某规则支付次数
                   sum(split_activity_amount) payment_reduce_amount,     --参与某活动某规则支付减免金额
                   sum(split_final_amount) payment_amount                --参与某活动某规则支付金额
            from dwd_order_detail
            where (dt = '2021-06-09' or dt=date_sub('2021-06-09',1))  and activity_rule_id is not null
                and order_id in (
                    --求被支付的订单详请
                    select order_id                --订单id
                    from dwd_payment_info
                    where dt = '2021-06-09'        -- dt是支付日期
                )
            group by activity_rule_id, activity_id
            union all
            select activity_rule_id,
                   activity_id,
                   count(*) order_count,                            --参与某活动某规则下单次数
                   sum(split_activity_amount) order_reduce_amount,  --参与某活动某规则下单减免金额
                   sum(original_amount) order_original_amount,      --参与某活动某规则下单原始金额
                   sum(split_final_amount) order_final_amount,      --参与某活动某规则下单最终金额
                   0 payment_count,
                   0 payment_reduce_amount,
                   0 payment_amount
            from dwd_order_detail
            where dt = '2021-06-09' and activity_rule_id is not null    --只取参与了活动的订单
            group by activity_rule_id,activity_id
        ) tmp
        group by activity_rule_id,activity_id
    ) t4
    on t3.activity_rule_id = t4.activity_rule_id;

      3)查询加载结果

    7.2.6 地区主题

      1)建表语句

    drop table if exists dws_area_stats_daycount;
    create external table dws_area_stats_daycount(
        --dwd_page_log
        `province_id` string comment '地区编号',
        `visit_count` bigint comment '访客访问次数',
        `login_count` bigint comment '用户访问次数',
        `visitor_count` bigint comment '访客人数',
        `user_count` bigint comment '用户人数',
        --dwd_order_info
        `order_count` bigint comment '下单次数',
        `order_original_amount` decimal(16,2) comment '下单原始金额',
        `order_final_amount` decimal(16,2) comment '下单最终金额',
        --dwd_payment_info
        `payment_count` bigint comment '支付次数',
        `payment_amount` decimal(16,2) comment '支付金额',
        --dwd_order_refund_info
        `refund_order_count` bigint comment '退单次数',
        `refund_order_amount` decimal(16,2) comment '退单金额',
        --dwd_refund_payment
        `refund_payment_count` bigint comment '退款次数',
        `refund_payment_amount` decimal(16,2) comment '退款金额'
    ) comment '每日地区统计表'
    partitioned by (`dt` string)
    stored as parquet
    location '/warehouse/gmall/dws/dws_area_stats_daycount/'
    tblproperties ("parquet.compression"="lzo");

      2)数据装载

        (1)首日装载

    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table dws_area_stats_daycount partition (dt)
    select province_id, --地区编号
    sum(visit_count), --访客访问次数
    sum(login_count), --用户访问次数
    sum(visitor_count), --访客人数
    sum(user_count), --用户人数
    sum(order_count), --下单次数
    sum(order_original_amount), --下单原始金额
    sum(order_final_amount), --下单最终金额
    sum(payment_count), --支付次数
    sum(payment_amount), --支付金额
    sum(refund_order_count), --退单次数
    sum(refund_order_amount), --退单金额
    sum(refund_payment_count), --退款次数
    sum(refund_payment_amount), --退款金额
    dt
    from
    (
    select id province_id, --地区编号
    visit_count, --访客访问次数
    login_count, --用户访问次数
    visitor_count, --访客人数
    user_count, --用户人数
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount,
    dt
    from
    (
    select area_code, --地区编号
    count(*) visit_count, --访客访问次数
    count(user_id) login_count, --用户访问次数
    count(distinct mid_id) visitor_count, --访客人数
    count(distinct user_id) user_count, --用户人数
    dt
    from dwd_page_log --页面日志表
    where dt <= '2021-06-08' and last_page_id is null
    group by area_code,dt
    ) t1
    left join dim_base_province area on t1.area_code = area.area_code
    union all
    select province_id, --地区id
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    count(*) order_count, --下单次数
    sum(original_amount) order_original_amount, --下单原始金额
    sum(final_amount) order_final_amount, --下单最终金额
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount,
    date_format(create_time,'yyyy-MM-dd') dt --以订单创建时间作为分区时间字段
    from dwd_order_info
    where dt <= '2021-06-08' or dt = '9999-99-99'
    group by province_id,date_format(create_time,'yyyy-MM-dd')
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    count(*) payment_count, --支付次数
    sum(payment_amount) payment_amount, --支付金额
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount,
    dt
    from dwd_payment_info
    where dt <= '2021-06-08'
    group by province_id,dt
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    count(*) refund_order_count, --退单次数
    sum(refund_amount) refund_order_amount, --退单金额
    0 refund_payment_count,
    0 refund_payment_amount,
    dt
    from dwd_order_refund_info
    where dt <= '2021-06-08'
    group by province_id,dt
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    count(*) refund_payment_count, --退款次数
    sum(refund_amount) refund_payment_amount, --退款金额
    dt
    from dwd_refund_payment
    where dt <= '2021-06-08'
    group by province_id,dt
    ) tmp
    group by province_id,dt;

        (2)每日装载

    insert overwrite table dws_area_stats_daycount partition (dt = '2021-06-09')
    select province_id, --地区编号
    sum(visit_count), --访客访问次数
    sum(login_count), --用户访问次数
    sum(visitor_count), --访客人数
    sum(user_count), --用户人数
    sum(order_count), --下单次数
    sum(order_original_amount), --下单原始金额
    sum(order_final_amount), --下单最终金额
    sum(payment_count), --支付次数
    sum(payment_amount), --支付金额
    sum(refund_order_count), --退单次数
    sum(refund_order_amount), --退单金额
    sum(refund_payment_count), --退款次数
    sum(refund_payment_amount) --退款金额
    from
    (
    select id province_id, --地区编号
    visit_count, --访客访问次数
    login_count, --用户访问次数
    visitor_count, --访客人数
    user_count, --用户人数
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount
    from
    (
    select area_code, --地区编号
    count(*) visit_count, --访客访问次数
    count(user_id) login_count, --用户访问次数
    count(distinct mid_id) visitor_count, --访客人数
    count(distinct user_id) user_count --用户人数
    from dwd_page_log --页面日志表
    where dt = '2021-06-09' and last_page_id is null
    group by area_code,dt
    ) t1
    left join dim_base_province area on t1.area_code = area.area_code
    union all
    select province_id, --地区id
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    count(*) order_count, --下单次数
    sum(original_amount) order_original_amount, --下单原始金额
    sum(final_amount) order_final_amount, --下单最终金额
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount
    from dwd_order_info
    where dt = '2021-06-09' or dt = '9999-99-99'
    group by province_id
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    count(*) payment_count, --支付次数
    sum(payment_amount) payment_amount, --支付金额
    0 refund_order_count,
    0 refund_order_amount,
    0 refund_payment_count,
    0 refund_payment_amount
    from dwd_payment_info
    where dt = '2021-06-09'
    group by province_id
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    count(*) refund_order_count, --退单次数
    sum(refund_amount) refund_order_amount, --退单金额
    0 refund_payment_count,
    0 refund_payment_amount
    from dwd_order_refund_info
    where dt = '2021-06-09'
    group by province_id
    union all
    select province_id,
    0 visit_count,
    0 login_count,
    0 visitor_count,
    0 user_count,
    0 order_count,
    0 order_original_amount,
    0 order_final_amount,
    0 payment_count,
    0 payment_amount,
    0 refund_order_count,
    0 refund_order_amount,
    count(*) refund_payment_count, --退款次数
    sum(refund_amount) refund_payment_amount --退款金额
    from dwd_refund_payment
    where dt = '2021-06-09'
    group by province_id
    ) tmp
    group by province_id;

      3)查询加载结果

    7.2.7 DWS首日数据装载脚本

      1)编写脚本

        (1)在/home/atguigu/bin目录下创建脚本dwd_to_dws_init.sh

    vim dwd_to_dws_init.sh
    #!/bin/bash
    
    APP=gmall
    
    if [ -n "$2" ] ;then
       do_date=$2
    else 
       echo "请传入日期参数"
       exit
    fi
    
    dws_visitor_action_daycount="
    insert overwrite table ${APP}.dws_visitor_action_daycount partition (dt = '$do_date')
    select t1.mid_id,           --设备id
           brand,               --设备品牌
           model,               --设备型号
           is_new,              --是否首次访问
           channel,             --渠道
           os,                  --操作系统
           area_code,           --地区ID
           version_code,        --应用版本
           visit_count,         --访问次数
           page_stats           --每个设备访问所有页面的统计信息聚合的结果(数组里装载的是一个结构体)
    from
    (
        select mid_id,                                                          --设备id
               concat_ws('|',collect_set(brand)) brand,                         --设备品牌
               concat_ws('|',collect_set(model)) model,                         --设备型号
                if (array_contains(collect_set(is_new),'0'),'0','1') is_new,    --是否首次访问
               collect_set(channel) channel,                                    --渠道
               collect_set(os) os,                                              --操作系统
               collect_set(area_code) area_code,                                --地区ID
               collect_set(version_code) version_code,                          --应用版本
               sum( if (last_page_id is null,1,0)) visit_count                  --访问次数
        from ${APP}.dwd_page_log
        where dt = '$do_date'
        group by mid_id
    ) t1
    join
    (
        --在当天中,每个设备访问所有页面的统计信息聚合的结果
        select mid_id,collect_list(page_struct) page_stats
        from
        (
            --在当天中,每个设备访问每个页面的统计信息
            select mid_id,named_struct('page_id',page_id,'page_count',count(*),'during_time',sum(during_time)) page_struct
            from ${APP}.dwd_page_log
            where dt = '$do_date'
            group by mid_id,page_id
        ) tmp
        group by mid_id
    ) t2
    on t1.mid_id = t2.mid_id;
    "
    
    dws_area_stats_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table ${APP}.dws_area_stats_daycount partition (dt)
    select province_id,                     --地区编号
           sum(visit_count),                --访客访问次数
           sum(login_count),                --用户访问次数
           sum(visitor_count),              --访客人数
           sum(user_count),                 --用户人数
           sum(order_count),                --下单次数
           sum(order_original_amount),      --下单原始金额
           sum(order_final_amount),         --下单最终金额
           sum(payment_count),              --支付次数
           sum(payment_amount),             --支付金额
           sum(refund_order_count),         --退单次数
           sum(refund_order_amount),        --退单金额
           sum(refund_payment_count),       --退款次数
           sum(refund_payment_amount),      --退款金额
           dt
    from
    (
        select  id province_id,          --地区编号
                visit_count,             --访客访问次数
                login_count,             --用户访问次数
                visitor_count,           --访客人数
                user_count,              --用户人数
                0 order_count,           
                0 order_original_amount, 
                0 order_final_amount,    
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount,
                dt
        from
        (
            select area_code,                               --地区编号
                   count(*) visit_count,                    --访客访问次数
                   count(user_id) login_count,              --用户访问次数
                   count(distinct mid_id) visitor_count,    --访客人数
                   count(distinct user_id) user_count,      --用户人数
                   dt
            from ${APP}.dwd_page_log           --页面日志表
            where dt <= '$do_date' and last_page_id is null
            group by area_code,dt
        ) t1
        left join ${APP}.dim_base_province area on t1.area_code = area.area_code
        union all
        select  province_id,                                 --地区id
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                count(*) order_count,                        --下单次数
                sum(original_amount) order_original_amount,  --下单原始金额
                sum(final_amount) order_final_amount,        --下单最终金额
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount,
                date_format(create_time,'yyyy-MM-dd') dt     --以订单创建时间作为分区时间字段
        from ${APP}.dwd_order_info
        where dt <= '$do_date' or dt = '9999-99-99'
        group by province_id,date_format(create_time,'yyyy-MM-dd')
        union all
        select  province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                 --支付次数
                sum(payment_amount) payment_amount,     --支付金额
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount,
                dt
        from ${APP}.dwd_payment_info
        where dt <= '$do_date'
        group by province_id,dt
        union all
        select  province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_amount,
                count(*) refund_order_count,                --退单次数
                sum(refund_amount) refund_order_amount,     --退单金额
                0 refund_payment_count,
                0 refund_payment_amount,
                dt
        from ${APP}.dwd_order_refund_info
        where dt <= '$do_date'
        group by province_id,dt
        union all
        select province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                count(*) refund_payment_count,              --退款次数
                sum(refund_amount) refund_payment_amount,   --退款金额
                dt
        from ${APP}.dwd_refund_payment
        where dt <= '$do_date'
        group by province_id,dt
    ) tmp
    group by province_id,dt;
    "
    
    dws_user_action_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table ${APP}.dws_user_action_daycount partition (dt)
    select  user_id,
            sum(login_count) ,
            sum(cart_count),
            sum(favor_count),
            sum(order_count),
            sum(order_activity_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_count),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(coupon_get_count),
            sum(coupon_using_count),
            sum(coupon_used_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            max(if( order_detail_stats[0].sku_id = '-1' , null ,order_detail_stats )) order_detail_stats,
            dt
    from
         (
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    collect_list(sku_struct) order_detail_stats
             from (
                 select user_id,
                        dt,
                        named_struct('sku_id',sku_id,       --skuid
                        'sku_num',sum(sku_num),                --商品数量
                        'order_count',count(*),                --下单次数
                        'activity_reduce_amount',cast (sum(split_activity_amount) as decimal(16,2)), --活动优惠分摊
                        'coupon_reduce_amount',cast(sum(split_coupon_amount) as decimal(16,2)),    --优惠券优惠分摊
                        'original_amount',cast(sum(original_amount) as decimal(16,2)),         --原始价格
                        'final_amount',cast(sum(split_final_amount) as decimal(16,2))          --最终价格分摊
                        ) sku_struct    --结构体
                 from ${APP}.dwd_order_detail
                 where dt <='$do_date'
                 group by user_id,dt,sku_id
             ) tmp
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    sum( if (last_page_id is not null,1,0)) login_count,    --登录次数
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_page_log
             where dt = '$do_date' and user_id is not null
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    sum( if (action_id = 'cart_add',1,0)) cart_count,       --加入购物车次数
                    sum( if (action_id = 'favor_add',1,0)) favor_count,     --收藏次数
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_action_log
             where dt = '$do_date' and user_id is not null and action_id in ('cart_add','favor_add')
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    count(distinct order_id) order_count,                       --下单次数
                    count(activity_rule_id) order_activity_count,               --订单参与活动次数
                    sum(split_activity_amount) order_activity_reduce_amount,    --订单减免金额(活动)
                    count(coupon_id) order_coupon_count,                        --订单用券次数
                    sum(split_coupon_amount) order_coupon_reduce_amount,        --订单减免金额(优惠券)
                    sum(original_amount) order_original_amount,                 --订单单原始金额
                    sum(split_final_amount) order_final_amount,                 --订单总金额
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_order_detail
             where dt <= '$do_date'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    count(*) payment_count,                 --支付次数
                    sum(payment_amount) payment_amount,     --支付金额
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_payment_info
             where dt <= '$do_date'
             group by user_id,dt
             union all
             -- 退单次数:  用户申请退回的一笔订单的一种商品,算一次
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    count(*) refund_order_count,            --退单次数
                    sum(refund_num) refund_order_num,       --退单件数
                    sum(refund_amount) refund_order_amount, --退单金额
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_order_refund_info
             where dt <= '$do_date'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    count(*) refund_payment_count,              --退款次数
                    sum(refund_num) refund_payment_num,   --退款件数
                    sum(refund_amount) refund_payment_amount,   --退款金额
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        dt,
                        refund_amount,      --退款金额
                        sku_id,
                        order_id
                 from ${APP}.dwd_refund_payment
                 where dt <= '$do_date'
             ) t1
             left join
             (
                 select refund_num,   --退款件数
                        sku_id,
                        order_id
                 from ${APP}.dwd_order_refund_info
                 where dt <= '$do_date'
             ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    sum(coupon_get_count) coupon_get_count,     --优惠券领取次数
                    sum(coupon_using_count) coupon_using_count, --优惠券使用(下单)次数
                    sum(coupon_used_count)  coupon_used_count,  --优惠券使用(支付)次数
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        date_format(get_time,'yyyy-MM-dd') dt,  --优惠券领取时间
                        count(*) coupon_get_count,           --优惠券领取次数
                        0 coupon_using_count,                --优惠券使用(下单)次数
                        0 coupon_used_count                  --优惠券使用(支付)次数
                 from ${APP}.dwd_coupon_use
                 where dt <= '$do_date' or dt='9999-99-99'    --dt: 优惠券的完成时间
                 group by user_id,date_format(get_time,'yyyy-MM-dd')
                 union all
                 select user_id,
                        date_format(using_time,'yyyy-MM-dd') dt,
                        0 coupon_get_count,                  --优惠券领取次数
                        count(*) coupon_using_count,         --优惠券使用(下单)次数
                        0 coupon_used_count                  --优惠券使用(支付)次数
                 from ${APP}.dwd_coupon_use
                 where dt <= '$do_date' or dt='9999-99-99' and using_time is not null
                 group by user_id,date_format(using_time,'yyyy-MM-dd')
                 union all
                 select user_id,
                        date_format(used_time,'yyyy-MM-dd') dt,
                        0 coupon_get_count,                   --优惠券领取次数
                        0 coupon_using_count,                 --优惠券使用(下单)次数
                        count(*) coupon_used_count            --优惠券使用(支付)次数
                 from ${APP}.dwd_coupon_use
                 where dt <= '$do_date' and used_time is not null
                 group by user_id, date_format(used_time,'yyyy-MM-dd')
             ) tmp2
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    sum( if (appraise = '1201',1,0)) appraise_good_count,       --好评数
                    sum( if (appraise = '1202',1,0)) appraise_mid_count,        --中评数
                    sum( if (appraise = '1203',1,0)) appraise_bad_count,        --差评数
                    sum( if (appraise = '1204',1,0)) appraise_default_count,    --默认评价数
                    array(named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_comment_info
             where dt <= '$do_date'
             group by user_id,dt
         ) tmp3
    group by user_id,dt;
    "
    
    dws_activity_info_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table ${APP}.dws_activity_info_daycount partition (dt)
    select t3.activity_rule_id,                 --活动id
           t3.activity_id,                      --活动规则id
           nvl(order_count,0),                  --参与某活动某规则下单次数
           nvl(order_reduce_amount,0.0),        --参与某活动某规则下单减免金额
           nvl(order_original_amount,0.0),      --参与某活动某规则下单原始金额
           nvl(order_final_amount,0.0),         --参与某活动某规则下单最终金额
           nvl(payment_count,0),                --参与某活动某规则支付次数
           nvl(payment_reduce_amount,0.0),      --参与某活动某规则支付减免金额
           nvl(payment_amount,0.0),             --参与某活动某规则支付金额
           t3.dt
    from
    (
        -- 求理论上 可能产生行为的活动id和日期
        select activity_id,                 --活动id
               activity_rule_id,            --活动规则id
               date_id dt
        from
        (
            select activity_id,             --活动id
                   activity_rule_id,        --活动规则id
                   start_time,              --活动开始时间
                   end_time                 --活动结束时间
            from ${APP}.dim_activity_rule_info
            where dt = '$do_date'
        ) t1
        join
        (
            select date_id
            from ${APP}.dim_date_info
            where date_id between date_sub('$do_date',3) and '$do_date'
        ) t2
        where date_id >= start_time and date_id <= end_time     --商城APP上线时间应该在活动时间范围内
    ) t3
    left join
    (
        -- 实际上 产生行为的活动统计的指标
        select activity_rule_id,
               activity_id,
               dt,
               sum(order_count) order_count,                        --参与某活动某规则下单次数
               sum(order_reduce_amount) order_reduce_amount,        --参与某活动某规则下单减免金额
               sum(order_original_amount) order_original_amount,    --参与某活动某规则下单原始金额
               sum(order_final_amount) order_final_amount,          --参与某活动某规则下单最终金额
               sum(payment_count) payment_count,                    --参与某活动某规则支付次数
               sum(payment_reduce_amount) payment_reduce_amount,    --参与某活动某规则支付减免金额
               sum(payment_amount) payment_amount                   --参与某活动某规则支付金额
        from
        (
            select activity_rule_id,
                   activity_id,
                   dt,
                   0 order_count,                                       --参与某活动某规则下单次数
                   0 order_reduce_amount,                               --参与某活动某规则下单减免金额
                   0 order_original_amount,                             --参与某活动某规则下单原始金额
                   0 order_final_amount,                                --参与某活动某规则下单最终金额
                   count(*) payment_count,                               --参与某活动某规则支付次数
                   sum(split_activity_amount) payment_reduce_amount,     --参与某活动某规则支付减免金额
                   sum(split_final_amount) payment_amount                --参与某活动某规则支付金额
            from
            (
                select split_final_amount,      --最终价格分摊
                       order_id,                --订单id
                       activity_rule_id,        --活动规则id
                       activity_id,             --活动id
                       split_activity_amount    --活动优惠分摊
                from ${APP}.dwd_order_detail           --订单明细事实表
                where dt <= '$do_date' and activity_rule_id is not null   -- dt是下单日期,不是支付日期
            ) t1
            join
            (
                --求被支付的订单详请
                select order_id,                --订单id
                       dt
                from ${APP}.dwd_payment_info
                where dt <= '$do_date'        -- dt是支付日期
            ) t2 on t1.order_id = t2.order_id
            group by activity_rule_id,activity_id,dt
            union all
            select activity_rule_id,
                   activity_id,
                   dt,
                   count(*) order_count,                            --参与某活动某规则下单次数
                   sum(split_activity_amount) order_reduce_amount,  --参与某活动某规则下单减免金额
                   sum(original_amount) order_original_amount,      --参与某活动某规则下单原始金额
                   sum(split_final_amount) order_final_amount,      --参与某活动某规则下单最终金额
                   0 payment_count,
                   0 payment_reduce_amount,
                   0 payment_amount
            from ${APP}.dwd_order_detail
            where dt <= '$do_date' and activity_rule_id is not null
            group by activity_rule_id,activity_id,dt
        ) tmp
        group by activity_rule_id,activity_id,dt
    ) t4
    on t3.activity_rule_id = t4.activity_rule_id and t3.dt = t4.dt;"
    
    dws_sku_action_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;    --开启动态分区
    insert overwrite table ${APP}.dws_sku_action_daycount partition (dt)
    select  sku_id,
            sum(order_count),
            sum(order_num),
            sum(order_activity_count),
            sum(order_coupon_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_num),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(cart_count),
            sum(favor_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            dt
    from
    (
        select  sku_id,
                dt,
                count(*) order_count,                                       --被下单次数
                sum(sku_num) order_num,                                     --被下单件数
                count(activity_rule_id) order_activity_count,               --参与活动被下单次数
                count(coupon_id) order_coupon_count,                        --使用优惠券被下单次数
                sum(split_activity_amount) order_activity_reduce_amount,    --优惠金额(活动)
                sum(split_coupon_amount) order_coupon_reduce_amount,        --优惠金额(优惠券)
                sum(original_amount) order_original_amount,                 --被下单原价金额
                sum(split_final_amount) order_final_amount,                 --被下单最终金额
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_order_detail
        where dt <= '$do_date'
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                     --被支付次数
                sum(sku_num) payment_num,                   --被支付件数
                sum(split_final_amount) payment_amount,     --被支付金额
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select sku_id,
                   split_final_amount,      --被下单最终金额
                   order_id,                --订单id
                   sku_num                  --商品数量
            from ${APP}.dwd_order_detail
            where dt <= '$do_date'        -- dt是下单日期,不是支付日期
        ) t1
        join
        (
            select order_id,
                   dt
            from ${APP}.dwd_payment_info
            where dt <= '$do_date'        -- dt是支付日期
        ) t2 on t1.order_id = t2.order_id
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                count(*) refund_order_count,                 --被退单次数
                sum(refund_num) refund_order_num,            --被退单件数
                sum(refund_amount) refund_order_amount,      --被退单金额
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_order_refund_info
        where dt <= '$do_date'
        group by sku_id,dt
        union all
        select  t1.sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                count(*) refund_payment_count,              --被退款次数
                sum(refund_num) refund_payment_num,         --被退款件数
                sum(refund_amount) refund_payment_amount,   --被退款金额
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select refund_amount,   --退款金额
                   sku_id,
                   order_id,
                   dt
            from ${APP}.dwd_refund_payment     --退款表
            where dt <= '$do_date'
        ) t1
        left join
        (
            select refund_num,      --退款件数
                   sku_id,
                   order_id         --退单表
            from ${APP}.dwd_order_refund_info
            where dt <= '$do_date'
        ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
        group by t1.sku_id,dt
        union all
        select  item sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                sum( if (action_id = 'cart_add',1,0)) cart_count,       --被加入购物车次数
                sum( if (action_id = 'favor_add',1,0)) favor_count,     --被收藏次数
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_action_log
        where dt <= '$do_date' and action_id in ('cart_add', 'favor_add')
        group by item,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                sum( if (appraise = '1201',1,0)) appraise_good_count,         --好评数
                sum( if (appraise = '1202',1,0)) appraise_mid_count,          --中评数
                sum( if (appraise = '1203',1,0)) appraise_bad_count,          --差评数
                sum( if (appraise = '1204',1,0)) appraise_default_count       --默认评价数
        from ${APP}.dwd_comment_info
        where dt <= '$do_date'
        group by sku_id,dt
    ) tmp
    group by sku_id,dt;
    "
    
    dws_coupon_info_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table ${APP}.dws_coupon_info_daycount partition (dt)
    select t3.coupon_id,                        --优惠券id
           nvl(get_count,0),                    --领取次数
           nvl(order_count,0),                  --使用(下单)次数
           nvl(order_reduce_amount,0.0) ,       --使用某券的订单优惠金额
           nvl(order_original_amount,0.0) ,     --使用某券的订单原价金额
           nvl(order_final_amount,0.0) ,        --使用某券的订单总价金额
           nvl(payment_count,0) ,               --使用(支付)次数
           nvl(payment_reduce_amount,0.0) ,     --使用某券的支付优惠金额
           nvl(payment_amount,0.0) ,            --使用某券支付的总金额
           nvl(expire_count,0) ,                --过期次数:为null,代表永久有效
           t3.dt
    from
    (
        --理论上产生行为的 couponid和行为产生的日期
        select  id coupon_id,        --优惠券id
                date_id dt
        from
        (
             -- 求截至到2021-06-08日所有的优惠券
            select id,              --优惠券id
                   start_time,      --可以领取的开始日期
                   create_time,     --创建时间
                   expire_time      --过期时间
            from ${APP}.dim_coupon_info
            where dt = '$do_date'
        ) t1
        join
        (
            --取商城app上线第一天 到 6月8日所有的日期
            select date_id
            from ${APP}.dim_date_info
            where date_id between date_sub('$do_date',3) and '$do_date'
        ) t2
        where date_id >= nvl(start_time,create_time) and date_id <= nvl(expire_time,'9999-99-99')
    ) t3
    left join
    (
        --实际上产生行为的 coupon的各种指标
        select  coupon_id,
                dt,
                sum(get_count) get_count,                           --领取次数
                sum(order_count) order_count,                       --使用(下单)次数
                sum(order_reduce_amount) order_reduce_amount,       --使用某券的订单优惠金额
                sum(order_original_amount) order_original_amount,   --使用某券的订单原价金额
                sum(order_final_amount) order_final_amount,         --使用某券的订单总价金额
                sum(payment_count) payment_count,                   --使用(支付)次数
                sum(payment_reduce_amount) payment_reduce_amount,   --使用某券的支付优惠金额
                sum(payment_amount) payment_amount,                 --使用某券支付的总金额
                sum(expire_count) expire_count                      --过期次数
        from
        (
            select  coupon_id,
                    dt,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    sum(split_coupon_amount) payment_reduce_amount, --使用某券的支付优惠金额
                    sum(split_final_amount) payment_amount          --使用某券支付的总金额
            from
            (
                select split_final_amount,      --最终价格分摊
                       order_id,                --订单id
                       split_coupon_amount,     --优惠券优惠分摊
                       coupon_id                --优惠券id
                from ${APP}.dwd_order_detail           --订单明细事实表表
                where dt <= '$do_date' and coupon_id is not null      --dt是下单日期,不是支付日期
            ) t1
            join
            (
                --求被支付的订单详请
                select order_id,
                       dt
                from ${APP}.dwd_payment_info           --支付事实表表
                where dt <= '$do_date'        -- dt是支付日期
            ) t2 on t1.order_id = t2.order_id
            group by coupon_id,dt
            union all
            select  coupon_id,
                    dt,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    sum(split_coupon_amount) order_reduce_amount,       --使用某券的订单优惠金额
                    sum(original_amount) order_original_amount,         --使用某券的订单原价金额
                    sum(split_final_amount) order_final_amount,         --使用某券的订单总价金额
                    0 payment_reduce_amount,
                    0 payment_amount
            from ${APP}.dwd_order_detail
            where dt <= '$do_date' and coupon_id is not null  --只取使用了优惠券的订单
            group by coupon_id,dt
            union all
            select  coupon_id,
                    dt,
                    sum(get_count) get_count,           --领取次数
                    sum(order_count) order_count,       --使用(下单)次数
                    sum(payment_count) payment_count,   --使用(支付)次数
                    sum(expire_count) expire_count,     ----过期次数
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_reduce_amount,
                    0 payment_amount
            from
            (
                --求每种券在每一天的领取次数
                select  coupon_id,
                        date_format(get_time,'yyyy-MM-dd') dt,      --优惠券领取时间
                        count(*) get_count,                          --领取次数
                        0 order_count,
                        0 payment_count,
                        0 expire_count
                from ${APP}.dwd_coupon_use     --优惠券领用事实表
                where dt <= '$do_date' or dt='9999-99-99'         --dt: 优惠券的完成时间
                group by coupon_id,date_format(get_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的下单次数
                select coupon_id,
                       date_format(using_time,'yyyy-MM-dd') dt,    --使用时间(下单)
                       0 get_count,
                       count(*) order_count,                    --使用(下单)次数
                       0 payment_count,
                       0 expire_count
                from ${APP}.dwd_coupon_use
                where dt <= '$do_date' or dt='9999-99-99' and using_time is not null
                group by coupon_id,date_format(using_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的支付次数
                select  coupon_id,
                        date_format(used_time,'yyyy-MM-dd') dt,     --使用时间(支付)
                        0 get_count,
                        0 order_count,
                        count(*) payment_count,                     --使用(支付)次数
                        0 expire_count
                from ${APP}.dwd_coupon_use
                where dt <= '$do_date' or dt='9999-99-99' and used_time is not null   --dt: 优惠券的完成时间
                group by coupon_id,date_format(used_time,'yyyy-MM-dd')
                union all
                --求每种券在每一天的过期次数
                select  coupon_id,
                        date_format(expire_time,'yyyy-MM-dd') dt,   --过期时间
                        0 get_count,
                        0 order_count,
                        0 payment_count,
                        count(*) expire_count                       --过期次数
                from ${APP}.dwd_coupon_use
                where dt <= '$do_date' or dt='9999-99-99' and expire_time is not null
                group by coupon_id,date_format(expire_time,'yyyy-MM-dd')
            )tmp
            group by coupon_id,dt
        ) tmp2
        group by coupon_id, dt
    ) t4
    on t3.coupon_id = t4.coupon_id and t3.dt = t4.dt;
    "
    
    case $1 in
        "dws_visitor_action_daycount" )
            hive -e "$dws_visitor_action_daycount"
        ;;
        "dws_user_action_daycount" )
            hive -e "$dws_user_action_daycount"
        ;;
        "dws_activity_info_daycount" )
            hive -e "$dws_activity_info_daycount"
        ;;
        "dws_area_stats_daycount" )
            hive -e "$dws_area_stats_daycount"
        ;;
        "dws_sku_action_daycount" )
            hive -e "$dws_sku_action_daycount"
        ;;
        "dws_coupon_info_daycount" )
            hive -e "$dws_coupon_info_daycount"
        ;;
        "all" )
            hive -e "$dws_visitor_action_daycount$dws_user_action_daycount$dws_activity_info_daycount$dws_area_stats_daycount$dws_sku_action_daycount$dws_coupon_info_daycount"
        ;;
    esac

        (2)增加执行权限

    chmod +x dwd_to_dws_init.sh

      2)脚本使用

        (1)执行脚本

    dwd_to_dws_init.sh all 2021-06-08

        (2)查看数据是否导入成功

    7.2.8 DWS每日数据装载脚本

      1)编写脚本

        (1)在/home/atguigu/bin目录下创建脚本dwd_to_dws.sh

    vim dwd_to_dws.sh
    #!/bin/bash
    
    APP=gmall
    # 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
    if [ -n "$2" ] ;then
        do_date=$2
    else 
        do_date= date -d "-1 day" +%F 
    fi
    
    dws_visitor_action_daycount="
    insert overwrite table ${APP}.dws_visitor_action_daycount partition (dt = '$do_date')
    select t1.mid_id,           --设备id
           brand,               --设备品牌
           model,               --设备型号
           is_new,              --是否首次访问
           channel,             --渠道
           os,                  --操作系统
           area_code,           --地区ID
           version_code,        --应用版本
           visit_count,         --访问次数
           page_stats           --每个设备访问所有页面的统计信息聚合的结果(数组里装载的是一个结构体)
    from
    (
        select mid_id,                                                          --设备id
               concat_ws('|',collect_set(brand)) brand,                         --设备品牌
               concat_ws('|',collect_set(model)) model,                         --设备型号
                if (array_contains(collect_set(is_new),'0'),'0','1') is_new,    --是否首次访问
               collect_set(channel) channel,                                    --渠道
               collect_set(os) os,                                              --操作系统
               collect_set(area_code) area_code,                                --地区ID
               collect_set(version_code) version_code,                          --应用版本
               sum( if (last_page_id is null,1,0)) visit_count                  --访问次数
        from ${APP}.dwd_page_log
        where dt = '$do_date'
        group by mid_id
    ) t1
    join
    (
        --在当天中,每个设备访问所有页面的统计信息聚合的结果
        select mid_id,collect_list(page_struct) page_stats
        from
        (
            --在当天中,每个设备访问每个页面的统计信息
            select mid_id,named_struct('page_id',page_id,'page_count',count(*),'during_time',sum(during_time)) page_struct
            from ${APP}.dwd_page_log
            where dt = '$do_date'
            group by mid_id,page_id
        ) tmp
        group by mid_id
    ) t2
    on t1.mid_id = t2.mid_id;
    "
    
    dws_user_action_daycount="
    insert overwrite table ${APP}.dws_user_action_daycount partition (dt='$do_date')
    select  user_id,
            sum(login_count) ,
            sum(cart_count),
            sum(favor_count),
            sum(order_count),
            sum(order_activity_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_count),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(coupon_get_count),
            sum(coupon_using_count),
            sum(coupon_used_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            max(if( order_detail_stats[0].sku_id = '-1' , null ,order_detail_stats )) order_detail_stats
    from
         (
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                    collect_list(sku_struct) order_detail_stats
             from (
                 select user_id,
                        dt,
                        named_struct('sku_id',sku_id,       --skuid
                        'sku_num',sum(sku_num),                --商品数量
                        'order_count',count(*),                --下单次数
                        'activity_reduce_amount',cast (sum(split_activity_amount) as decimal(16,2)), --活动优惠分摊
                        'coupon_reduce_amount',cast(sum(split_coupon_amount) as decimal(16,2)),    --优惠券优惠分摊
                        'original_amount',cast(sum(original_amount) as decimal(16,2)),         --原始价格
                        'final_amount',cast(sum(split_final_amount) as decimal(16,2))          --最终价格分摊
                        ) sku_struct    --结构体
                 from ${APP}.dwd_order_detail
                 where dt <='$do_date'
                 group by user_id,dt,sku_id
             ) tmp
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    sum( if (last_page_id is not null,1,0)) login_count,    --登录次数
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_page_log
             where dt = '$do_date' and user_id is not null
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    sum( if (action_id = 'cart_add',1,0)) cart_count,       --加入购物车次数
                    sum( if (action_id = 'favor_add',1,0)) favor_count,     --收藏次数
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_action_log
             where dt = '$do_date' and user_id is not null and action_id in ('cart_add','favor_add')
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    count(distinct order_id) order_count,                       --下单次数
                    count(activity_rule_id) order_activity_count,               --订单参与活动次数
                    sum(split_activity_amount) order_activity_reduce_amount,    --订单减免金额(活动)
                    count(coupon_id) order_coupon_count,                        --订单用券次数
                    sum(split_coupon_amount) order_coupon_reduce_amount,        --订单减免金额(优惠券)
                    sum(original_amount) order_original_amount,                 --订单单原始金额
                    sum(split_final_amount) order_final_amount,                 --订单总金额
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_order_detail
             where dt <= '$do_date'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    count(*) payment_count,                 --支付次数
                    sum(payment_amount) payment_amount,     --支付金额
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_payment_info
             where dt <= '$do_date'
             group by user_id,dt
             union all
             -- 退单次数:  用户申请退回的一笔订单的一种商品,算一次
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    count(*) refund_order_count,            --退单次数
                    sum(refund_num) refund_order_num,       --退单件数
                    sum(refund_amount) refund_order_amount, --退单金额
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_order_refund_info
             where dt <= '$do_date'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    count(*) refund_payment_count,              --退款次数
                    sum(refund_num) refund_payment_num,   --退款件数
                    sum(refund_amount) refund_payment_amount,   --退款金额
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from
             (
                 select user_id,
                        dt,
                        refund_amount,      --退款金额
                        sku_id,
                        order_id
                 from ${APP}.dwd_refund_payment
                 where dt <= '$do_date'
             ) t1
             left join
             (
                 select refund_num,   --退款件数
                        sku_id,
                        order_id
                 from ${APP}.dwd_order_refund_info
                 where dt > date_sub('$do_date',15)
             ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    count(*) coupon_get_count,     --优惠券领取次数
                    sum(if(date_format(using_time,'yyyy-MM-dd') = '$do_date',1,0 )) coupon_using_count, --优惠券使用(下单)次数
                    sum(if(date_format(used_time,'yyyy-MM-dd') = '$do_date',1,0 ))  coupon_used_count,  --优惠券使用(支付)次数
                    0 appraise_good_count,
                    0 appraise_mid_count,
                    0 appraise_bad_count,
                    0 appraise_default_count,
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_coupon_use
             where (dt = '$do_date' or dt='9999-99-99') and date_format(get_time,'yyyy-MM-dd')='$do_date'
             group by user_id,dt
             union all
             select user_id,
                    dt,
                    0 login_count,
                    0 cart_count,
                    0 favor_count,
                    0 order_count,
                    0 order_activity_count,
                    0 order_activity_reduce_amount,
                    0 order_coupon_count,
                    0 order_coupon_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_count,
                    0 payment_amount,
                    0 refund_order_count,
                    0 refund_order_num,
                    0 refund_order_amount,
                    0 refund_payment_count,
                    0 refund_payment_num,
                    0 refund_payment_amount,
                    0 coupon_get_count,
                    0 coupon_using_count,
                    0 coupon_used_count,
                    sum( if (appraise = '1201',1,0)) appraise_good_count,       --好评数
                    sum( if (appraise = '1202',1,0)) appraise_mid_count,        --中评数
                    sum( if (appraise = '1203',1,0)) appraise_bad_count,        --差评数
                    sum( if (appraise = '1204',1,0)) appraise_default_count,    --默认评价数
                     array (named_struct('sku_id','-1',             --skuid
                            'sku_num',cast(0 as bigint),            --商品数量
                            'order_count',cast(0 as bigint),        --下单次数
                            'activity_reduce_amount',cast(0.0 as decimal(16,2)),    --活动优惠分摊
                            'coupon_reduce_amount',cast(0.0 as decimal(16,2)),      --优惠券优惠分摊
                            'original_amount',cast(0.0 as decimal(16,2)),           --原始价格
                            'final_amount',cast(0.0 as decimal(16,2))               --最终价格分摊
                        )) order_detail_stats
             from ${APP}.dwd_comment_info
             where dt <= '$do_date'
             group by user_id,dt
         ) tmp3
    group by user_id,dt;
    "
    
    
    dws_activity_info_daycount="
    insert overwrite table ${APP}.dws_activity_info_daycount partition (dt='$do_date')
    select t3.activity_rule_id,                 --活动id
           t3.activity_id,                      --活动规则id
           nvl(order_count,0),                  --参与某活动某规则下单次数
           nvl(order_reduce_amount,0.0),        --参与某活动某规则下单减免金额
           nvl(order_original_amount,0.0),      --参与某活动某规则下单原始金额
           nvl(order_final_amount,0.0),         --参与某活动某规则下单最终金额
           nvl(payment_count,0),                --参与某活动某规则支付次数
           nvl(payment_reduce_amount,0.0),      --参与某活动某规则支付减免金额
           nvl(payment_amount,0.0)             --参与某活动某规则支付金额
    from
    (
        -- 求理论上 可能产生行为的活动id和日期
        select activity_id,                 --活动id
               activity_rule_id             --活动规则id
        from ${APP}.dim_activity_rule_info
        where dt = '$do_date'
          and dt >= start_time and dt <= end_time     --商城APP上线时间应该在活动时间范围内
    ) t3
    left join
    (
        -- 实际上 产生行为的活动统计的指标
        select activity_rule_id,
               activity_id,
               sum(order_count) order_count,                        --参与某活动某规则下单次数
               sum(order_reduce_amount) order_reduce_amount,        --参与某活动某规则下单减免金额
               sum(order_original_amount) order_original_amount,    --参与某活动某规则下单原始金额
               sum(order_final_amount) order_final_amount,          --参与某活动某规则下单最终金额
               sum(payment_count) payment_count,                    --参与某活动某规则支付次数
               sum(payment_reduce_amount) payment_reduce_amount,    --参与某活动某规则支付减免金额
               sum(payment_amount) payment_amount                   --参与某活动某规则支付金额
        from
        (
            select activity_rule_id,
                   activity_id,
                   0 order_count,                                       --参与某活动某规则下单次数
                   0 order_reduce_amount,                               --参与某活动某规则下单减免金额
                   0 order_original_amount,                             --参与某活动某规则下单原始金额
                   0 order_final_amount,                                --参与某活动某规则下单最终金额
                   count(*) payment_count,                               --参与某活动某规则支付次数
                   sum(split_activity_amount) payment_reduce_amount,     --参与某活动某规则支付减免金额
                   sum(split_final_amount) payment_amount                --参与某活动某规则支付金额
            from ${APP}.dwd_order_detail
            where (dt = '$do_date' or dt=date_sub('$do_date',1))  and activity_rule_id is not null
                and order_id in (
                    --求被支付的订单详请
                    select order_id                --订单id
                    from ${APP}.dwd_payment_info
                    where dt = '$do_date'        -- dt是支付日期
                )
            group by activity_rule_id, activity_id
            union all
            select activity_rule_id,
                   activity_id,
                   count(*) order_count,                            --参与某活动某规则下单次数
                   sum(split_activity_amount) order_reduce_amount,  --参与某活动某规则下单减免金额
                   sum(original_amount) order_original_amount,      --参与某活动某规则下单原始金额
                   sum(split_final_amount) order_final_amount,      --参与某活动某规则下单最终金额
                   0 payment_count,
                   0 payment_reduce_amount,
                   0 payment_amount
            from ${APP}.dwd_order_detail
            where dt = '$do_date' and activity_rule_id is not null    --只取参与了活动的订单
            group by activity_rule_id,activity_id
        ) tmp
        group by activity_rule_id,activity_id
    ) t4
    on t3.activity_rule_id = t4.activity_rule_id;
    "
    
    
    dws_sku_action_daycount="
    set hive.exec.dynamic.partition.mode=nonstrict;
    insert overwrite table ${APP}.dws_sku_action_daycount partition (dt)
    select  sku_id,
            sum(order_count),
            sum(order_num),
            sum(order_activity_count),
            sum(order_coupon_count),
            sum(order_activity_reduce_amount),
            sum(order_coupon_reduce_amount),
            sum(order_original_amount),
            sum(order_final_amount),
            sum(payment_count),
            sum(payment_num),
            sum(payment_amount),
            sum(refund_order_count),
            sum(refund_order_num),
            sum(refund_order_amount),
            sum(refund_payment_count),
            sum(refund_payment_num),
            sum(refund_payment_amount),
            sum(cart_count),
            sum(favor_count),
            sum(appraise_good_count),
            sum(appraise_mid_count),
            sum(appraise_bad_count),
            sum(appraise_default_count),
            dt
    from
    (
        select  sku_id,
                dt,
                count(*) order_count,                                       --被下单次数
                sum(sku_num) order_num,                                     --被下单件数
                count(activity_rule_id) order_activity_count,               --参与活动被下单次数
                count(coupon_id) order_coupon_count,                        --使用优惠券被下单次数
                sum(split_activity_amount) order_activity_reduce_amount,    --优惠金额(活动)
                sum(split_coupon_amount) order_coupon_reduce_amount,        --优惠金额(优惠券)
                sum(original_amount) order_original_amount,                 --被下单原价金额
                sum(split_final_amount) order_final_amount,                 --被下单最终金额
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_order_detail
        where dt = '$do_date'
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                     --被支付次数
                sum(sku_num) payment_num,                   --被支付件数
                sum(split_final_amount) payment_amount,     --被支付金额
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select sku_id,
                   split_final_amount,      --被下单最终金额
                   order_id,                --订单id
                   sku_num                  --商品数量
            from ${APP}.dwd_order_detail           --订单事实表
            -- 跨天支付的问题:  $do_date日支付的订单,可能是 $do_date日下的单,也可能是 $do_date日下的单
            where dt = '$do_date' or dt = date_sub('$do_date',1)        -- dt是下单日期,不是支付日期
        ) t1
        join
        (
            select order_id,
                   dt
            from ${APP}.dwd_payment_info           --支付事实表
            where dt = '$do_date'         -- dt是支付日期
        ) t2 on t1.order_id = t2.order_id
        group by sku_id,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                count(*) refund_order_count,                 --被退单次数
                sum(refund_num) refund_order_num,            --被退单件数
                sum(refund_amount) refund_order_amount,      --被退单金额
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_order_refund_info
        where dt = '$do_date'
        group by sku_id,dt
        union all
        select  t1.sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                count(*) refund_payment_count,              --被退款次数
                sum(refund_num) refund_payment_num,         --被退款件数
                sum(refund_amount) refund_payment_amount,   --被退款金额
                0 cart_count,
                0 favor_count,
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from
        (
            select refund_amount,   --退款金额
                   sku_id,
                   order_id,
                   dt
            from ${APP}.dwd_refund_payment     --退款表:只统计退款完成的
            where dt = '$do_date'
        ) t1
        left join
        (
            select refund_num,      --退款件数
                   sku_id,
                   order_id         --退单表
            from ${APP}.dwd_order_refund_info
            --事务型事实表 dt:退单的发起时间
            where dt > date_sub('$do_date',15)
        ) t2 on t1.order_id = t2.order_id and t1.sku_id = t2.sku_id
        group by t1.sku_id,dt
        union all
        select  item sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                sum( if (action_id = 'cart_add',1,0)) cart_count,       --被加入购物车次数
                sum( if (action_id = 'favor_add',1,0)) favor_count,     --被收藏次数
                0 appraise_good_count,
                0 appraise_mid_count,
                0 appraise_bad_count,
                0 appraise_default_count
        from ${APP}.dwd_action_log
        where dt = '$do_date' and action_id in ('cart_add', 'favor_add')
        group by item,dt
        union all
        select  sku_id,
                dt,
                0 order_count,
                0 order_num,
                0 order_activity_count,
                0 order_coupon_count,
                0 order_activity_reduce_amount,
                0 order_coupon_reduce_amount,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_num,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_num,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_num,
                0 refund_payment_amount,
                0 cart_count,
                0 favor_count,
                sum( if (appraise = '1201',1,0)) appraise_good_count,         --好评数
                sum( if (appraise = '1202',1,0)) appraise_mid_count,          --中评数
                sum( if (appraise = '1203',1,0)) appraise_bad_count,          --差评数
                sum( if (appraise = '1204',1,0)) appraise_default_count       --默认评价数
        from ${APP}.dwd_comment_info
        where dt = '$do_date'
        group by sku_id,dt
    ) tmp
    group by sku_id,dt;
    "
    
    dws_coupon_info_daycount="
    insert overwrite table ${APP}.dws_coupon_info_daycount partition (dt = '$do_date')
    select t3.coupon_id,                        --优惠券id
           nvl(get_count,0),                    --领取次数
           nvl(order_count,0),                  --使用(下单)次数
           nvl(order_reduce_amount,0.0) ,       --使用某券的订单优惠金额
           nvl(order_original_amount,0.0) ,     --使用某券的订单原价金额
           nvl(order_final_amount,0.0) ,        --使用某券的订单总价金额
           nvl(payment_count,0) ,               --使用(支付)次数
           nvl(payment_reduce_amount,0.0) ,     --使用某券的支付优惠金额
           nvl(payment_amount,0.0) ,            --使用某券支付的总金额
           nvl(expire_count,0)                  --过期次数:为null,代表永久有效
    from
    (
        --理论上产生行为的 couponid和行为产生的日期
        select  id coupon_id        --优惠券id
        from ${APP}.dim_coupon_info
        where dt = '$do_date' and dt >= nvl(start_time,create_time) and dt <= nvl(expire_time,'9999-99-99')
    ) t3
    left join
    (
        --实际上产生行为的 coupon的各种指标
        select  coupon_id,
                sum(get_count) get_count,                           --领取次数
                sum(order_count) order_count,                       --使用(下单)次数
                sum(order_reduce_amount) order_reduce_amount,       --使用某券的订单优惠金额
                sum(order_original_amount) order_original_amount,   --使用某券的订单原价金额
                sum(order_final_amount) order_final_amount,         --使用某券的订单总价金额
                sum(payment_count) payment_count,                   --使用(支付)次数
                sum(payment_reduce_amount) payment_reduce_amount,   --使用某券的支付优惠金额
                sum(payment_amount) payment_amount,                 --使用某券支付的总金额
                sum(expire_count) expire_count                      --过期次数
        from
        (
            select  coupon_id,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    sum(split_coupon_amount) payment_reduce_amount, --使用某券的支付优惠金额
                    sum(split_final_amount) payment_amount          --使用某券支付的总金额
            from ${APP}.dwd_order_detail
            where (dt = '$do_date' or dt = date_sub('$do_date',1)) and coupon_id is not null
                and order_id in (
                    select order_id
                    from ${APP}.dwd_payment_info
                    where dt = '$do_date'
                )
            group by coupon_id
            union all
            select  coupon_id,
                    0 get_count,
                    0 order_count,
                    0 expire_count,
                    0 payment_count,
                    sum(split_coupon_amount) order_reduce_amount,       --使用某券的订单优惠金额
                    sum(original_amount) order_original_amount,         --使用某券的订单原价金额
                    sum(split_final_amount) order_final_amount,         --使用某券的订单总价金额
                    0 payment_reduce_amount,
                    0 payment_amount
            from ${APP}.dwd_order_detail
            where dt = '$do_date' and coupon_id is not null  --只取使用了优惠券的订单
            group by coupon_id
            union all
            select  coupon_id,
                    sum( if (date_format(get_time,'yyyy-MM-dd') = '$do_date',1,0)) get_count,         --领取次数
                    sum( if (date_format(using_time,'yyyy-MM-dd') = '$do_date',1,0)) order_count,     --使用(下单)次数
                    sum( if (date_format(used_time,'yyyy-MM-dd') = '$do_date',1,0)) payment_count,    --使用(支付)次数
                    sum( if (date_format(expire_time,'yyyy-MM-dd') = '$do_date',1,0)) expire_count,   ----过期次数
                    0 order_reduce_amount,
                    0 order_original_amount,
                    0 order_final_amount,
                    0 payment_reduce_amount,
                    0 payment_amount
            from ${APP}.dwd_coupon_use
            where dt = '$do_date' or dt = '9999-99-99'
            group by coupon_id
        ) tmp2
        group by coupon_id
    ) t4
    on t3.coupon_id = t4.coupon_id;
    "
    
    
    dws_area_stats_daycount="
    insert overwrite table ${APP}.dws_area_stats_daycount partition (dt = '$do_date')
    select province_id,                     --地区编号
           sum(visit_count),                --访客访问次数
           sum(login_count),                --用户访问次数
           sum(visitor_count),              --访客人数
           sum(user_count),                 --用户人数
           sum(order_count),                --下单次数
           sum(order_original_amount),      --下单原始金额
           sum(order_final_amount),         --下单最终金额
           sum(payment_count),              --支付次数
           sum(payment_amount),             --支付金额
           sum(refund_order_count),         --退单次数
           sum(refund_order_amount),        --退单金额
           sum(refund_payment_count),       --退款次数
           sum(refund_payment_amount)       --退款金额
    from
    (
        select  id province_id,          --地区编号
                visit_count,             --访客访问次数
                login_count,             --用户访问次数
                visitor_count,           --访客人数
                user_count,              --用户人数
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount
        from
        (
            select area_code,                               --地区编号
                   count(*) visit_count,                    --访客访问次数
                   count(user_id) login_count,              --用户访问次数
                   count(distinct mid_id) visitor_count,    --访客人数
                   count(distinct user_id) user_count      --用户人数
            from ${APP}.dwd_page_log           --页面日志表
            where dt = '$do_date' and last_page_id is null
            group by area_code,dt
        ) t1
        left join ${APP}.dim_base_province area on t1.area_code = area.area_code
        union all
        select  province_id,                                 --地区id
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                count(*) order_count,                        --下单次数
                sum(original_amount) order_original_amount,  --下单原始金额
                sum(final_amount) order_final_amount,        --下单最终金额
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount
        from ${APP}.dwd_order_info
        where dt = '$do_date' or dt = '9999-99-99'
        group by province_id
        union all
        select  province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                count(*) payment_count,                 --支付次数
                sum(payment_amount) payment_amount,     --支付金额
                0 refund_order_count,
                0 refund_order_amount,
                0 refund_payment_count,
                0 refund_payment_amount
        from ${APP}.dwd_payment_info
        where dt = '$do_date'
        group by province_id
        union all
        select  province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_amount,
                count(*) refund_order_count,                --退单次数
                sum(refund_amount) refund_order_amount,     --退单金额
                0 refund_payment_count,
                0 refund_payment_amount
        from ${APP}.dwd_order_refund_info
        where dt = '$do_date'
        group by province_id
        union all
        select province_id,
                0 visit_count,
                0 login_count,
                0 visitor_count,
                0 user_count,
                0 order_count,
                0 order_original_amount,
                0 order_final_amount,
                0 payment_count,
                0 payment_amount,
                0 refund_order_count,
                0 refund_order_amount,
                count(*) refund_payment_count,              --退款次数
                sum(refund_amount) refund_payment_amount   --退款金额
        from ${APP}.dwd_refund_payment
        where dt = '$do_date'
        group by province_id
    ) tmp
    group by province_id;
    "
    
    case $1 in
        "dws_visitor_action_daycount" )
            hive -e "$dws_visitor_action_daycount"
        ;;
        "dws_user_action_daycount" )
            hive -e "$dws_user_action_daycount"
        ;;
        "dws_activity_info_daycount" )
            hive -e "$dws_activity_info_daycount"
        ;;
        "dws_area_stats_daycount" )
            hive -e "$dws_area_stats_daycount"
        ;;
        "dws_sku_action_daycount" )
            hive -e "$dws_sku_action_daycount"
        ;;
        "dws_coupon_info_daycount" )
            hive -e "$dws_coupon_info_daycount"
        ;;
        "all" )
            hive -e "$dws_visitor_action_daycount$dws_user_action_daycount$dws_activity_info_daycount$dws_area_stats_daycount$dws_sku_action_daycount$dws_coupon_info_daycount"
        ;;
    esac

        (2)增加执行权限

    chmod +x dwd_to_dws.sh

      2)脚本使用

        (1)执行脚本

    dwd_to_dws.sh all 2021-06-09

        (2)查看数据是否导入成功

  • 相关阅读:
    Linux进阶之Linux中的标准输入输出
    PermCheck
    FrogRiverOne
    PermMissingElem
    FrogJmp
    TapeEquilibrium
    恒生电子长沙2016实习生笔试题
    接口和抽象类的异同点?
    C#实现二叉树
    C#实现栈和队列
  • 原文地址:https://www.cnblogs.com/LzMingYueShanPao/p/14884060.html
Copyright © 2011-2022 走看看