首先要明白什么是即席查询。即席查询是用户根据自己的需求,灵活的选择查询条件,系统根据用户的选择生成相应的统计报表。普通查应用查询是定制开发的,即席查询是用户自定义查询条件
1. OLAP分类
1.1 MOLAP
-
M即表示多维(Multidimensional)。大多数MOLAP产品均对原始数据进行预计算,得到用户可能需要的所有结果,将其存储到优化过的多维数组存储中, 能够稳定地快速响应,具有高性能。
-
但高性能并不是没有代价的。首先,MOLAP需要进行预计算,这会花去很多时间。如果每次写入增量数据后均要进行全量预计算,显然是低效率的,因此支持仅对增量数据进行迭代计算非常重要。其次,如果业务发生需求变更,需要进行预定模型之外新的查询操作,现有的MOLAP实例就无能为力了,只能重新进行建模和预计算。
-
因此,MOLAP适合业务需求比较固定,数据量较大的场景。
1.2 ROLAP
-
R即表示关系型(Relational)。与MOLAP相反,ROLAP无需预计算,直接在构成多维数据模型的事实表和维度表上进行计算。更具可扩展性,增量数据导入后,无需进行重新计算,用户有新的查询需求时只需写好正确的SQL语句既能完成获取所需的结果。
-
但ROLAP的不足也很明显,尤其是在数据体量巨大的场景下,用户提交SQL后,获取查询结果所需的时间无法准确预知,可能秒回,也可能需要花费数十分钟甚至数小时。本质上,ROLAP是把MOLAP预计算所需的时间分摊到了用户的每次查询上,肯定会影响用户的查询体验。
-
相比MOLAP,ROLAP的使用门槛更低,在完成星型或雪花型模型的构建,创建对应schema的事实表和维度表并导入数据后,用户只需会写出符合需求的SQL,就可以得到想要的结果。相比创建“数据立方体”,显然更加方便。
1.3 HOLA
- H表示混合型(Hybrid),MOLAP和ROLAP各有优缺点,而且是互斥的。如果能够将两者的优点进行互补,那么是个更好的选择。对于查询频繁而稳定但又耗时的那些SQL,通过预计算来提速;对于较快的查询、发生次数较少或新的查询需求,像ROLAP一样直接通过SQL操作事实表和维度表。。
2. 概述
2.1 定义
Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口 及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc 开发并贡献至开源社区。 它能在亚秒内查询巨大的 Hive 表。用空间换时间,预计算,是一个MOLAP系统
Apache Kylin™ 令使用者仅需三步,即可实现超大数据集上的亚秒级查询。
- 定义数据集上的一个星形或雪花形模型
- 在定义的数据表上构建cube
- 使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时间即可获得查询结果
2.2 Kylin架构
- REST Server Rest服务层。入口点,可以提供查询、获取结果、触发 cube 构建任务、获取元数据以及获取用户权限等等,另外可以通过 Restful 接口实现 SQL 查询。
- Query Engine 查询引擎层。当 cube 准备就绪后,查询引擎就能够获取并解析用户查询。把SQL转化为认识的代码
- Routing 路由层。Hive 与 Kylin 的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大 多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。 最后这个路由功能在发行版中默认关闭。
- Metadata 元数据。是一款元数据驱动型应用程序,元数据管理工具保存 Kylin 中的所有元数据,其中包括最为重要的 cube 元数据。 Kylin 的元数据存储在 hbase 中。
- Cube Build Engine Cube构建引擎。处理所有离线任务,其中包括 shell 脚本、Java API 以及 Map Reduce 任务等等。
2.3 工作原理和过程
Apache Kylin的工作原理本质上是MOLAP(多维立方体分析),即对数据模型做Cube预计算,并利用计算的结果加速查询
-
指定数据模型,定义维度和度量
-
预计算Cube,计算所有Cuboid并保存为物化视图
Kylin 的数据模型本质上是将二维表(Hive 表)转换为 Cube,然后将 Cube 存储到 HBase 表中,也就是两次转换。
- 第一次转换,其实就是传统数据库的 Cube 化,Cube 由 CuboId 组成,下图每个节点都被称为一个 CuboId,CuboId 表示固定列的数据数据集合