olap中的数据立方体分析

本文站在熟悉mysql同学的角度来分析 olap 和 数据立方体的概念 

 

1. 下钻和贡献度 (对率而言很重要)是数据分析非常重要的两个能力.

2. 开发同学能力: 是否列的行转列处理, sum的行转列处理, max(traceId)的行转列分析.

3. 统计立方 + 详细维度行明细 共同来定位问题.

https://processon.com/mindmap/5b98e5c4e4b0bd4db938ce08

数据模型:

 

数据立方:

    不要被 立方一词给迷惑了,其实本质是N维体. 可以降维到点(方框) 立方只是一种,即三维.  即 总请求量,总平均耗时,总io大小,总支付成功数.

    一维 :

         1. 多指标,行转列.成表.: select sum/avg/max

             

         2. 单指标,方框. select sum

    二维 (表格):

    三维 立方体

    钻取即增加维度: select sum/avg/max from grou by city; 结合到人工交互层面(web系统) 就是 点击按钮展开(即下钻功能).

    

   olap中的数据立方体分析

剪枝:

为什么要进行剪枝优化?

在没有采取任何的优化措施的时候,Kylin会对每一个维度组合进行预计算,若有4个维度,则会有将近2^4 = 16个Cuboid需要进行计算。但是我们知道很多维度是:

  • 1.不需要参与计算或者说不常用的
  • 2.与其他的维度有一定的包含关系的
  • 3.一定会跟其他维度一起进行查询的

    如果有10个维度那会有2^10=1024个Cuboid需要进行计算,虽然每个Cuboid的大小存在很大的差异,但是单单想到Cuboid的数量就足以让人想象这样大小的Cube对于构建引擎、存储引擎的压力会有多么巨大,所以在构建维度较多的Cube时,剪枝优化是非常重要的。

  •  

众所周知,Apache Kylin 的主要工作就是为源数据构建 N 个维度的 Cube,实现聚合的预计算。理论上而言,构建 N 个维度的 Cube 会生成 2n2n个 Cuboid, 如图 1 所示,构建一个 4 个维度(A,B,C, D)的 Cube,需要生成 16 个Cuboid. 

 全部生成会数据很大,需要根据业务来看那些组合是否需要

层级维度(Hierarchy Dimension)

用户选择的维度中常常会出现具有层级关系的维度。例如对于国家(country)、省份(province)和城市(city)这三个维度,从上而下来说国家/省份/城市之间分别是一对多的关系。也就是说,用户对于这三个维度的查询可以归类为以下三类:

  • group by country
  • group by country, province(等同于group by province)
  • group by country, province, city(等同于 group by country, city 或者group by city)

其他组合就别减掉了.

     

必要维度(Mandatory Dimension)

用户有时会对某一个或几个维度特别感兴趣,所有的查询请求中都存在group by这个维度,那么这个维度就被称为必要维度,只有包含此维度的Cuboid会被生成(如图2)

olap中的数据立方体分析

    

附录:

  

 

   数据立方体与OLAP

   剪枝 https://blog.csdn.net/chenguangchun1993/article/details/78707222

olap: