kylin 官方案例learn_kylin手动创建测试

在上一篇文章中介绍了kylin相关的基本知识,这篇文章的主要目的是针对kylin初学者,进行一次详细的kylin案例介绍,这里,我们还是以官方给定的数据为例。说明,我用的是kylin2.1.0. 与kylin1.x 可能有不一样的地方。

核心概念

  1. 事实表和维度表

    • 事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。
    • 维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等
  2. Cube、Cuboid和Cube Segment

    • Cuboid在Kylin中特指在某一种维度组合下所计算的数据。
    • Cube(或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。简单来说,一个Cube就是许多按维度聚合的物化视图的集合。
    • Cube Segment是指针对源数据中的某一个片段,计算出来的Cube数据。通常数据仓库中的数据数量会随着时间的增长而增长,而CubeSegment也是按时间顺序来构建的。注意的是,在增量构建中,相邻两个segment的时间是连续的。
  3. 星型模型

    • 数据挖掘有几种常见的多维数据模型,如星形模型(Star Schema)、雪花模型(Snowflake Schema)、事实星座模型(Fact Constellation)等。
    • 星形模型中有一张事实表,以及零个或多个维度表;事实表与维度表通过主键外键相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围,故取名为星形模型。
      特别注意:Kylin只支持星形模型的数据集
  4. 维度表的设计原则
    除了数据模型只支持星型模型外,kylin对维度表还有一定的要求。

    • 要具有数据一致性,主键值必须是唯一的;Kylin会进行检查,如果有两行的主键值相同则会报错。
    • 维度表越小越好,因为Kylin会将维度表加载到内存中供查询;过大的表不适合作为维度表,默认的阈值是300MB。
    • 改变频率低,Kylin会在每次构建中试图重用维度表的快照,如果维度表经常改变的话,重用就会失效,这就会导致要经常对维度表创建快照。
    • 维度表最好不要是Hive视图(View),虽然在Kylin1.5.3中加入了对维度表是视图这种情况的支持,但每次都需要将视图进行物化,从而导致额外的时间开销。

hive表中数据

运行$KYLIN_HOME/bin/sample.sh 就会在hive自动创建五张表。当然你可以用vim打开sample.sh看看这个脚本文件到底是怎么样执行的。

我们看到,它调用了sample_cube下的create_sample_tables.sql创建表以及加载数据,所有与官方例子有关的数据都在samp_cube文件夹下

导入后,可以在hive查看具体信息。红线框住的部分,这5张表构成一个星型模型,kylin_sales是事实表,其他的作为维度表。

导入表

打开kylin主界面,新建一个项目test_kylin

选择项目test_kylin, 点击Data Source标签,第一个图标load hive table 需手动输入hive表名(带数据库名),中间图标load hive table from tree可直接选择表,最后一个图标为流式数据,暂时不管。

选择对应的5张表。

导入成功后,可以看到以下表信息

创建数据模型

不废话,直接新型操作

输入模型名称,注意模型名在整个kylin应用下具有唯一性,而不是只在单个项目下的唯一性。

直接下一步,选择维度表和事实表。事实表是唯一的,这里我们选择kylin_sales. 单击 Add Lookup Table,选择维度表。

依次添加4个维度表。添加维度表的时候,需要选择连接的类型:是Inner还是Left,然后选择连接的主键和外键,这里也支持多主键。

所有维度表添加完成后如下:

接下来选择维度和度量列,度量只能在事实表中选择,维度表在事实表和维度表中选择,一个列只能是维度或度量中的一个。这里只是选择一个范围,不代表这些列将来一定要用作Cube的维度或度量,你可以把所有可能会用到的列都选进来,后续创建Cube的时候,将只能从这些列中进行选择。

最后一步,是为模型补充分割时间列信息和过滤条件。如果此模型中的事实表记录是按时间增长的,那么可以指定一个日期/时间列作为模型的分割时间列,从而可以让Cube按此列做增量构建,如果是想做全局构建,这一步就不用填,我们选择增量构建。

过滤(Filter)条件是指,如果想把一些记录忽略掉,那么这里可以设置一个过滤条件。Kylin在向Hive请求源数据的时候,会带上此过滤条件。比如要过滤掉价格小于0的列,只需要在filter中带上条件 price > 0.

最后,单击save,即可完成对数据模型的创建。

创建cube

model创建好以后,我们就可以根据它创建cube了。单击new,选择new cube。选择model,输入cube name,同理,cube name也是全局唯一的。这里还可以输入一个邮件通知列表,用于在构建完成或出错时收到通知。如果不想接收处于某些状态的通知,那么可以从“Notification Events”中将其去掉。

接下来,添加维度。这里和kylin1.5版本有一点不一样,在kylin2.1中,直接单击 Add Dimensions ,根据各个表,选择维度以及设置维度表中维度为normal 或者derived(衍生维度)。

添加完成后如下

如果是衍生维度的话,则必须是来自于某个维度表,由于这些列值都可以从该维度表的主键值中衍生出来,所以实际上只有主键列会被Cube加入计算。而在Kylin的具体实现中,往往采用事实表上的外键替代主键进行计算和存储。但是在逻辑上可以认为衍生列来自于维度表的主键。

接下来,添加度量。_COUNT_ 是默认的聚合函数。可以单击“+Measure”按钮来添加新的度量。Kylin支持的度量有:SUM、MIN、MAX、COUNT、COUNT DISTINCT、TOP_N、RAW等。请选择需要的度量
类型,然后再选择适当的参数(通常为列名)

如果param Type选择column的话,下拉列表里面只能是度量信息。Return Type也是根据hive表中字段的类型在自动生成的,当然,这里也有一些kylin自己封装的类型,比如hllc(10)等。
需要注意的是,在kylin2.1版本中已经支持normal维度的聚合。


所有度量聚合添加完成后:

是关于Cube数据刷新的设置。在这里可以设置自动合并的阈值、数据保留的最短时间,以及第一个Segment的起点时间(如果Cube有分割时间列的话)

  • “Partition Start Date”是指Cube默认的第一个Segment的起始时间。同一个Model下不同的Cube可以指定不同的起始时间
  • “Auto Merge Thresholds”用于指定Segment自动合并的阈值
  • “Retention Threshold”则用于指定将过期的Segment自动抛弃

接下来是进行高级设置,维度的优化基本上通过这个这设置,在此页面上可以设置聚合组和Rowkey。

Kylin默认会把所有维度都放在同一个聚合组中;如果维度数较多(例如>10),那么建议用户根据查询的习惯和模式,单击“New AggregationGroup+”,将维度分为多个聚合组。通过使用多个聚合组,可以大大降低Cube中的Cuboid数量。下面来举例说明,如果一个Cube有(M+N)个维度,那么默认它会有2m+n 个Cuboid;如果把这些维度分为两个不相交的聚合组,那么Cuboid的数量将被减少为2m +2n 。

在单个聚合组中,可以对维度设置高级属性,如Mandatory、Hierarchy、Joint等

  • Mandatory维度指的是那些总是会出现在Where条件或Group By语句里的维度;通过将某个维度指定为Mandatory,Kylin就可以不用预计算那些不包含此维度的Cuboid,从而减少计算量。
  • Hierarchy是一组有层级关系的维度,例如“国家”“省”“市”,这里的“国家”是高级别的维度,“省”“市”依次是低级别的维度。用户会按高级别维度进行查询,也会按低级别维度进行查询,但在查询低级别维度时,往往都会带上高级别维度的条件,而不会孤立地审视低级别维度的数据。例如,用户会单击“国家”作为维度来查询汇总数据,也可能单击“国家”+“省”,或者“国家”+“省”+“市”来查询,但是不会跨越国家直接Group By“省”或“市”。通过指定Hierarchy,Kylin可以省略不满足此模式的Cuboid。
  • Joint是将多个维度组合成一个维度

Kylin以Key-Value的方式将Cube存储到HBase中。HBase的key,也就是Rowkey,是由各维度的值拼接而成的;为了更高效地存储这些值,Kylin会对它们进行编码和压缩;每个维度均可以选择合适的编(Encoding)方式,默认采用的是字典(Dictionary)编码技术;除了字典以外,还有整数(Int)和固定长度(Fixed Length)的编码。

在kylin1.5(记得清楚了,好像是1.5)之后,引入了spark引擎,所以现在可以选择mapreduce和spark构建引擎,Advance ColumnFamily里面对应hbase里面的信息,CF 相当于hbase的列簇,而measure就是其中的列。

下一步,为Cube配置参数。和其他Hadoop工具一样,Kylin使用了很多配置参数以提高灵活性,用户可以根据具体的环境、场景等配置不同的参数进行调优。Kylin全局的参数值可在conf/kylin.properties文件中进行配置;如果Cube需要覆盖全局设置的话,则需要在此页面中指定。单击“+Property”按钮,然后输入参数名和参数值。我们这里直接保持默认就好。

直接写一步,完成。

构建cube

cube的模型建立好以后,我们还需要对其进行构建。

设置segment的结束日期

提交成功。等待cube的完成。

搞定,下面就可以进行sql查询操作了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章