恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
第五篇 数仓真实业务案例:商品销售报表全链路落地实战
首页
资讯中心
/
第五篇 数仓真实业务案例:商品销售报表全链路落地实战
第五篇 数仓真实业务案例:商品销售报表全链路落地实战
发布时间:2026/10/20 12:01:31
前置回顾:前面我们讲了分层的价值、五层架构、分层裁剪策略与配套工具。很多同学看懂理论,但不知道在真实业务里每一层到底写什么 SQL、做什么处理。本篇用【商品销售报表】这个最经典场景,完整落地,需求固定:统计商品销量、销售额、下单人数。1、业务需求说明业务目标:产出商品维度销售报表,指标定义统一:商品销量:已支付订单内商品的购买件数之和(取消 / 退款订单不计入)销售额:已支付订单商品实付金额之和(剔除退款)下单人数:购买该商品的独立用户数(同一用户多次购买只算 1 人)业务过滤规则:pay_status='已支付' AND is_refund=02、业务源库(MySQL)表结构 + 数据初始化 SQL2.1 order_main 订单主表-- MySQL 业务订单主表 CREATE TABLE `order_main` ( `order_id` VARCHAR(32) NOT NULL COMMENT '订单ID', `user_id` VARCHAR(32) NOT NULL COMMENT '用户ID', `create_time` DATETIME NOT NULL COMMENT '下单时间', `pay_status` VARCHAR(20) NOT NULL COMMENT '支付状态:已支付/待支付/已取消', `is_refund` TINYINT NOT NULL DEFAULT 0 COMMENT '是否退款:0否,1是', PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表'; -- 初始化测试数据 INSERT INTO order_main(order_id,user_id,create_time,pay_status,is_refund) VALUES ('O001','U001','2026-10-01 08:20:00','已支付',0), ('O002','U002','2026-10-01 09:10:00','已支付',0), ('O003','U001','2026-10-01 10:30:00','已支付',1), ('O004','U003','2026-10-01 11:00:00','待支付',0);2.2 order_item 订单明细表-- MySQL 订单明细表 CREATE TABLE `order_item` ( `order_id` VARCHAR(32) NOT NULL COMMENT '订单ID', `product_id` VARCHAR(32) NOT NULL COMMENT '商品ID', `buy_num` INT NOT NULL COMMENT '购买数量', `item_amount` DECIMAL(10,2) NOT NULL COMMENT '单品实付金额', PRIMARY KEY (`order_id`,`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表'; -- 初始化测试数据 INSERT INTO order_item(order_id,product_id,buy_num,item_amount) VALUES ('O001','P001',2,100.00), ('O001','P002',1,50.00), ('O002','P001',1,50.00), ('O003','P003',3,180.00), ('O004','P002',2,100.00);2.3 product 商品基础表-- MySQL商品基础表 CREATE TABLE `product` ( `product_id` VARCHAR(32) NOT NULL COMMENT '商品ID', `product_name` VARCHAR(100) NOT NULL COMMENT '商品名称', `category` VARCHAR(50) NOT NULL COMMENT '商品分类', PRIMARY KEY (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品基础表'; -- 初始化测试数据 INSERT INTO product(product_id,product_name,category) VALUES ('P001','机械键盘','电脑外设'), ('P002','无线鼠标','电脑外设'), ('P003','耳机','音频设备');2.4 业务筛选业务筛选后有效订单:O001、O002;O003 退款、O004 未支付,过滤丢弃。3、三套落地链路详解(Hive SQL,全部可直接运行)为方便学习、理解、验证,下面还是mysql语法。现实中要用Hive SQL、Spark SQL等语法。3.1 链路 1:小规模(最简链路)MySQL → ODS → ADS架构:原始数据层 (ODS) + ADS,DWD/DWS 逻辑全部下沉到 ADS适用场景:1~3 个数据开发,报表少,数据量不大。3.1.1ODS 层建表 + 数据导入-- ODS 订单主表(原始数据层) CREATE TABLE ods_mysql_order_main ( order_id VARCHAR(50) COMMENT '订单ID', user_id VARCHAR(50) COMMENT '用户ID', create_time VARCHAR(50) COMMENT '下单时间', pay_status VARCHAR(50) COMMENT '支付状态', is_refund TINYINT COMMENT '是否退款' ) COMMENT 'ODS原始数据层-订单主表'; -- ODS 订单明细表 CREATE TABLE ods_mysql_order_item ( order_id VARCHAR(50) COMMENT '订单ID', product_id VARCHAR(50) COMMENT '商品ID', buy_num BIGINT COMMENT '购买数量', item_amount DECIMAL(18,2) COMMENT '单品实付金额' ) COMMENT 'ODS原始数据层-订单明细表'; -- ODS 商品表 CREATE TABLE ods_mysql_product ( product_id VARCHAR(50) COMMENT '商品ID', product_name VARCHAR(255) COMMENT '商品名称', category VARCHAR(2