美文网首页
kylin维度及cube优化

kylin维度及cube优化

作者: 起个什么呢称呢 | 来源:发表于2019-01-07 20:39 被阅读181次

-------写在前面

在数据日益增长的今天,如何在这凌乱的数据中梳理出有价值的数据,是我们面对的首要问题。从数据本身来看,数据分为维度和指标,用不同的维度去衡量不同的指标。这就是数据大多数的应用场景。

    然而,如何在超高的维度列的基数中去衡量指标,如何从某一维度去计算指标,单纯的依靠早期的统计软件,效率上会大打折扣。精准度也会下降不少,所以,总是有那么一群人是改变世界的,Apache Kylin便应运而生 开源Kylin,通过预计算(逐层构建)的方式去计算,以空间换取时间,提升效率的同时保障精准度。企业级Kylin的在开源kylin的进行改良。弥补开源的多重功能缺失项。


刚才说到,抛开具体业务场景,数据本身就是维度和指标的组合,那么在kylin中如何的利用维度衡量指标确实是一门技术活。敲黑板,干活开始

逐层构建

在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的语法树吧

SQL语法树

图简化了,具体的可以百度参考,毕竟饿了

这是查询的时候一段SQL被计算机切割后的语法树,然后变成逻辑模型如下图所示

逻辑模型

温馨提示:虽然箭头自上而下,但是看的时候还是要自下而上看

好了最后再来个物理模型

开源的查询 企业版查询

预告:未完待续---接下来更新cube的构建和查询。

感觉对您有帮助,烦请点个喜欢!

相关文章

网友评论

      本文标题:kylin维度及cube优化

      本文链接:https://www.haomeiwen.com/subject/fndprqtx.html