Kylin 即席查询
Kylin 即席查询
Kylin简介
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop / Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,能在亚秒内查询巨大的 Hive 表
Kylin架构
REST Server
REST Server是一套面向应用程序开发的入口点,对 Kylin 平台的应用开发工作。 提供查询、获取结果、触发 cube 构建任务、获取元数据以及获取用户权限等等。还可以通过 Restful 接口实现 SQL 查询
查询引擎(Query Engine)
cube 准备后,查询引擎就能够获取并解析用户查询。会与系统中的其它组件进行交互,从而向用户返回对应的结果
路由器(Routing)
将 Kylin 不能执行的查询引导去 Hive 中继续执行 , 查询的速度堪忧 , 路由功能在发行版中默认关闭
元数据管理工具(Metadata)
Kylin 是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在 Kylin 当中的所有元数据进行管理,如 : cube 元数据。其它组件的正常运作都以元数据管理工具为基础
Kylin 的元数据存储在 Hbase 中
任务引擎(Cube Build Engine)
引擎设计目的 : 处理所有离线任务,其中包括 shell 脚本、Java API 、Map Reduce任务 等。任务引擎对 Kylin 中的全部任务进行管理与协调,保证每一项任务都能切实执行并解决故障
Kylin特点
Kylin 特点 :
- 支持SQL接口
- 支持超大规模数据集
- 亚秒级响应
- 可伸缩性
- 高吞吐率
- BI工具集成
标准 SQL 接口:Kylin 是以标准的 SQL 作为对外服务的接口
支持超大数据集:生产环境中能百亿记录的秒级查询,移动应用场景中能千亿记录秒级查询
亚秒级响应:以 预计算,很多复杂的计算 ( 连接、聚合 ),在离线的预计算过程中就已经完成,大大降低查询时计算量,提高了响应速度
可伸缩性和高吞吐率:单节点 Kylin 能每秒70个查询,还可以搭建 Kylin 的集群
Kylin 与 BI 工具集成 :
- ODBC:与 Tableau、Excel、PowerBI 等工具集成
- JDBC:与 Saiku、BIRT 等 Java 工具集成
- RestAPI:与 JavaScript、Web 网页集成
- Zepplin : 访问Kylin服务
Kylin安装
Kylin依赖环境
Kylin搭建
Kylin启动
先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
启动 Kylin
kylin.sh start
查看Web页面
用户名为:ADMIN
密码为:KYLIN
关闭 Kylin
kylin.sh stop
Kylin使用
事实表 : dwd_order_detail
维度表 : dim_user_info
、dim_sku_info
、dim_base_province
以上表构建星型模型
创建工程
点击下图中的 “+”
填写项目名称和描述信息,并点击 Submit 按钮提交
获取数据源
点击 DataSource
点击下图按钮导入 Hive 表
选择以下表格,并点击 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 不能直接加载,需对其进行以下处理
在 hive 客户端创建一个视图,如下。该视图已经将 dim_sku_info 表中的复杂数据类型的字段去掉,在后续的计算中,不再使用 dim_sku_info ,而使用 dim_sku_info_view
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;
在 kylin 中重新导入 dim_sku_info_view 视图
创建 model
点击 Models,点击 +New
按钮,点击 ★New Model
按钮
填写 Model 信息,点击 Next
指定事实表
选择维度表,并指定事实表和维度表的关联条件,点击Ok
维度表添加完毕之后,点击 Next
指定维度字段,并点击Next
指定度量字段,并点击Next
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
构建 cube
点击 new , 并点击 new cube
填写 cube 信息,选择 cube 所依赖的 model,并点击 next
选择所需的维度,如下图所示
选择所需度量值,如下图所示
点击 Monitor 查看构建进度
使用进阶
每日全量维度表及拉链维度表重复Key问题
在 cube 构建流程中出现以下错误 :
创建维度表视图
如何实现每日自动构建 cube
Kylin 提供了 Restful API
,因次我们可以将构建 cube 的命令写到脚本中,将脚本交给 azkaban或 oozie 这样的调度工具,以实现定时调度的功能
#!/bin/bash
cube_name=order_cube
do_date=`date -d '-1 day' +%F`
#获取00:00时间戳
start_date_unix=`date -d "$do_date 08:00:00" +%s`
start_date=$(($start_date_unix*1000))
#获取24:00的时间戳
stop_date=$(($start_date+86400000))
curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$start_date', "endTime":'$stop_date', "buildType":"BUILD"}' http://hadoop102:7070/kylin/api/cubes/$cube_name/build
Kylin Cube构建原理
维度和度量
维度:即观察数据的角度。比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察。维度是一组离散的值,比如说性别中的男和女,或者时间维度上的每一个独立的日期。因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、最大和最小值等聚合计算
度量:即被聚合(观察)的统计值,也就是聚合运算的结果。比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少
Cube和Cuboid
一维度(1D)的组合有:[time]、[item]、[location]和[supplier]4种
二维度(2D)的组合有:[time, item]、[time, location]、[time, supplier]、[item, location]、[item, supplier]、[location, supplier]3种
每一种维度组合就是一个 Cuboid,16 个 Cuboid 整体就是一个 Cube
Cube构建算法
逐层构建算法(layer)
Cube存储原理
Kylin Cube构建优化
Kylin BI工具集成
相关文章
- 数据库查询语句中的排序函数_数据库按照升序排列的语句
- Linux查询文件目录:一种有效解决方案(linux查询文件目录)
- Oracle 引入随机查询功能,数据库搜索更加高效(oracle随机查询)
- Redis查询语句:让数据检索变得轻松简单(redis查询语句)
- SQLServer快速行查询实现数据库精准查询(sqlserver行查询)
- ?MSSQL表间查询:解决你的思考之路(mssql表和表怎么查询)
- MSSQL查询:使用日期进行数据分析(mssql++查询+日期)
- MySQL不支持集合查询,如何绕过这个限制(mysql不支持集合查询)
- 查询从 Oracle 数据库查询记录按时间倒序(oracle 以时间倒叙)
- 一个可查询所有表的“通用”查询分页类