Cube结构-GROUPING SETS

背景:在开发过程中,往往有业务方有计算不同统计粒度指标需求,在数据量比较小的情况,直接提供底层明细表给到看板,通过看板模块筛选后再聚合计算即可,但是在数据量比较大的情况下,看板侧每次筛选完维度之后,都需要运行很久,不仅占用资源,而且体感很差,那么在这种情况下,我们就可以使用cube结构,提取计算好不同维度组合下的指标,再提供给看板。

一、Cube结构:多维数据分析的核心框架

  1. 基本定义与组成
    Cube是一种多维数据结构,用于支持大型数据集的快速分析。它通过维度(如时间、地理、产品)、度量(如销售额、请求量)、粒度(数据详细程度)和层次结构(维度内的层级,如年-月-日)构建数据模型11。例如,在分析请求耗时场景中,"系统-模块-小时"可构成关键维度,耗时则作为度量值。

  2. 实现方式:星型模式与事实表
    Cube通常通过星型模式实现,包含一个事实表(记录具体业务数据,如请求耗时)和多个维度表(描述维度属性,如系统名称、模块分类)。这种结构通过外键关联,既压缩了存储空间,又提升了查询效率1。例如,将每小时请求的耗时统计存储在事实表中,维度表分别描述系统和模块的元数据。

  3. 应用价值
    Cube支持灵活的多维钻取、切片和切块操作。例如,用户可先查看系统A1的整体耗时,再下钻到模块B1的小时级分位数曲线,并通过时间维度对比不同周期的性能变化。

二、GROUPING SETS:多维聚合的灵活扩展

  1. 功能定位
    GROUPING SETS是SQL中用于多维度聚合的语法,允许在单次查询中生成多组不同粒度的汇总结果。相比传统的GROUP BY,它避免了多次查询的冗余计算,尤其适用于海量数据分析场景4。

  2. 典型应用场景

    • 部分维度组合分析:例如同时计算(系统+模块)、(系统+小时)、(模块+小时)的聚合结果,无需多次查询。
    • 层次化汇总:生成从粗粒度(如系统级别)到细粒度(系统+模块+小时)的多层统计1。
  3. 语法示例:HiveSQL 
SELECT nvl(systom, 'all') as systom,
       nvl(model, 'all') as model,
       nvl(class, 'all') as class,
       sum(time_cost)
FROM
(
    SELECT 'A' AS systom, 'a' AS model, 1 AS class, 100 AS time_cost UNION ALL
    SELECT 'A' AS systom, 'b' AS model, 2 AS class, 100 AS time_cost UNION ALL
    SELECT 'A' AS systom, 'b' AS model, 2 AS class, 100 AS time_cost UNION ALL
    SELECT 'B' AS systom, 'b' AS model, 1 AS class, 100 AS time_cost
)tmp
GROUP BY systom,
         model,
         class
GROUPING sets((systom), (systom,model), (systom,class))

统计了不同systom粒度、systom+model、systom+class下的总耗时

GROUPING setssystommodelclasssum(time_cost)
(systom)Aallall300
Ballall100
(systom,model)Aaall100
Aball200
Bball100
Ballall100
(systom,class)Aall1100
Aall2200
Ball1100



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值