kylin 基本概念和原理
1、常用术语
维度(Dimension)
一组属性,提供结构化的标签信息,一般作为报表的坐标轴。
度量(Measure)
一类可以进行聚合分析的特殊维度,聚合后的结果称为指标。
事实表(Fact Table)
数据仓库中的中央表,用于描述业务内特定事件的数据。
维度表(Lookup Table)
维度属性的集合,人们观察数据的特定角度。
基度
指数据表中某一列数据去重后的元素个数。
星型模型(Star Schema)
一种多维的数据关系,由一张事实表和一组维度表组成。
cuboid
某一维度组合下,度量聚合后的结果集合。
数据立方体(cube)
一组用于分析数据的相关度量值和维度,是所有 cuboid 的集合,作为存储和分析的基本单位。
2、示例
以手机销售为例:
表 SALE 记录各手机品牌在各个国家,每年的销售情况。
表 PHONE 是手机品牌,
表 COUNTRY 是国家列表,
两表通过外键与 SALE 表相关联。
这三张表就构成星型模型,其中 SALE 是事实表,PHONE、COUNTRY 是维度表。
现在需要知道各品牌手机于 2010-2012 年,在中国的总销量,那么查询 sql 为:
其中:
年份(sale.year), 手机品牌(phone.name),国家(country.name)是维度。
销售数量(sale.count)是度量。
手机品牌的个数可用于表示手机品牌列的基度。
各手机品牌在各年各个国家的销量可作为一个 cuboid ,所有的 cuboid 组成一个 cube。
上图展示了有 3 个维度的 cube,
每个小立方体代表一个 cuboid ,其中存储的是度量列聚合后的结果,
比如苹果在中国 2010 年的销量就是一个 cuboid。
当数据量较少时,可以直接使用 RDBMS(关系数据库管理系统) 执行 sql,在较短时间内得到结果。
但对于大数据量,比如 5000 万条,RDBMS 的性能就满足不了要求了,需要使用别的查询方案。
kylin 给我们提供了另外一个思路 —— 预计算。
即空间换时间。
列出用户所有可能的查询 sql,提前处理得到查询结果,并持久化到数据库中。
在实际查询时,可复用之前计算的结果,速度可以达到毫秒级别。
当然,用户的查询 sql 是多种多样,无法穷尽的,因此 kylin 假设用户查询局限于针对不同的维度组合,得到有限个指标的聚合结果。
在实际生产中,这个假设符合一般的用户使用场景,所以,kylin 仅遍历所有可能的维度组合,求得对应的 cuboid,最终作为一个 cube 供用户查询。
评论