168大数据

标题: kylin入门到实战 [打印本页]

作者: 168主编    时间: 2019-10-25 12:14
标题: kylin入门到实战
本帖最后由 168主编 于 2019-10-25 12:16 编辑

kylin入门到实战:入门

1.概述
kylin是一款开源的分布式数据分析工具,基于hadoop之上的sql查询接口,能支持超大规模的数据分析。响应时间在亚秒级别,其核心是预计算,计算结果存放在hbase中。
2.特性3.相关概念
3.1 Fact Table(事实表):
事实表是指包含了大量不冗余数据的表,其列一般有两种,分别为包含事实数据的列,包含维表foreign key的列。
3.2 Lookup table:包含了对事实表的某些列扩充说明的字段。
3.3 Dimenssion Table(维表):
由fact table和lookup table 抽象出来的表,包含了多个相关的列,提供对数据不同维度的观察,其中每列的值的数目称为cardinatily。
3.4 model:用来定义用户需要使用的hive表名,及所包含的维度列、度量列、partition列和date格式。
3.5 cube:用来定义某具体查询时会涉及到的维度列及相互之间的关系(如层级关系)、度量列的具体类型(如max,min,sum)等,一个model下可存在多个cube。

kylin入门到实战:cube详述


1.什么是cube?
cube是所有dimession的组合,每一种dimession的组合称之为cuboid。某一有n个dimession的cube会有2n个cuboid,如图:

对应一张hive表,有time,item,location,supplier这四个维度,则0-D cuboid时对应的查询语句为 select sum(money) from table;1-D cuboid对应的查询语句有四个,分别为select sum(money) from table group by time,以及select sum(money) from table group by item,以及select sum(money) from table group by location。对应的在2-D时group by 后面的维度会是time,item,location,supplier两两组合。如果不采取优化措施,理论上kylin在预计算过程中会对上述每一种组合进行预计算,随着维度的增加,计算量将会呈几何倍数的增长。为了解决这种问题,kylin对dimession做了分类,见下文。
2.dimession
为了减少cuboid的数量,kylin对dimession做了如下分类
normal:最为普通常见的dimession类型,与其他类型的dimession组成cuboid。
mandatory:每次查询均会使用到的dimession,在下图中A为Mandatory dimension,则与B、C总共构成了4个cuboid,相较于normal dimension的cuboid(23=8)减少了一半。

在实际生产应用中,比如对于日报表的分析,可能日期就是一个mandatory dimession。
hierarchy:带层级的dimession,如:年->月->日,要求子级的父级必须存在。如下的例子中cuboid由2n降为了n+1。
然而,Kylin的Hierarchy dimensions并没有做集合包含约束,比如:kylin_sales_cube定义Hierarchy dimension为META_CATEG_NAME->CATEG_LVL2_NAME->CATEG_LVL3_NAME,但是同一个CATEG_LVL2_NAME可以对应不同META_CATEG_NAME。因此,hierarchy 显得非常鸡肋,以至于在Kylin后台处理时被废弃了。
derived:指该dimession与维表的primary key是一一对应的关系,可以有效减少cuboid的数量,derived dimession只能由Lookup Table生成。

3.measure
measure为事实表的度量值,kylin提供了下面几个函数:
sum,count,max,min,avarage,count_distinct
其中count_distinct有两种实现方式:
(1)近似Count Distinct。Apache Kylin使用HyperLogLog算法实现了近似Count Distinct,提供了错误率从9.75%到1.22%几种精度供选择;
算法计算后的Count Distinct指标,理论上,结果最大只有64KB,最低的错误率是1.22%;这种实现方式用在需要快速计算、节省存储空间,并且能接受错误率的Count Distinct指标计算。
(2)准Count Distinct。从1.5.3版本开始,Kylin中实现了基于bitmap的精确Count Distinct计算方式。当数据类型为tiny int(byte)、small int(short)以及int,
会直接将数据值映射到bitmap中;当数据类型为long,string或者其他,则需要将数据值以字符串形式编码成dict(字典),再将字典ID映射到bitmap;
指标计算后的结果,并不是计数后的值,而是包含了序列化值的bitmap.这样,才能确保在任意维度上的Count Distinct结果是正确的。
这种实现方式提供了精确的无错误的Count Distinct结果,但是需要更多的存储资源,如果数据中的不重复值超过百万,结果所占的存储应该会达到几百MB。

来源:大数据随笔






欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2