尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第五篇 数仓真实业务案例:商品销售报表全链路落地实战
前置回顾:前面我们讲了分层的价值、五层架构、分层裁剪策略与配套工具。很多同学看懂理论,但不知道在真实业务里每一层到底写什么 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
RELATED

相关推荐

Windsurf 下载与调试实战:把 Codeium 的 AI IDE 配到 TaoToken 上跑通

Windsurf 下载与调试实战:把 Codeium 的 AI IDE 配到 TaoToken 上跑通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/20 12:01:31
AD密码到期与账户锁定怎么办?三招实现自动化排查与处理

AD密码到期与账户锁定怎么办?三招实现自动化排查与处理

1. 问题场景还原:AD密码到期锁定到底有多烦先别急着看操作,我先把场景还原一下。做企业IT运维的兄弟应该都有这种体验:某天早上刚坐下,邮箱里已经躺着七八封密码过期提醒,紧接着Helpdesk电话就开始响个不停。用户那头永…

📅 2026/10/20 12:01:31
Spark读写HDFS、HBase与JSON:选型、调优与避坑实战

Spark读写HDFS、HBase与JSON:选型、调优与避坑实战

1. 为什么要在Spark里同时搞定HDFS、HBase和JSON大数据处理绕不开三件事:数据从哪来、怎么算、算完往哪放。Spark本身是个计算引擎,它不存数据,所以读写外部存储就成了日常开发里最高频的操作。我做过一个统计,一个典型的数据管道…

📅 2026/10/20 12:01:31
MORE NEWS

更多资讯

📰

智能体观测链路设计:从工具调用到模型输入的保真闭环

1. 项目概述:这不是在搭积木,而是在重建感知神经“从工具调用到模型输入:把 Agent 的观测链路接起来”——这个标题乍看像一句技术黑话,但拆开来看,它直指当前智能体(Agent)开发中最常被忽略、却…

📰

.NET GC新方向DATAS:五步准备与排查实践指南

1. DATAS 是什么,以及它要解决的一堆破事最近 .NET 社区里 DATAS 这个词出现频率明显多了起来,很多人一上来就问“DATAS 是不是又一个新 GC 模式?要不要改配置?会不会有兼容性问题?”我先把结论放这里:DATA…

📰

横评14款论文工具后,千笔如何成为自考论文写作的实用助手

“横评后发现!自考论文神器 —— 千笔专业论文写作工具”,看到这个标题的老哥老姐们,估计第一反应跟我一样:又是个恰饭软文吧?我当时也是这么想的。但架不住自己带的一个自考学员连续三次论文被打回,选题换了两轮&…

📰

Maven构建报错Input length = 1:资源文件编码问题排查与解决方案

1. 这个报错到底在说什么Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources Input length 1——如果你是个常年跟Java项目打交道的后端,看到这行红字大概率血压已经上来了。它不像编译错误那样能直接定位到某一行代码&…

📰

mapbox_gl_dart 鸿蒙适配实战:矢量地图引擎纹理桥接与性能优化

1. 从“套壳”到“原生”:为什么把 mapbox_gl_dart 搬上鸿蒙前阵子接到一个内部办公系统的改造需求:把原有的 LBS 考勤、会议室导航和巡检轨迹模块整体迁移到鸿蒙生态上。一开始团队里讨论最多的方案是“先用 WebView 里嵌高德地图顶着”,理由…

📰

C#实战:OpenCvSharp读取RTSP流录制MP4与多路并发避坑指南

简介:本资源面向具备一定C#基础的开发者,聚焦于使用OpenCvSharp读取RTSP视频流并录制为MP4文件这一常见需求,提供可直接运行的完整Demo工程,帮助解决网络摄像头接入、实时流解码与本地视频保存等实际问题,适用于安防监…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬