OLAP 玩转KYLIN 步五 官方案列实战之创建Model

有了表信息之后,就可以开始创建数据模型(Data Model)了。数据模型是Cube的基础,有了数据模型以后,定义Cube的时候就可以直接从此模型定义的表和列中选择需要的维度列及度量列。
为什么需要Model?
我们假设不用建Model,直接定义Cube,那如果有两个cube1、cube2,他们用到的事实表、维度表都一样,表间的关联关系也一样,只是查询维度或度量的角度不同,那创建这两个cube的时候,就会在设计事实表及维度表的关联地方进行重复性工作,造成我们的使用不便,及时间的浪费。
所以,Model省去我们重复指定事实表与维度表关联的步骤。
基于一个数据模型可以创建多个Cube,这样我们就可以减少大量的重复性工作。

按下图所示数字顺序点击
这里写图片描述
按下图所示标注操作
这里写图片描述
上一步点击Next,我们便进入下图操作界面,选择事实表,然后添加维度表,如图:
这里写图片描述
点击+Add Lookup Table,进行维度表的添加,如图:
这里写图片描述
添加完需要的维表后,结果如下图:
这里写图片描述
上一步Next,进入维度选择界面,维度怎么选select field1,field2,...,max(field),min(field),sum(field)...from table where field3>= ...and field4=... group by field5,field6,如SQL语句所示,只要出现在select,where,group by 之后的字段都可以选择为维度。
这里所选的维度只是为创建cube时的维度选择设置一个范围,不代表这些列将来一定要用作Cube的维度或度量,你可以把所有可能会用到的列都选出来,后续创建Cube的时候,将只能从这些列中进行选择。
选择维度列时,维度可以来自事实表或维度表
本案例维度选择如下图:
这里写图片描述
上一步Next,进入度量选择界面,度量怎么选select field1,field2,...,max(field),min(field),sum(field),top(field),distinct(field),count(field)...from table where field3>= ...and field4=... group by field5,field6,如SQL语句所示,被函数max/min/sum/top/distinct/count所操作的字段都可以选择为度量,
特别注意:度量列只能从事实表中选择
本案例度量选择如下图:
这里写图片描述
上一步Next,进入Model创建的最后一步,为模型补充分割时间列信息和过滤条件。先让我们看看下图的具体操作,来个直观的感受,具体为什么这样做,继续看下面的文字说明。如图:
这里写图片描述
完成以上步骤,我们便完成了Model的创建工作。


下面来详细讲讲分割时间列到底什么用。
分割时间列其实就是cube增量构建的基础。

并非所有的Cube都适用于增量构建,Cube的定义必须包含一个时间维度,用来分割不同的Segment,我们将这样的维度称为分割时间列(Partition Date Column)。尽管由于历史原因该命名中存在“date”的字样,但是分割时间列既可以是Hive中的Date类型、也可以是Timestamp类型或String类型。无论是哪种类型,Kylin都要求用户显式地指定分割时间列的数据格式,例如精确到年月日的Date类型(或者String类型,注:实践中遇到日期为string类型总是出错,改为date就好了,所以建议不要用string)的数据格式可能是yyyyMMdd或yyyy-MM-dd,如果是精确到时分秒的Timestamp类型(或者String类型),那么数据格式可能是YYYY-MM-DD HH:MM:SS。

目前分割时间列必须是事实表上的列。一般来说如果年月日已经足够帮助分割不同的Segment,那么在大部分情况下日期列是分割时间列的首选。当用户需要更细的分割粒度时,例如用户需要每6小时增量构建一个新的Segment,那么对于这种情况,则需要挑选包含年月日时分秒的列作为分割时间列。

在一些用户场景中,年月日和时分秒并不体现在同一个列上,例如在用户的事实表上有两个列,分别是“日期”和“时间”,分别保存记录发生的日期(年月日)和时间(时分秒),对于这样的场景,允许用户指定一个额外的分割时间列来指定除了年月日之外的时分秒信息。为了区分,我们将之前的分割时间列称为常规分割时间列,将这个额外的列称为补充分割时间列。在勾选了“Has a separate "time of the day" column?”选项之后(如本文最后一图所示),用户可以选择一个符合时分秒时间格式的列作为补充的分割时间列。由于日期的信息已经体现在了常规的分割时间列之上,因此补充的分割时间列中不应该再具有日期的信息。反过来说,如果这个列中既包含年月日信息,又包含时分秒信息,那么用户应该将它指定为格式是YYYY-MM-DD HH:MM:SS的常规分割时间列,而不需要勾选“Has a separate “time of the day”column?”。在大部分场景下用户可以跳过补充分割时间列。


到此,Model的创建讲解完毕,让我们看看新建的Model在什么地方,如图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值