官网很直接,上来就给出了kylin的架构,也很清晰。可以把kylin看成3个部分。
cube管理查询
cube构建引擎
cube存储引擎
其中,构建引擎和存储引擎可以自由扩展,默认是mapreduce和hbase
术语 OLTP
OLTP(联机事务处理)是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP
数据联机分析处理引擎。kylin就是一款针对OLAP的系统。
OLAP和OLTP的区别可以理解为,OLAP是主观的需求产物,OLTP是客观的需求产物。
cube
cube和传统的关系数据库和二维表不一样,可以有很多个维度,下图是一个三维的cube,在数据分析中,cube非常重要,下面章节会针对kylin中的cube进行详细描述。
MXD
MDX语句(MultiDimensionalExpressions)是一种语言,支持多维对象与数据的定义和操作。它可以表达在线分析出来数据卡上的选择、计算和一些元数据定义等操作,并赋予用户表现查询结果的能力。
如同SQL查询一样,每个MDX 查询都要求有数据请求(SELECT子句)、起始点(FROM子句)和筛选(WHERE子句)。这些关键字以及其它关键字提供了各种工具,用来从多维数据集析取数据特定部分。MDX还提供了可靠的函数集,用来对所检索的数据进行操作,同时还具有用户定义函数扩展 MDX的能力。
语法:
最基本的语法:select 轴1,轴2,…… from 立方体模型名 where 切片
可以看到,非常类似于SQL的语法:Select
列1,列2……
from 表1,表2…… where 条件子句。
首先,需要理解轴的概念:
轴:相当于SQL里的列,想象轴,需要有点立体概念,或者,我们把问题简化,对于平面表的展示,只会存在两个轴,也就是列轴和行轴。现有的大多数OLAP展示,也只体现这两个轴,我们公司的产品也不例外。说具体一点,轴对应于一个集合。
集合:由元组形成,
元组:可包括多个维度中的成员,也可包括来自同一个维度的多个成员。
成员:维度中一次或多次数据出现的项。
再看看立方体模型:这个很好理解,也就是主题分析时形成的模型方案了,MDX只支持单一模型。
最后看一下 切片:这和SQL中的筛选一样。不过,因为OLAP的数据是立体的,多维的,要变成平面,就需要切啊,切啊,把一些不需要展示的维度设定固定值(也就是切一下)。注意:当不指定任何切片时,一般的实现是将未出现的维度的默认成员值做为切片值。
事实表 & 维度 & 度量
事实表
每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如销售商品所产生的数据,与软件中实际表概念一样。
维度
说明数据,维度是指可指定不同值的对象的描述性属性或特征。例如,地理位置的维度可以包括“纬度”、“经度”或“城市名称”。“城市名称”维度的值可以为“旧金山”、“柏林”或“新加坡”。可以用于从不同角度来分析数据,例如常见的时间,地点维度
度量
事实表和维度交叉汇聚的点,度量和维度构成OLAP的主要概念,这里面对于在事实表或者一个多维立方体里面存放的数值型的、连续的字段,就是度量。这符合上面的意思,有标准,一个度量字段肯定是统一单位,例如元、户数。如果一个度量字段,其中的度量值可能是欧元又有可能是美元,那这个度量可没法汇总。在统一计量单位下,对不同维度的描述。
维度 & 度量
维度是指审视数据的角度,它通常是数据记录的一个属性,例如时间、地点等。度量是基于数据所计算出来的考量值;它通常是一个数值,如总销售额、不同的用户数等。分析人员往往要结合若干个维度来审查度量值,以便在其中找到变化规律。在一个SQL查询中,Group By的属性通常就是维度,而所计算的值则是度量
例子1:
有item A,time t, location l。那么item A位于事实表,time t和location l位于维度表。假如对time t按天做group by, 对 item A做sum()。那么得到的数据就是度量。
例子2:
在上面的这个查询中,part_dt和lstg_site_id是维度,sum(price)和count(distinct seller_id)是度量。
维度表 & 事实表