写点什么

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:001602

评论

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

前端如何处理「并发」问题?

不叫猫先生

并发 axios 6 月 优质更文活动

海外交友源码平台搭建:基础功能的实现(一)

山东布谷科技

软件开发、 源码搭建 海外市场 语音交友源码

Java 中优雅的 RESTful API 设计:实现高效且易维护的接口

xfgg

Java RESTful API 6 月 优质更文活动

vivo 游戏黑产反作弊实践

vivo互联网技术

游戏黑产 游戏礼券

Backdata.net 搜索引擎

Yongqiang

搜索引擎 导航网站

数字化扶乩的最佳语言是英语?

FN0

AIGC

300行代码模拟cdn访问过程

蓝胖子的编程梦

CDN DNS CDN加速 CDN技术 #DNS

如何评估大型语言模型(LLM)?

Baihai IDP

人工智能 深度学习 大模型 白海科技 大模型评估

使用华为云AstroZero,不用一行代码,制作端午节加班申请模板

云计算 零代码 华为云

蚂蚁集团自动化混沌工程 ChaosMeta 正式开源

ChaosMeta

高可用 混沌工程 故障演练 kubernetes 运维 混沌测试

一种实现Spring动态数据源切换的方法 | 京东云技术团队

京东科技开发者

spring aop 企业号 6 月 PK 榜 数据源切换

基于STM32的铁路自动围栏系统设计

DS小龙哥

6 月 优质更文活动

在 Go 中使用 sqlx 替代 database/sql 操作数据库

江湖十年

数据库 后端 sql Go 语言

AI关于AI民主化的高见

FN0

AIGC

漫谈 SAP 产品里页面上的 Checkbox 设计与实现

汪子熙

SAP 前端设计 思爱普 6 月 优质更文活动

CSS小技巧之悬停3D发光效果

南城FE

CSS 前端 动画 3D 交互

Java 内存与缓存管理:应对大数据场景的优雅高效策略

xfgg

Java 6 月 优质更文活动

AI+电力、大模型主题人工智能师资培训班重磅招募中

飞桨PaddlePaddle

人工智能 百度 paddle

培育开源人才,助力开源生态发展|2023开放原子全球开源峰会校源行分论坛圆满落幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 校源行

在人工智能冲击下,IT部门的生存价值在哪里?

FN0

AIGC

Airtest图像识别测试工具原理解读&最佳实践 | 京东云技术团队

京东科技开发者

图像识别 移动开发 UI自动化测试 企业号 6 月 PK 榜 Airtest

高性能网络 SIG 月度动态:联合 IBM 就 SMC v2.1 协议升级达成一致,ANCK 率先完成支持

OpenAnolis小助手

开源 ibm 高性能网络 anck 龙蜥sig

细说敏捷测试-敏捷实战中的探索 | 京东云技术团队

京东科技开发者

敏捷开发 测试 敏捷测试 企业号 6 月 PK 榜

华为云CodeArts Build快速上手编译构建-进阶玩家体验

云计算 编译 开发 华为云

Vue3中常用的Composition(组合)API-watch(监视)函数

不觉心动

6 月 优质更文活动

一文读懂ChatGPT的工作原理:大语言模型是个啥?它到底咋工作的?

禅道项目管理

#人工智能 ChatGPT AI 2022

基础设施SIG月度动态:ABS新增ISO、VHD镜像构建,自动热补丁制作流程正式上线

OpenAnolis小助手

镜像 基础设施 龙蜥社区 sig abs

随机2D形状周围层流预测!基于飞桨实现图形神经网络

飞桨PaddlePaddle

人工智能 百度 飞桨

手牵手带你实现mini-vue | 京东云技术团队

京东科技开发者

Vue 数据绑定 vue2 企业号 6 月 PK 榜 双向数据绑定

TBB 开源库及并发 Hashmap 的使用

KaiwuDB

KaiwuDB TBB开源库 Hashmap使用

软件测试/测试开发丨Pytest结合数据驱动-CSV

测试人

程序员 软件测试 自动化测试 csv pytest

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