1.登录页面
①登录:http://168.168.207.3:7070/kylin(其中168.168.207.3为你所安装kylin主机的ip地址,7070为端口号,在浏览器上输入如上地址即可正确跳转到登录地:http://168.168.207.3:7070/kylin/login)
②登录账号与密码:Kylin默认账号为:ADMIN默认密码:KYLIN(区分大小写,必须全都大写)
2.Project
初次登录Kylin时,需要新建一个Project,才能利用kylin为我们做OLAP分析。
点击左上角的加号(Add Project):
输入Project相应信息:
本教程之后的讲述均在已经创建好的Project--Test中进行,具体如下图所示:
3.Datasource:
存在于Hive中的数据库会同步显示到kylin web页面中的Datasource下。
选中某个数据库下的某张表,在页面右侧即会展现该表的字段信息,下图以数据库weishu,表A_1为例:
Datasource的右手边有四个小图标,它们的从左往右功能分别是:加载Hive表,从同步的目录中导入,即将上张图中左侧的数据库中的表导入,上传Hive表,添加流表。(工作中常用的是第二个,即从同步的目录中导入相应的hive table)分别如下所示:
Upload load Hive Table 省略
4.Model
成功创建好Project后,需要为我们将要inner join的两张表,创建一个model(模型),如下图所示,点击+NEW按钮,选择New Model:
①填写相应的model info:
②选择事实表:
事实表(Fact Table)是中心表,包含了大批数据并不冗余,其数据列可分为两类:
包含大量数据事实的列;
与维表(Dimension Table)的primary key相对应的foreign key。
③添加查找表
Lookup Table包含对事实表的某些列进行扩充说明的字段。本案例以T_PROCESSAPPLY为lookup table。
可以看到,kylin提供了两种join的方式:left join和inner join,本案例采用的是inner join的方式。
点击New Join Condition添加新的join条件,这里我们将两张表的WORKFLOWNUMBER做关联,所以join条件按下图的方式进行选择:
选择以及添加好Fact table和Look Table后的图例如下:
④.添加Dimensions:
维表(Dimension Table)是由fact table与lookup table逻辑抽象出来的表,包含了多个相关的列(即dimension),以提供对数据的多维观察;其中dimension的值的数目称为cardinatily
事实表APPROVALHISTORY的WORKFLOWNUMBER、和APPROVALTIME被抽出来做dimension,与查找表T_PROCESSAPPLY表被抽出来的dimension:WORKFLOWNUMBER和STAUS组合分析数据。
⑤添加Measure columns:
Measure为事实表的列度量,Kylin提供诸如:
Sum
Count
Max
Min
Average
Distinct Count (based on HyperLogLog)
等函数,一般配合group by dimesion使用。
本案例以APPROVALHISTORY中的WORKFLOWNUMBER字段做列度量:
⑥Settings:
Cube中细讲,点击右下角的save
点击弹窗中的yes,完成model:innerjoint_t2的创建
5.Cube
创建cube,点击+New,选中New Cube
①Cube info
②Diemnsions
选择Auto Generator:
本案例全部勾选:
选中并点击OK后的图例如下图所示:
两种维度说明:目的------->为了减少cuboid的数目
lNormal,为最常见的类型,与所有其他的dimension组合构成cuboid。
lDerived,指该dimensions与维表的primary key是一一对应关系,可以更有效地减少cuboid数量,详细的解释参看这里;并且derived dimension只能由lookup table的列生成。
③Measures:
kylin会为每一个cube创建一个聚合函数为count(1)的度量,它不需要关联任何列,用户自定义的度量可以选择SUM、COUNT、DISTINCT COUNT、MIN、MAX,而每一个度量定义时还可以选择这些聚合函数的参数,可以选择常量或者事实表的某一列,一般情况下我们当然选择某一列。这里我们发现kylin并不提供AVG等相对较复杂的聚合函数(方差、平均差更没有了),主要是因为它需要基于缓存的cube做增量计算并且合并成新的cube,而这些复杂的聚合函数并不能简单的对两个值计算之后得到新的值,例如需要增量合并的两个cube中某一个key对应的sum值分别为A和B,那么合并之后的则为A+B,而如果此时的聚合函数是AVG,那么我们必须知道这个key的count和sum之后才能做聚合。这就要求使用者必须自己想办法自己计算了。
无特殊要求,保持默认即可:
④Refresh Setting
设置增量cube信息,首先需要选择事实表中的某一个时间类型的分区列(貌似只能是按照天进行分区),然后再指定本次构建的cube的时间范围(起始时间点和结束时间点),这一步的结果会作为原始数据查询的where条件,保证本次构建的cube只包含这个闭区间时间内的数据,如果事实表没有时间类型的分区别或者没有选择任何分区则表示数据不会动态更新,也就不可以增量的创建cube了。
可以在该选项中选择分区字段,根据这个字段来获取每次预计算的输入数据区间,Kylin中将每一个区间计算的结果称之为一个Segment,预计算的结果存储在hbase的一个表中。通常情况下这个分区字段对应hive中的分区字段,以天为例子,每次预计算一天的数据。这个过程称之为build。
除了build这种每个时间区间向前或者向后的新数据计算,还存在两种对已完成计算数据的处理方式。第一种称之为Refresh,当某个数据区间的原始数据(hive中)发生变化时,预计算的结果就会出现不一致,因此需要对这个区间的segment进行刷新,即重新计算。第二种称之为Merge,由于每一个输入区间对应着一个Segment,结果存储在一个htable中,久而久之就会出现大量的htable,如果一次查询涉及的时间跨度比较久会导致对很多表的扫描,性能下降,因此可以通过将多个segment合并成一个大的segment优化。但是merge不会对现有数据进行任何改变。
说句题外话,在kylin中可以设置merge的时间区间,默认是7、28,表示每当build了前一天的数据就会自动进行一个merge,将这7天的数据放到一个segment中,当最近28天的数据计算完成之后再次出发merge,以减小扫描的htable数量。但是对于经常需要refresh的数据就不能这样设置了,因为一旦合并之后,刷新就需要将整个合并之后的segment进行刷新,这无疑是浪费的。
注意:kylin不支持删除某一天的数据,如果不希望这一天数据存在,可以在hive中删除并重新refresh这段数据
⑤Advanced Settings
1、设置Rowkey
2、设置维度组
3、设置Cube Size
在进入到设置RowKey的时候会看到每一个维度的设置(Derived维度看到的是外键列而不是Derived的列),每一个维度可以设置ID(通过拖拽可以改变每一个维度的ID)、Mandatory、Dictionary和Length。
设置rowkey,这一步的建议是看看就可以了,不要进行修改,除非对kylin内部实现有比较深的理解才能知道怎么去修改。当然这里有一个可以修改的是mandatory dimension,如果一个维度需要在每次查询的时候都出现,那么可以设置这个dimension为mandatory,可以省去很多存储空间,另外还可以对所有维度进行划分group,不会组合查询的dimension可以划分在不同的group中,这样也会降低存储空间。
注意:new aggregation group,是kylin 1.5的新特性;
老版本中的agg是需要选中所有可能被使用的纬度字段,以供查询;但存在高纬度的查询需求,例如查询某订单编号编号的数据,这时应该仅仅做filter,而不需要为此做cube,但在老版本的agg中,是不允许在group中来制定prune细节。
而新的特性中,new agg允许设置field是compute(参与cube)还是skip(不参与cube)
⑥Configuration Overwrites
写入配置,直接Next。
⑦Overview
配置概览,t3改写为t2,因为innerjoint_t2已经建立,所以教程虽按t2讲,实则创建的是innerjoint_t3。
点击save,选择Yes,创建成功
6.Build
创建成功后的cube是disable状态,需要build一下:
建立build job成功:
7.Monitor
点击monitor,实时观测build状态。
点击每个build后的
查看具体状态:
Build成功:
此时,cube状态变为Ready:
8.Insight:
SQL查询语句:
成功查询:
注意事项:
①如果cube在build中出现错误,需要在monitor中discard对应的cube才能重新build
②删除model前必须先drop掉里面的cube,而drop掉cube前如果cube是Ready状态需要先disable。
Disable