KYLIN 建模设计学习总结(概念、空间优化、查询性能优化)

简介: KYLIN 建模设计学习总结(概念、空间优化、查询性能优化)

KYLIN 建模设计学习总结

昨日Kyligence的老师对kylin建模进行了培训,基于Kyligence Cloud,除了界面以及商业特性,其他方式与开源版apache kylin 基本相同。

模型(model

模型是一个语意层的设计,在数仓之上,各种BI工具之下。构建一个模型需要一张事实表,可以有多张维度表,并通过列进行inner\left join。

模型中的维度、度量,基本可以理解为描述事物的角度(地区、客户号),以及指标(身高、销量)。用来对应一种场景下的所有查询的可能性。

  • 维度是从模型选取的表中的字段中部分选取、或全部选取。
  • 度量是在表中字段选取的基础上,进行一定的聚合计算,例如sum、count、去重、top N.
  • 可计算列是一种中间能力,处理底层数据未开发的,或者说不想修改历史设计时使用的,可以利用如case when 进行码值映射、区分范围的虚拟字段,在数仓中并不存在,但可给BI进行查询。

模型中对于维度字段的基数,释义大致是对于该字段的不重复值的数量(distinc count),其会影响构建聚合组时的膨胀率(预计算存储空间相对于原始数据的比例),当基数超过百万、甚至千万时,其对存储空间的影响会开始变得很大。

聚合组

聚合组相对于开源版本kylin应当是cube的概念。新增聚合组时,是从模型的维度中进行选取聚合组的纬度,并默认

对应n个维度产生

个索引(网上资料往往会说减一,实际上C n取n的索引也是存在的,就是其本身)。KYLIN为了减少对空间的浪费,默认配置中限制了一个聚合组索引上限为1000条,所以,达到10个维度就必须进行剪枝,否则会限制聚合组保存。【索引数在1000以内时,所需的存储空间基本处于线性增长,超过后会呈几何级增长】。

  • 必需维度
    必需维度即每次查询中必然包含的维度,例如会计日期这样的字段 。勾选一个维度后,会使得不包含该维度的索引,以及该维度本身的一维索引不会再去生成。是一种结合业务的最有效的剪枝方式。有效降低膨胀率。
  • 层级维度
    顾名思义,选中的维度存在层级关系,下层的维度存在时,上层维度必然存在,例如年-月这样的字段。这样勾选后,就会将包含“月”字段,但是未包含“年”字段的索引从组合中删除,完成剪枝。
    另外,万一存在查询层级维度断开的情况,比如查年-月-日这样的层级维度时,突然业务想要查一下今年每个月的第一天的销量,条件就为年-日,这种情况,由于当前聚合组中,一个维度只能使用一次,这个条件的查询如果真的有必要,就去新建一个聚合组,对其建立一个联合维度。
  • 联合维度
    联合维度字面意思就是将这两个维度绑在一起,可以理解为一个联合维度中的维度往往在查询时会一起被查询到,不需要对单独维度列进行优化。联合维度与其他两个维度不同,它没有强业务关联,在使用必需维度、层级维度后,仍超过索引上限时,可以有一个利用数据特征的暴力优化的方式,将基数不大,看起来甚至也没有多少关联意义的维度进行组合,以此来减少索引数。(不要引入高基维)

另外,聚合组还有个设置:

  • 最大维度组合数
    该值会限制进行组合产生索引的维度数的上线,例如设置为5,就不会产生维度在5个以上的维度组合产生的索引。

这种情况下生成的索引数会有很多,但是可能并不是所有的索引都是我们需要的,我们可以在生成后,单独对某一条索引进行删除。在生产运行一段时间后(按月为单位查看),可以对没有命中过的索引、命中次数少且消耗空间大(性价比低)的索引进行删除(这种情况它会命中比其少维度的父索引,并不会直接下压)。

其实,在挺多业务场景下,很少会基于一个维度、两个维度进行筛选查询,有些企业会通过调用kylin rest api进行定时扫描、删除。

查询优化

在聚合组的总结中,我有意仅写了关于如何在建立聚合组时如何减少存储空间的消耗,而实际上,用户关心的是查询的速度。那你可能要问了,建立聚合组索引,不就是用来预计算提高查询速度的吗? 关于这点,我们可以类比以下普通的关系型数据库的索引。

  • 区分度大的字段应该在索引中排在前,同样的基数大的维度,也应当排在前列。高频查询的字段,也应该往前挪动。
  • 分片(shardBy)
    kylin将预计算数据存在hbase上,底层也是一个hdfs文件,出厂默认一个文件分片的大小为256M。在不设置分片列时,查询的小文件数多,可以去并发读取,当然这基于spark集群资源充裕时,查询速度是提升的,往往,老板也没那么大气。设置一个分片列,能有效去减少读取磁盘文件的次数,分片列建议设置为高频的筛选条件,当然,业务不明的情况下,暴力使用基数最大的列也是可取的(当然,我们要尽量保证数据不倾斜)。
    建议切片完成后,文件数量在200-300个,资源充足可以300-500个,使得扫描文件在两轮中可以完成。(曾经生产环境在读写分离前,资源抢占不到,一直没有去读取文件,导致查询缓慢,甚至麒麟返回超时、socket连接断开)。

明细索引

当前在企业版4.2、4.3中其效率并不高,方法论也和上面聚合组相似。期待其在v4.5接入clickhourse之后的提升了。

目录
相关文章
|
JavaScript
Vue中侦听器watch时,调用this时出现undefined问题
Vue中侦听器watch时,调用this时出现undefined问题
546 0
Vue中侦听器watch时,调用this时出现undefined问题
|
存储 监控 数据挖掘
Kylin使用心得与实战经验分享
本文详细介绍了Apache Kylin的使用方法及其在大数据分析中的优势。首先,Kylin是一款基于Hadoop和Spark的开源分布式分析引擎,通过预计算技术实现亚秒级的交互式查询响应,大幅提高数据分析效率。接着,文章阐述了Kylin的核心特点,包括高效多维分析能力和预计算与实时查询的平衡。然后,详细说明了环境搭建、配置步骤及示例代码,展示了如何配置HBase存储后端。在数据建模与优化部分,讲解了星型模型和雪花模型的选择,以及分区策略和索引优化技巧。
|
Java Android开发
IDEA设置项目编码格式【修改为GBK 或 UTF-8】
这篇文章介绍了在IntelliJ IDEA中如何设置项目编码格式,包括将项目编码修改为GBK或UTF-8的详细步骤和图解。
21416 12
IDEA设置项目编码格式【修改为GBK 或 UTF-8】
|
DataWorks 安全 API
DataWorks产品使用合集之如何构建实时数仓
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
214 0
|
SQL 分布式计算 数据挖掘
Kylin使用心得
Kylin使用心得
172 0
|
SQL 资源调度 分布式计算
CDH+Kylin三部曲之三:Kylin官方demo
本文是《CDH+Kylin三部曲》系列的终篇,一起来实践kylin官方的demo
213 2
CDH+Kylin三部曲之三:Kylin官方demo
|
关系型数据库 MySQL Linux
|
存储 C++
2021-06-11刷题笔记
2021-06-11刷题笔记
2021-06-11刷题笔记
|
人工智能 搜索推荐 安全
企业如何利用AI、IOT、AR、VR、区块链和大数据留住客户
企业正在实施诸如人工智能(AI)、物联网(IoT)、增强现实(AR)、虚拟现实(VR)、区块链和大数据等现代技术,以提高客户的保留率和体验,防止他们输给竞争对手。
555 0
企业如何利用AI、IOT、AR、VR、区块链和大数据留住客户
kylin_学习_02_kylin使用教程
一、     二、参考资料 1.kylin从入门到实战:实际案例
1324 0

热门文章

最新文章