写点什么

Apache Kylin 权威指南(二):工作原理

  • 2020-04-14
  • 本文字数:1414 字

    阅读完需:约 5 分钟

Apache Kylin权威指南(二):工作原理

编者按:本文节选自华章科技大数据技术丛书 《Apache Kylin 权威指南(第 2 版)》一书中的部分章节。

Apache Kylin 的工作原理

Apache Kylin 的工作原理本质上是 MOLAP(Multidimensional Online Analytical Processing) Cube,也就是多维立方体分析。这是数据分析中相当经典的理论,在关系型数据库年代就有广泛应用,下面对其做简要介绍。

维度和度量简介

在说明 MOLAP Cube 之前,需要先介绍一下维度(dimension)和度量(measure)这两个概念。


简单来讲,维度就是观察数据的角度。比如电商的销售数据,可以从时间的维度来观察(如图 1 的左图所示),也可以进一步细化从时间和地区的维度来观察(如图 1 的右图所示)。维度一般是一组离散的值,比如时间维度上的每一个独立的日期,或者商品维度上的每一件独立的商品。因此,统计时可以把维度值相同的记录聚合起来,应用聚合函数做累加、平均、去重复计数等聚合计算。



图 1 维度和度量


度量就是被聚合的统计值,也是聚合运算的结果,它一般是连续值,如图 1 中的销售额,抑或是销售商品的总件数。通过比较和测算度量,分析师可以对数据进行评估,比如今年的销售额相比去年有多大的增长、增长的速度是否达到预期、不同商品类别的增长比例是否合理等。

Cube 和 Cuboid

了解了维度和度量,就可以对数据表或者数据模型上的所有字段进行分类了,它们要么是维度,要么是度量(可以被聚合)。于是就有了根据维度、度量做预计算的 Cube 理论。


给定一个数据模型,我们可以对其上所有维度进行组合。对于 N 个维度来说,所有组合的可能性有 2N 种。对每一种维度的组合,将度量做聚合运算,运算的结果保存为一个物化视图,称为 Cuboid。将所有维度组合的 Cuboid 作为一个整体,被称为 Cube。所以简单来说,一个 Cube 就是许多按维度聚合的物化视图的集合。


举一个具体的例子。假定有一个电商的销售数据集,其中维度有时间(Time)、商品(Item)、地点(Location)和供应商(Supplier),度量有销售额(GMV)。那么,所有维度的组合就有 24=16 种(如图 2 所示),比如一维度(1D)的组合有[Time][Item][Location][Supplier]四种;二维度(2D)的组合有[Time, Item][Time, Location][Time、Supplier][Item, Location][Item, Supplier][Location, Supplier]六种;三维度(3D)的组合也有四种;最后,零维度(0D)和四维度(4D)的组合各有一种,共计 16 种组合。


计算 Cuboid,就是按维度来聚合销售额(GMV)。如果用 SQL 来表达计算 Cuboid [Time, Location],那就是:


select Time, Location, Sum(GMV) as GMV from Sales group by Time, Location
复制代码



图 2 四维 Cube


将计算的结果保存为物化视图,所有 Cuboid 物化视图的总称就是 Cube 了。

工作原理

Apache Kylin 的工作原理就是对数据模型做 Cube 预计算,并利用计算的结果加速查询。过程如下:


(1)指定数据模型,定义维度和度量。


(2)预计算 Cube,计算所有 Cuboid 并将其保存为物化视图。


(3)执行查询时,读取 Cuboid,进行加工运算产生查询结果。


由于 Kylin 的查询过程不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算,并利用预计算的结果来执行查询,因此其速度相比非预计算的查询技术一般要快一个到两个数量级。并且在超大数据集上其优势更明显。当数据集达到千亿乃至万亿级别时,Kylin 的速度甚至可以超越其他非预计算技术 1000 倍以上。


图书简介https://item.jd.com/12566389.html



相关阅读


Apache Kylin权威指南(一):背景历史和使命


2020-04-14 10:001446

评论

发布
暂无评论
发现更多内容

如何实现YashanDB数据库中的数据加密

数据库砖家

如何维护YashanDB的数据库性能监控

数据库砖家

评估YashanDB数据库的性能监测工具

数据库砖家

如何实现YashanDB中的数据冗余处理

数据库砖家

如何应对YashanDB数据库中的数据一致性挑战

数据库砖家

​​智能体开发革命:用LangChain打造下一代AI应用工作流

聚客AI学院

人工智能 向量数据库 langchain AI 智能体 rag实战

如何管理YashanDB中的数据模型?

数据库砖家

如何快速掌握YashanDB数据库高级查询技巧?

数据库砖家

如何提升YashanDB数据库的安全性?

数据库砖家

基于YOLOv8的100种中药分类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolo

如何评估YashanDB的查询性能

数据库砖家

如何评估YashanDB的性能与稳定性?

数据库砖家

如何实现YashanDB数据库的负载均衡

数据库砖家

如何用YashanDB进行数据审计与合规性管理

数据库砖家

如何快速入门YashanDB数据库开发

数据库砖家

Web前端入门:JavaScript 鼠标事件(mouse) enter/leave 和 over/out 区别

电子尖叫食人鱼

JavaScript Web

如何评估YashanDB的企业适用性?实用指南

数据库砖家

Prompt-Driven编码与领域驱动建模的融合研究

申公豹

AI

如何结合YashanDB数据库实现企业级智能分析平台

数据库砖家

如何评估YashanDB在企业数字化转型中的价值

数据库砖家

提升YashanDB数据库的数据处理效率

数据库砖家

这几个 Vibe Coding 经验,真的建议学!

Immerse

如何结合YashanDB实现智能化数据管理与应用

数据库砖家

如何监控YashanDB数据库性能并实现自动预警?

数据库砖家

如何编写YashanDB的自定义函数以扩展功能

数据库砖家

如何策划YashanDB的培训与学习项目

数据库砖家

如何快速搭建基于YashanDB数据库的应用?

数据库砖家

如何确保YashanDB数据库的性能稳定?

数据库砖家

如何设计基于YashanDB数据库的高效查询

数据库砖家

如何实现YashanDB数据库的容器化部署与管理

数据库砖家

热烈祝贺 Flink 2.0 存算分离入选 VLDB 2025

Apache Flink

大数据 flink 流计算 VLDB

Apache Kylin权威指南(二):工作原理_架构_Apache Kylin核心团队_InfoQ精选文章