《一份详细的Kylin执行样例——基于kylin2.5.0》一文中,小厨介绍了如何使用kylin,今天开辟一个新路线,个人感觉随着时代的发展,数据实时分析会成为主力军,因为今天介绍一下Kafka+kylin,流式构建cube。kylin是从1.5版本开始,引入Streaming Table,目的是减少OLAP分析的延时,到目前的2.5.0版本 Streaming做的已经相当较成熟了。
主要方法:kylin通过已经创建好的虚拟表 Streaming Table,周期性地从kafka中读取数据,根据我们定义的Model和cube,将计算好的数据存入到Hbase,供用户查询。
我们的业务场景和上文中的一样,并且数据格式跟之前文章中提过的类似,依然是统计pv uv的值,只不过这里讲其都转换成了JSON格式,据说到目前,kylin流式构建只支持JSON的数据格式。{"access_time":1437494731879,"cookieId":"M211FDN88TXQHM9QEU","regionId":"G01","cityId":"G0102","site":"5143","os":"Android 7.0","pv":"9"}。
主要步骤:
- 在Kylin中建立新的Project;
- Kylin中同步数据源(Load DataSource);
- Kylin中建立数据模型(New Model);
- 定义New Cube
- Build Cube;
- 查询Cube
注意:在 kylin v2.4.0 以前,Streaming Cube 不支持与 lookup 表进行 join;当定义数据模型时,只选择 fact 表,不选 lookup 表;这意味着你JSON含有哪些字段,之后你只能显示和操作哪些字段。举个例子,上面我们的"regionId":"G01"代表的是省会(安徽、陕西等),"cityId":"G0102"代表城市(合肥、西安),我们期望能通过关联其他两张表(region_tb1和city_tb1)来显示相关文字,但是在v2.4.0之前不可能做到,在其之后可以通过lookup表的方式来关联表之间的关系。
一、定义数据表
首先,我们将JSON格式的数据放入到Streaming DataSource的JSON框中,点击》图标,kylin会自动映射成表的字段,输入Table Name,这里需要注意的是,进入的字段可能映射的字段的类型不准确,比如我的pv它映射成了date,但是我后面的是要将其作为sum的,所以需要手动修改一下,省的后来还得回来重新创建表。这里面我们后来是要分钟级别的构建cube,因此我们要选到minute为止。之后配置你的Kafka集群的信息,包括topic name以及broker list,我这里name是web_pvuv_kylin_streaming_topic。
注意:Kylin允许用户挑选一些从业务时间戳上衍生出来的时间维度(Derived Time Dimension),具体来说有如下几种。
·minute_start:业务时间戳所在的分钟起始时间,类型为Timestamp(yyyy-MM-dd HH:mm:ss)。
·hour_start:业务时间戳所在的小时起始时间,类型为Timestamp(yyyy-MM-dd HH:mm:ss)。
·day_start:业务时间戳所在的天起始时间,类型为Date(yyyy-MMdd)。
·week_start:业务时间戳所在的周起始时间,类型为Date(yyyy-MMdd)。
·month_start:业务时间戳所在的月起始时间,类型为Date(yyyy-MMdd)。
·qu