Doris多维分析-详细介绍分析
1. 多维分析是什么多维分析行业内也叫群切就是从多个不同维度地域、机型、页面、时间等对指标访问次数、人数、会话时长等做聚合统计用来做多张运营报表。维度分析的角度省份、城市、手机型号、入口页、性别、班级等指标统计出来的数值会话总次数、访问人数、平均会话时长、总销售额等传统写法有多少种维度组合就要写多少条GROUP BYSQL重复代码多、维护麻烦。于是诞生三个高阶聚合函数GROUPING SETS、ROLLUP、CUBE一条 SQL 一次性算出所有需要的维度组合结果。常见工具Hive/SparkSQL、Apache Doris、Kylin预计算多维立方体引擎。2. 流量多维分析业务场景举例围绕用户流量行为从不同维度组合统计流量核心指标地域维度省份、城市设备维度手机型号行为维度入口页面核心指标会话总次数、访问人数、平均每人会话数、会话总时长、平均会话时长业务难点入口页无法直接取字段需要从会话第一条eventidpageView事件中提取首次访问的 URL 作为入口页。3. 三个多维聚合函数核心作用GROUPING SETS自定义需要哪些维度组合只计算你指定的分组ROLLUP层级上卷聚合从细粒度逐级汇总到粗粒度类似 “逐层向上汇总”CUBE全维度交叉聚合所有维度自由两两、多两组合生成所有可能的维度组合结果4. 开发价值提前梳理所有报表需要的维度组合用一个 SQL 算出全部结果定时调度落地不用重复写几十条分组 SQL大幅精简代码。三大多维函数详细讲解Doris 实操版前置基础概念1. 维度 指标举例表用户访问流量表维度省份、城市、手机型号指标会话次数、访问人数单维度只按省份统计多维度省份 城市、省份 手机型号总计全表所有数据汇总2. GROUPING SETS自定义维度组合作用手动指定你需要哪几组维度组合只计算你配置的分组不多算冗余数据。相当于把多条GROUP BY合并成一条 SQL。示例需要三种统计按省份分组按省份、城市分组全表总访问量SELECT province,city,COUNT(session_id) AS visit_cnt FROM user_flow GROUP BY GROUPING SETS ( (province), (province,city), () );()代表不分组全局聚合求总计适用场景报表需要的维度组合零散不需要全部层级 / 全部交叉精准按需计算。3. ROLLUP层级上卷爬楼梯式逐级汇总核心规则ROLLUP(A,B,C)遵循从最细粒度 → 逐级向上汇总的层级顺序(A,B,C) 最细粒度分组(A,B) 向上一级汇总(A) 再向上一级汇总() 全局总计为什么没有BCROLLUP 严格遵循维度传入的先后层级顺序只做「从左往右逐层去掉最右侧维度」向上汇总不会打乱维度顺序、不会从中间截取维度组合。想要(B,C)这类跨层级维度组合只能用 GROUPING SETS 或 CUBE。业务场景地域层级汇总省→市→区县需求统计各区县、各市、各省、全国总访问人数SELECT province,city,district,COUNT(user_id) AS user_cnt FROM user_flow GROUP BY ROLLUP(province,city,district);等价于GROUP BY GROUPING SETS( (province,city,district), (province,city), (province), () )特点维度有明确先后层级关系省包含市、市包含区县不能乱序只做从上到下的层级汇总不会颠倒维度交叉组合适合地区层级、时间层级年→季→月→日、部门层级报表你文中 Doris 示例解析SELECT city,type,type_msg, sum(amount) FROM huiyuan_msg GROUP BY ROLLUP(city,type,type_msg);生成分组citytypetype_msgcitytypecity全局汇总4. CUBE全维度交叉立方体所有组合全部计算核心规则CUBE(A,B)会生成所有维度的任意组合不限制层级顺序全部交叉统计。CUBE(city,type)等价于 4 组维度city typecitytype全局总计Doris 示例SELECT city,type, sum(amount) FROM huiyuan_msg GROUP BY CUBE(city,type);特点维度之间没有层级从属关系可以任意交叉会生成所有维度排列组合结果数据量比 ROLLUP 多适用需要做多维度交叉分析比如省份 × 机型、省份 × 入口页、机型 × 入口页所有组合报表ROLLUP 和 CUBE 核心区别ROLLUP有层级从上往下逐级汇总维度有序结果少例省、市、区县只能向上汇总不会单独按市汇总全国CUBE无层级所有维度自由交叉排列全部组合都计算结果多例省份、手机型号既可以省 机型也可以单独按机型全局统计三者关系梳理GROUPING SETS手动自定义分组灵活可控想算哪几组就写哪几组ROLLUP特殊的 GROUPING SETS按维度层级向上汇总适合层级类维度地域、时间CUBE特殊的 GROUPING SETS所有维度全部交叉组合适合多维度交叉分析选择建议维度存在层级年 / 月 / 日、省 / 市 / 区→ 用ROLLUP多个维度需要任意交叉组合 → 用CUBE只需要零散几个特定维度组合 → 用GROUPING SETS配套业务补充说明Kylin麒麟多维预计算引擎提前把所有 CUBE 维度组合结果算好落地前端查询直接读预计算结果适合超大规模离线多维报表查询加速。Doris 本身可以实时多维聚合实时场景优先 Doris超大离线预计算场景用 Kylin。流量分析难点入口页提取入口页不能直接作为维度字段需要先对同一个会话下的所有页面浏览事件排序取会话第一条 pageView 事件的 url 作为该会话的入口页再基于加工后的入口页维度做多维聚合。工程化落地方式业务梳理全部维度组合 → 使用 ROLLUP/CUBE 单条 SQL 一次性计算所有报表指标 → 结果写入结果表 → 配置定时任务每日调度报表直接查询结果表即可。背诵总结多维分析群切多维度聚合统计业务指标传统 GROUP BY 需要多条 SQL可用三个高阶函数优化。GROUPING SETS自定义指定维度组合按需聚合。ROLLUP层级上卷聚合适用于省市区、年月日这类有从属层级的维度逐级向上汇总。CUBE全维度交叉聚合所有维度任意组合适合无层级多维度交叉分析。常用引擎Hive/SparkSQL、Doris 实时多维分析Kylin 用于多维预计算加速查询。