目录
一、交易域用户商品粒度订单最近n日汇总表
建表语句
sql
DROP TABLE IF EXISTS dws_trade_user_sku_order_nd;
CREATE EXTERNAL TABLE dws_trade_user_sku_order_nd
(
`user_id` STRING COMMENT '用户ID',
`sku_id` STRING COMMENT 'SKU_ID',
`sku_name` STRING COMMENT 'SKU名称',
`category1_id` STRING COMMENT '一级品类ID',
`category1_name` STRING COMMENT '一级品类名称',
`category2_id` STRING COMMENT '二级品类ID',
`category2_name` STRING COMMENT '二级品类名称',
`category3_id` STRING COMMENT '三级品类ID',
`category3_name` STRING COMMENT '三级品类名称',
`tm_id` STRING COMMENT '品牌ID',
`tm_name` STRING COMMENT '品牌名称',
`order_count_7d` STRING COMMENT '最近7日下单次数',
`order_num_7d` BIGINT COMMENT '最近7日下单件数',
`order_original_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单原始金额',
`activity_reduce_amount_7d` DECIMAL(16, 2) COMMENT '最近7日活动优惠金额',
`coupon_reduce_amount_7d` DECIMAL(16, 2) COMMENT '最近7日优惠券优惠金额',
`order_total_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单最终金额',
`order_count_30d` BIGINT COMMENT '最近30日下单次数',
`order_num_30d` BIGINT COMMENT '最近30日下单件数',
`order_original_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单原始金额',
`activity_reduce_amount_30d` DECIMAL(16, 2) COMMENT '最近30日活动优惠金额',
`coupon_reduce_amount_30d` DECIMAL(16, 2) COMMENT '最近30日优惠券优惠金额',
`order_total_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单最终金额'
) COMMENT '交易域用户商品粒度订单最近n日汇总表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/gmall/dws/dws_trade_user_sku_order_nd'
TBLPROPERTIES ('orc.compress' = 'snappy');
数据装载
sql
insert overwrite table dws_trade_user_sku_order_nd partition(dt='2022-06-08')
select
user_id,
sku_id,
sku_name,
category1_id,
category1_name,
category2_id,
category2_name,
category3_id,
category3_name,
tm_id,
tm_name,
sum(if(dt>=date_add('2022-06-08',-6),order_count_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),order_num_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),order_original_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),activity_reduce_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),coupon_reduce_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),order_total_amount_1d,0)),
sum(order_count_1d),
sum(order_num_1d),
sum(order_original_amount_1d),
sum(activity_reduce_amount_1d),
sum(coupon_reduce_amount_1d),
sum(order_total_amount_1d)
from dws_trade_user_sku_order_1d
where dt>=date_add('2022-06-08',-29)
group by user_id,sku_id,sku_name,category1_id,category1_name,category2_id,category2_name,category3_id,category3_name,tm_id,tm_name;
二、交易域省份粒度订单最近n日汇总表
建表语句
sql
DROP TABLE IF EXISTS dws_trade_province_order_nd;
CREATE EXTERNAL TABLE dws_trade_province_order_nd
(
`province_id` STRING COMMENT '省份ID',
`province_name` STRING COMMENT '省份名称',
`area_code` STRING COMMENT '地区编码',
`iso_code` STRING COMMENT '旧版国际标准地区编码',
`iso_3166_2` STRING COMMENT '新版国际标准地区编码',
`order_count_7d` BIGINT COMMENT '最近7日下单次数',
`order_original_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单原始金额',
`activity_reduce_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单活动优惠金额',
`coupon_reduce_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单优惠券优惠金额',
`order_total_amount_7d` DECIMAL(16, 2) COMMENT '最近7日下单最终金额',
`order_count_30d` BIGINT COMMENT '最近30日下单次数',
`order_original_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单原始金额',
`activity_reduce_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单活动优惠金额',
`coupon_reduce_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单优惠券优惠金额',
`order_total_amount_30d` DECIMAL(16, 2) COMMENT '最近30日下单最终金额'
) COMMENT '交易域省份粒度订单最近n日汇总表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/gmall/dws/dws_trade_province_order_nd'
TBLPROPERTIES ('orc.compress' = 'snappy');
数据装载
sql
insert overwrite table dws_trade_province_order_nd partition(dt='2022-06-08')
select
province_id,
province_name,
area_code,
iso_code,
iso_3166_2,
sum(if(dt>=date_add('2022-06-08',-6),order_count_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),order_original_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),activity_reduce_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),coupon_reduce_amount_1d,0)),
sum(if(dt>=date_add('2022-06-08',-6),order_total_amount_1d,0)),
sum(order_count_1d),
sum(order_original_amount_1d),
sum(activity_reduce_amount_1d),
sum(coupon_reduce_amount_1d),
sum(order_total_amount_1d)
from dws_trade_province_order_1d
where dt>=date_add('2022-06-08',-29)
and dt<='2022-06-08'
group by province_id,province_name,area_code,iso_code,iso_3166_2;
三、交易域用户粒度订单历史至今汇总表
建表语句
sql
DROP TABLE IF EXISTS dws_trade_user_order_td;
CREATE EXTERNAL TABLE dws_trade_user_order_td
(
`user_id` STRING COMMENT '用户ID',
`order_date_first` STRING COMMENT '历史至今首次下单日期',
`order_date_last` STRING COMMENT '历史至今末次下单日期',
`order_count_td` BIGINT COMMENT '历史至今下单次数',
`order_num_td` BIGINT COMMENT '历史至今购买商品件数',
`original_amount_td` DECIMAL(16, 2) COMMENT '历史至今下单原始金额',
`activity_reduce_amount_td` DECIMAL(16, 2) COMMENT '历史至今下单活动优惠金额',
`coupon_reduce_amount_td` DECIMAL(16, 2) COMMENT '历史至今下单优惠券优惠金额',
`total_amount_td` DECIMAL(16, 2) COMMENT '历史至今下单最终金额'
) COMMENT '交易域用户粒度订单历史至今汇总表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/gmall/dws/dws_trade_user_order_td'
TBLPROPERTIES ('orc.compress' = 'snappy');
首日数据装载
sql
insert overwrite table dws_trade_user_order_td partition(dt='2022-06-08')
select
user_id,
min(dt) order_date_first,
max(dt) order_date_last,
sum(order_count_1d) order_count,
sum(order_num_1d) order_num,
sum(order_original_amount_1d) original_amount,
sum(activity_reduce_amount_1d) activity_reduce_amount,
sum(coupon_reduce_amount_1d) coupon_reduce_amount,
sum(order_total_amount_1d) total_amount
from dws_trade_user_order_1d
group by user_id;
每日数据装载(方法一)
sql
insert overwrite table dws_trade_user_order_td partition (dt = '2022-06-09')
select nvl(old.user_id, new.user_id),
if(old.user_id is not null, old.order_date_first, '2022-06-09'),
if(new.user_id is not null, '2022-06-09', old.order_date_last),
nvl(old.order_count_td, 0) + nvl(new.order_count_1d, 0),
nvl(old.order_num_td, 0) + nvl(new.order_num_1d, 0),
nvl(old.original_amount_td, 0) + nvl(new.order_original_amount_1d, 0),
nvl(old.activity_reduce_amount_td, 0) + nvl(new.activity_reduce_amount_1d, 0),
nvl(old.coupon_reduce_amount_td, 0) + nvl(new.coupon_reduce_amount_1d, 0),
nvl(old.total_amount_td, 0) + nvl(new.order_total_amount_1d, 0)
from (
select user_id,
order_date_first,
order_date_last,
order_count_td,
order_num_td,
original_amount_td,
activity_reduce_amount_td,
coupon_reduce_amount_td,
total_amount_td
from dws_trade_user_order_td
where dt = date_add('2022-06-09', -1)
) old
full outer join
(
select user_id,
order_count_1d,
order_num_1d,
order_original_amount_1d,
activity_reduce_amount_1d,
coupon_reduce_amount_1d,
order_total_amount_1d
from dws_trade_user_order_1d
where dt = '2022-06-09'
) new
on old.user_id = new.user_id;
每日数据装载(方法二)
sql
insert overwrite table dws_trade_user_order_td partition(dt='2022-06-09')
select user_id,
min(order_date_first) order_date_first,
max(order_date_last) order_date_last,
sum(order_count_td) order_count_td,
sum(order_num_td) order_num_td,
sum(original_amount_td) original_amount_td,
sum(activity_reduce_amount_td) activity_reduce_amount_td,
sum(coupon_reduce_amount_td) coupon_reduce_amount_td,
sum(total_amount_td) total_amount_td
from (
select user_id,
order_date_first,
order_date_last,
order_count_td,
order_num_td,
original_amount_td,
activity_reduce_amount_td,
coupon_reduce_amount_td,
total_amount_td
from dws_trade_user_order_td
where dt = date_add('2022-06-09', -1)
union all
select user_id,
'2022-06-09' order_date_first,
'2022-06-09' order_date_last,
order_count_1d,
order_num_1d,
order_original_amount_1d,
activity_reduce_amount_1d,
coupon_reduce_amount_1d,
order_total_amount_1d
from dws_trade_user_order_1d
where dt = '2022-06-09') t1
group by user_id;
四、用户域用户粒度登录历史至今汇总表
建表语句
sql
DROP TABLE IF EXISTS dws_user_user_login_td;
CREATE EXTERNAL TABLE dws_user_user_login_td
(
`user_id` STRING COMMENT '用户ID',
`login_date_last` STRING COMMENT '历史至今末次登录日期',
`login_date_first` STRING COMMENT '历史至今首次登录日期',
`login_count_td` BIGINT COMMENT '历史至今累计登录次数'
) COMMENT '用户域用户粒度登录历史至今汇总表'
PARTITIONED BY (`dt` STRING)
STORED AS ORC
LOCATION '/warehouse/gmall/dws/dws_user_user_login_td'
TBLPROPERTIES ('orc.compress' = 'snappy');
首日数据装载
sql
insert overwrite table dws_user_user_login_td partition (dt = '2022-06-08')
select u.id user_id,
nvl(login_date_last, date_format(create_time, 'yyyy-MM-dd')) login_date_last,
date_format(create_time, 'yyyy-MM-dd') login_date_first,
nvl(login_count_td, 1) login_count_td
from (
select id,
create_time
from dim_user_zip
where dt = '9999-12-31'
) u
left join
(
select user_id,
max(dt) login_date_last,
count(*) login_count_td
from dwd_user_login_inc
group by user_id
) l
on u.id = l.user_id;
每日数据装载
sql
insert overwrite table dws_user_user_login_td partition (dt = '2022-06-09')
select nvl(old.user_id, new.user_id) user_id,
if(new.user_id is null, old.login_date_last, '2022-06-09') login_date_last,
if(old.login_date_first is null, '2022-06-09', old.login_date_first) login_date_first,
nvl(old.login_count_td, 0) + nvl(new.login_count_1d, 0) login_count_td
from (
select user_id,
login_date_last,
login_date_first,
login_count_td
from dws_user_user_login_td
where dt = date_add('2022-06-09', -1)
) old
full outer join
(
select user_id,
count(*) login_count_1d
from dwd_user_login_inc
where dt = '2022-06-09'
group by user_id
) new
on old.user_id = new.user_id;