写点什么

kylin 基本概念和原理

发布于: 2021 年 03 月 31 日
kylin基本概念和原理

1、常用术语

  • 维度(Dimension)

一组属性,提供结构化的标签信息,一般作为报表的坐标轴。


  • 度量(Measure)

一类可以进行聚合分析的特殊维度,聚合后的结果称为指标。


  • 事实表(Fact Table)

数据仓库中的中央表,用于描述业务内特定事件的数据。


  • 维度表(Lookup Table)

维度属性的集合,人们观察数据的特定角度。


  • 基度

指数据表中某一列数据去重后的元素个数。


  • 星型模型(Star Schema)

一种多维的数据关系,由一张事实表和一组维度表组成。


  • cuboid

某一维度组合下,度量聚合后的结果集合。


  • 数据立方体(cube)

一组用于分析数据的相关度量值和维度,是所有 cuboid 的集合,作为存储和分析的基本单位。


2、示例

以手机销售为例:

SALE 记录各手机品牌在各个国家,每年的销售情况。

PHONE 是手机品牌,

COUNTRY 是国家列表,

两表通过外键与 SALE 表相关联。

这三张表就构成星型模型,其中 SALE 是事实表,PHONECOUNTRY 是维度表。

现在需要知道各品牌手机于 2010-2012 年,在中国的总销量,那么查询 sql 为:

SELECT phone.name, country.name, SUM(sale.count)FROM SALE AS sale LEFT JOIN PHONE AS phone ON sale.pId = phone.id LEFT JOIN COUNTRY AS country ON sale.cId = country.id WHERE sale.year >= 2010 AND sale.year <= 2012 AND country.name = "中国"GROUP BY phone.name
复制代码

其中:

  • 年份(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 供用户查询。


转载


用户头像

学机械的后端小开发养了猫 2021.03.30 加入

徘徊在平平仄仄梦的边缘

评论

发布
暂无评论
kylin基本概念和原理