-------写在前面
在数据日益增长的今天,如何在这凌乱的数据中梳理出有价值的数据,是我们面对的首要问题。从数据本身来看,数据分为维度和指标,用不同的维度去衡量不同的指标。这就是数据大多数的应用场景。
然而,如何在超高的维度列的基数中去衡量指标,如何从某一维度去计算指标,单纯的依靠早期的统计软件,效率上会大打折扣。精准度也会下降不少,所以,总是有那么一群人是改变世界的,Apache Kylin便应运而生 开源Kylin,通过预计算(逐层构建)的方式去计算,以空间换取时间,提升效率的同时保障精准度。企业级Kylin的在开源kylin的进行改良。弥补开源的多重功能缺失项。
刚才说到,抛开具体业务场景,数据本身就是维度和指标的组合,那么在kylin中如何的利用维度衡量指标确实是一门技术活。敲黑板,干活开始
![](https://img.haomeiwen.com/i2015574/fb0af24cd3dbcd9d.png)
在kylin中有这么几个维度概念
1.必需维度
字面意思就是需要的维度,那什么是需要的维度呢,这个就要case by case,常见情况下会选择时间维度作为必须维度,比如按日分区的维度。
cuboids减少1/2,
2.层级维度
具有逻辑层次的维度,国家,省,市;商品品类,商品等级,商品名称 这些维度组合为层级维度。
设置层级维度达到优化存储的目的,cuboids减少1/2,减少cuboids的组合,
3.衍生维度
维度表上的某一列通过PK可推倒的,换句话是可查询到的 比如由身份证可以推导性别,所以能通过PK推到的维度都可以设置为衍生维度。
高基维不能设置为衍生维度,应为衍生维度是放在snapshot中,通过映射关系在线计算查询(具体的是转换为PK的查询),本身不参与计算,snapshot不应该也不能存放大数据快,这也就是为什么衍生维度不能选高基维。
4.联合维度
设置联合维度的目的是为了达到降维,什么样的维度可以设置为联合维度,比如这些维度是同时出现,同时消失的维度,具有相对严格的正相关性。如果在cube构建的时候设置的不对,在query会出现后聚合。
5.聚合组
大前提:有固定的分析角度去衡量指标集,根据习惯划分组合大类,每一个大类可以看成一个聚合组,若不清楚用户习惯,尽量不设置聚合组
如何判断是否是高基维,当基数超过100万的时候就是高基维。
以上就是相关维度概念
接着,写下如何去优化一个cube
优化一个cube从空间和时间2个角度优化
cube的空间优化
空间优化就是case by case 的设置以上的相关维度,把如何设置维度作为一个指导思想,实践于具体场景
除此之外,还有通过rowkey编码的设置来优化cube,
一般情况下选择字典编码,对于超高基维使用fixed_length编码,合适的选择int之类的编码格式
cube时间优化
时间当然是指查询的时间了,这里提2点
1.rowkey顺序
这里不讲原理,只讲使用方法
使用方法1
过滤的维度放置在非过滤前面。
使用方法2
高基维放置在低基维前面
使用方法3
频率大放置频率小的前面
2.shardby数据聚类
shardby针对于大文件块,换句话就是对于那些超高基维使用的。所以在选择的时候指定超高基维度即可优化
cube优化也只是这些,完成以上的优化,起码提升80%
嗯,在写下SQL的语法树吧
![](https://img.haomeiwen.com/i2015574/09999a40d5beb47a.png)
图简化了,具体的可以百度参考,毕竟饿了
这是查询的时候一段SQL被计算机切割后的语法树,然后变成逻辑模型如下图所示
![](https://img.haomeiwen.com/i2015574/b190600262d0141c.png)
温馨提示:虽然箭头自上而下,但是看的时候还是要自下而上看
好了最后再来个物理模型
![](https://img.haomeiwen.com/i2015574/8b8865bf6f8bc5f3.png)
![](https://img.haomeiwen.com/i2015574/97c06517cac2d492.png)
预告:未完待续---接下来更新cube的构建和查询。
感觉对您有帮助,烦请点个喜欢!
网友评论