即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。
https://blog.csdn.net/weixin_45417821/article/details
https://blog.csdn.net/weixin_45417821/article/details
以gmall数据仓库中的dwd_order_detail作为事实表,dim_user_info、dim_sku_info、dim_base_province作为维度表,构建星型模型,并演示如何使用Kylin进行OLAP分析。
创建工程/选择数据源教学:https://blog.csdn.net/weixin_45417821/article/details
1)添加项目名称和描述,点击submit 按钮提交
1)选择以下表格,并点击Sync按钮
dwd_order_detail
dim_sku_info
dim_user_info
dim_base_province
注意事项:
Kylin不能处理Hive表中的复杂数据类型(Array,Map,Struct),即便复杂类型的字段并未参与到计算之中。故在加载Hive数据源时,不能直接加载带有复杂数据类型字段的表。而在dim_sku_info表中存在两个复杂数据类型的字段(平台属性和销售属性),故dim_sku_info不能直接加载,需对其进行以下处理。
(1)在hive客户端创建一个视图,如下。该视图已经将dim_sku_info表中的复杂数据类型的字段去掉,在后续的计算中,不再使用dim_sku_info,而使用dim_sku_info_view。
hive (gmall)>
create view dim_sku_info_view
as
select
id,
price,
sku_name,
sku_desc,
weight,
is_sale,
spu_id,
spu_name,
category3_id,
category3_name,
category2_id,
category2_name,
category1_id,
category1_name,
tm_id,
tm_name,
create_time
from dim_sku_info;
(2)在kylin中重新导入dim_sku_info_view视图
model 教学 :https://blog.csdn.net/weixin_45417821/article/details
1)填写Model信息,点击Next
2)指定事实表
4)选择维度表,并指定事实表和维度表的关联条件,点击Ok
6)指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
Cube 教学 :https://blog.csdn.net/weixin_45417821/article/details
1)填写cube信息,选择cube所依赖的model,并点击next
2)选择所需的维度,如下图所示
3)选择所需度量值,如下图所示
4)cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期。
5)Kylin高级配置(优化相关,暂时跳过)
6)Kylin相关属性配置覆盖
7)Cube信息总览,点击Save,Cube创建完成
8)构建Cube(计算),点击对应Cube的action按钮,选择build
9)选择要构建的时间区间,点击Submit
10)点击Monitor查看构建进度
1)每日全量维度表及拉链维度表重复Key问题如何处理
按照上述流程,会发现,在cube构建流程中出现以下错误
错误原因分析:
上述错误原因是model中的维度表dim_user_info为拉链表、dim_sku_info(dim_sku_info_view)为每日全量表,故使用整张表作为维度表,必然会出现订单明细表中同一个user_id或者sku_id对应多条数据的问题,针对上述问题,有以下解决方案。
在hive客户端为拉链表以及每日全量维度表创建视图,在创建视图时对数据加以过滤,保证从视图中查出的数据是一份全量最新的数据即可。
(1)创建维度表视图
--拉链维度表视图
create view dim_user_info_view as select * from dim_user_info where dt='9999-99-99';
--全量维度表视图(注意排除复杂数据类型字段)
create view dim_sku_info_view
as
select
id,
price,
sku_name,
sku_desc,
weight,
is_sale,
spu_id,
spu_name,
category3_id,
category3_name,
category2_id,
category2_name,
category1_id,
category1_name,
tm_id,
tm_name,
create_time
from dim_sku_info
where dt=date_add(current_date,-1);
--当前情形我们先创建一个2020-06-14的视图,由于之前已经创建了dim_sku_info_view,故无需重新创建,修改之前的视图即可。
alter view dim_sku_info_view
as
select
id,
price,
sku_name,
sku_desc,
weight,
is_sale,
spu_id,
spu_name,
category3_id,
category3_name,
category2_id,
category2_name,
category1_id,
category1_name,
tm_id,
tm_name,
create_time
from dim_sku_info
where dt='2020-06-14';
将 任务,cube ,modul 以及 dim_user_info 表删除,添加 dim_user_info_view
之后再次操作和Kylin使用的相同操作