一、电商GMV分析
GMV:Gross Merchandise Volume,是指一定时间内的成交总金额。
GMV 多用于电商行业,这个实际指的是拍下的订单总金额,包含付款和未付款的部分。
我们在统计的时候就可以将订单中的每天的所有订单金额全部都累加起来,就可以获取到当天的GMV了。
二、思路
对dwd_user_order表中的数据进行统计即可,通过order_money字段可以计算出来GMV,将结果保存到表app_gmv中。
三、app层
注意:gmv字段的类型可以使用double或者decimal(10,2)都可以。
decimal(10,2)可以更方便的控制小数位数,数据看起来更加清爽,所以建议使用decimal(10,2)。
其实针对金钱类相关字段类型建议使用decimal(10,2),使用double也行。
1、app_gmv
(1)源表
dwd_user_order
(2)建表语句
create external table if not exists app_mall.app_gmv(
gmv decimal(10,2)
)partitioned by(dt string)
row format delimited
fields terminated by '\t'
location 'hdfs://bigdata01:9000/data/app/gmv/';
(3)映射关系
insert overwrite table app_mall.app_gmv partition(dt='20260201') select
sum(order_money) as gmv
from dwd_mall.dwd_user_order
where dt = '20260201';
四、开发脚本
1、表初始化脚本(初始化执行一次)
app_mall_init_table_2.sh
内容如下:
#!/bin/bash
# 需求二:电商GMV
# app层数据库和表初始化脚本,只需要执行一次即可
hive -e "
create database if not exists app_mall;
create external table if not exists app_mall.app_gmv(
gmv decimal(10,2)
)partitioned by(dt string)
row format delimited
fields terminated by '\t'
location 'hdfs://bigdata01:9000/data/app/gmv/';
"
2、添加分区脚本(每天执行一次)
app_mall_add_partition_2.sh
内容如下:
#!/bin/bash
# 需求二:电商GMV
# 每天凌晨执行一次
# 默认获取昨天的日期,也支持传参指定一个日期
if [ "z$1" = "z" ]
then
dt=`date +%Y%m%d --date="1 days ago"`
else
dt=$1
fi
hive -e "
insert overwrite table app_mall.app_gmv partition(dt='${dt}') select
sum(order_money) as gmv
from dwd_mall.dwd_user_order
where dt = '${dt}';
"
五、执行脚本
1、先执行初始化脚本
sh app_mall_init_table_2.sh
2、再执行添加分区脚本
sh app_mall_add_partition_2.sh 20260201
这个要等一会,估计5分钟,如下就好了
六、验证结果
select * from app_mall.app_gmv where dt='20260201';
七、思考一个问题
问题:有了每天的GMV,后期能不能计算月度GMV,季度GMV,以及年度GMV?以及GMV的同比、环比?
可以的,有了每日的GMV之后,按照月、季度、年度GMV进行聚合即可。
同比、环比,我们在前面已经实现过类似的需求。