1 简单使用
以 gmall 数 据 仓 库 中 的 dwd_payment_info 作 为 事 实 表 , dwd_order_info_his 、dwd_user_info 作为维度表,构建星型模型,并演示如何使用 Kylin 进行 OLAP 分析。
1 创建工程
1)点击下图中的"+"。
2)填写项目名称和描述信息,并点击 Submit 按钮提交。
2 获取数据源
1)点击 DataSource
2)点击下图按钮导入 Hive 表
3)选择所需数据表,并点击 Sync 按钮
3 创建 model
1)点击 Models,点击"+New"按钮,点击"★New Model"按钮。
2)填写 Model 信息,点击 Next
3)指定事实表
4)选择维度表,并指定事实表和维度表的关联条件,点击 Ok
维度表添加完毕之后,点击 Next
5)指定维度字段,并点击 Next
6)指定度量字段,并点击 Next
7)指定事实表分区字段(仅支持时间分区),点击 Save 按钮,model 创建完毕
4 构建 cube
1)点击 new, 并点击 new cube
2)填写 cube 信息,选择 cube 所依赖的 model,并点击 next
3)选择所需的维度,如下图所示
4)选择所需度量值,如下图所示
4)cube 自动合并设置,cube 需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase 中的一张表内,为提高查询效率,需将每日的 cube 进行合并,此处可设置合并周期。
5)Kylin 高级配置(优化相关,暂时跳过)
6)Kylin 相关属性配置覆盖
7)Cube 信息总览,点击 Save,Cube 创建完成
8)构建 Cube(计算),点击对应 Cube 的 action 按钮,选择 build
9)选择要构建的时间区间,点击 Submit
10)点击 Monitor 查看构建进度
2 使用进阶
1)每日全量维度表及拉链维度表重复 Key 问题如何处理
按照上述流程,会发现,在 cube 构建流程中出现以下错误
错误原因分析:
上述错误原因是 model 中的维度表 dwd_dim_user_info_his 为拉链表、dwd_dim_sku_info为每日全量表,故使用整张表作为维度表,必然会出现订单表中同一个 user_id 或者 sku_id
对应多条数据的问题,针对上述问题,有以下两种解决方案。
方案一:在 hive 中创建维度表的临时表,该临时表中只存放维度表最新的一份完整的数据,在 kylin 中创建模型时选择该临时表作为维度表。
方案二:与方案一思路相同,但不使用物理临时表,而选用视图(view)实现相同的功能。
此处采用方案二:
(1)创建维度表视图
--拉链维度表视图 create view dwd_dim_user_info_his_view as select * from dwd_dim_user_info_his where end_date='9999-99-99'; --全量维度表视图 create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt=date_add(current_date,-1); --当前情形我们先创建一个 2020-03-10 的视图
create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt='2020-03-10';
(2)在 DataSource 中导入新创建的视图,之前的维度表,可选择性删除。
(3)重新创建 model、cube。
(4)查询结果
2)如何实现每日自动构建 cube
Kylin 提供了 Restful API,因次我们可以将构建 cube 的命令写到脚本中,将脚本交给azkaban 或者 oozie 这样的调度工具,以实现定时调度的功能。
脚本如下: