目录
1. 在kylin中常用的基本概念
1.1 基本概念
kylin的工作原理:实质是MOLAP(Multidimensional Online Analytical Processing) Cube,即多维立方体分析。
概括的讲,kylin主要解决了以下两个问题:
- cube预计算
- sql查询转cube查询
其核心思想是预结算,即对多维分析中用到的度量进行预计算,计算好的结果保存成cube并存储到hbase,查询时直接使用预计算的结果。
- 维度(Dimension):观察数据的角度,一般是一组(即表中的多个列为一组)离散的值;一组属性,提供结构化的标签信息,一般作为报表的坐标轴
- 维度的基数(Cardinality),指一个维度(列)中不同值的个数,例如性别列(sex)的不同值有男、女,那么改性别维度的技术就是 2
- 超高基列(Ultra High Cardinality, UHC),通常指技术超过100万的维度,常见的有 userId, timestamp, productionId等等,维度的基数可以通过hive的count distinct函数来查询获得
- 度量:被聚合的统计值,就是聚合运算的结果,一般是连续的值。例如平均销售额avg(sales), 最大销售额max(sales),主要用来分析或评估,例如判断趋势、效果判断,例如UV和PV等。
- 度量 (Measure):一类可以进行聚合分析的特殊维度,聚合后的结果称为指标。
- 事实表(Fact Table) :数据仓库中的中央表,用于描述业务内特定事件的数据。例如销售表
1.2 kylin特性
查询下压
1.3 cube与计算原理分析
参考链接:
cuboid计算原理分析图
1.4 cuboid在hbase中的存储结构
请参考这里,介绍的非常清楚
1.5 实例说明
cuboid和cube的实例说明,请参考这篇文章(讲解的比较详细)
cuboid和cube立方体示意图
下面文字摘自上述链接:
上图展示了有3个维度的cube,每个小立方体代表一个cuboid,其中存储的是度量列聚合后的结果,比如苹果在中国2010年的销量就是一个cuboid。
当数据量比较少时,可以直接使用RDBMS执行sql,在较短时间内得到结果,但对于大数据量,比如5000万条,RDBMS的性能就满足不了要求了,需要使用别的查询方案,如MPP,Hive。而kylin给我们提供了另外一个思路——预计算,即空间换时间,列出用户所有可能的查询sql,提前处理得到查询结果,并持久化到数据库中,在实际查询时,可复用之前计算的结果,速度可以达到毫秒级别。当然,用户的查询sql是多种多样,无法穷尽的,因此kylin假设用户查询局限于针对不同的维度组合,得到有限个指标的聚合结果。在实际生产中,这个假设符合一般的用户使用场景,所以,kylin仅遍历所有可能的维度组合,求得对应的cuboid,最终作为一个cube供用户查询。
1.6 cube构建步骤
以hive和mapreduce为例:
根据star图,调用Hive,创建一张宽表。
对宽表中的维度列去除,并存到hdfs中
为去重后的维度列建词典
读取宽表数据,计算base cuboid
基于base cuboid,计算次级 cuboid
将cuboid批量导入hbase中
1.7 cube优化
还是参考这篇文章(。。。)
两个优化思路
- 提出聚合组的概念,去除不必要的维度组合,加速cube构建
- 宽表数据重新分配,避免数据倾斜
1.8 sql查询转cube查询
参考这里https://www.jianshu.com/p/22f716d9c528
2. 参考链接
https://blog.lovedata.net/f5dccb04.html
https://blog.csdn.net/weixin_42312342/article/details/93224849
https://www.jianshu.com/p/22f716d9c528