- Apache Kylin ( Extreme OLAP Engine for Big Data )是一个开源的分布式分析引擎,为 Hadoop等大型分布式数据平台之上的超大规模数据集通过标准 SQL 查询及多维分析( OLAP )功能,提供亚秒级的交互式分析能力。
-
标准SQL 接口
- 使用的查询模型是数据源中的关系模型表,一般而言,也就是指 Hive 表,只需要像原来查询Hive表一样编写 SQL
-
支持超大规模集
- 使用了 Cube 预计算技术,在理论上, Kylin 可以支撑的数据集大小没有上限,仅受限于存储系统和分布式计算系统的承载能力,并且查询速度不会随数据集的增大而减慢
-
亚秒级响应
- 很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需要的计算量,提高了响应速度
-
BI 及可视化工具集成
- 提供了丰富的 API ,以与现有的 BI 工具集成
- ODBC 接口:与 Tableau 、 Excel 、 Power BI 等工具集成。
- JDBC 接口:与 Saiku 、 BIRT 等 Java 工具集成。
- Rest API :与 Javascript 、 Web 网页集成。
-
核心思想是 Cube 预计算,理论基础是空间换时间,利用 cube 计算的结构加速查询
-
过程
-
- 指定数据模型,定义维度和度量。
-
- 预计算 Cube ,计算所有 Cuboid 并保存为物化视图。
-
- 执行查询时,读取 Cuboid ,运算,产生查询结果。
-
-
在线查询
- 对比之前的 hive ,想要一些计算结果我们可能会写一些脚本实现将结果集算好,但是对应业务复杂,维度变化更多的情况,你用shell 脚本就不好控制了。 Kylin 就是按照你想要的维度给你全部构建好(即说白了你想要怎样的维度组合数据我就帮你算好)。
-
离线构建
- 从上方查询系统发送 SQL 进行查询分析,SQL 最终都会来到 Rest 服务层,再转交给查询引擎进行处理。这里需要注意的是, SQL 语句是基于数据源的关系模型书写的,而不是 Cube 。
- hive 查询时间随着数据量的增长而线性增长, kylin 使用预计算技术打破了这一点,kylin 在数据集规模上的局限性主要取决于维度的个数和基数,而不是数据集的大小,所以Kylin 能更好地支持海量数据集的查询。而也正是预计算技术, kylin 的查询速度非常快,亚秒级响应。
- Cube 划分为多个 Segment ,每个 Segment 用起始时间和结束时间来标志
- 代表一段时间内源数据的预计算结果
- 大部分情况下一个 Segment 的起始时间等于它之前那个 Segment 的结束时间,结束时间等于它后面那个 Segment 的起始时间
- 同一个 Cube 下不同的 Segment 除了背后的源数据不同之外,其他如结构定义、构建过程、优化方法、存储方式等都完全相同
-
全量构建
- 每次更新时需要更新整个数据集
- 查询时不需要合并不同的Segment结果
- 不需要后续的segment
- 适合小数据量或全表更新
-
增量构建
- 每次对需要更新的范围进行更新,离线计算量较小
- 查询时需要合并不同的Segment结果
- 累计一定量segment之后,需要进行合并
- 适合大数据量的cube
- Cube 的定义必须包含一个时间维度,用来分割不同的Segment,这个维度称为分割时间列
- 这个时间列可以是 Hive 中的 Date 类型、也可以是 Timestamp 类型或 String 类型
- Kylin 都要求用户显式地指定分割时间列的数据格式
-
自动合并
-
将多个 Segment 合并为一个 Segment
-
Auto Merge Thresholds
- 允许用户设置几个层级的时间阈值,层级越靠后,时间阈值就越大
-
Retention Threshold
-
-
保留Segment
- 及时清理不再使用的Segment
-
聚合组
-
强制维度
- 一个维度定义为强制维度,那么这个分组产生的所有 Cuboid 中每一个 Cuboid 都会包含该维度
-
层次维度
- 具有上下级层次关系的维度,例如时间维度和地区维度
-
联合维度
- 每个联合中包含两个或更多个维度,如果某些列形成一个联合
- 这些联合维度要么一 起出现,要么都不出现
-
-
衍生维度
- 用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)