大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化
点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(正在更新…)
章节内容
上节我们完成了如下的内容:
- Apache Kylin 按日期构建 Cube
- 详细记录

Cube 介绍
Apache Kylin 是一个开源的分布式分析引擎,专注于提供大数据的实时OLAP(在线分析处理)能力。Cube(立方体)是 Apache Kylin 的核心概念之一,通过预计算大规模数据的多维数据集合,加速复杂的 SQL 查询。下面详细介绍 Cube 的关键点:
Cube 的基本概念
Kylin 中的 Cube 是通过对一组事实表(通常是业务数据表)进行多维建模后,生成的预计算数据结构。Cube 涉及对多维数据的度量和维度的组合,从而可以在查询时通过检索预先计算的结果来显著减少计算开销。
- 维度(Dimension):数据中用于分组、筛选和切片的数据字段,例如时间、地区、产品等。
- 度量(Measure):通常是需要进行聚合计算的数据字段,例如销售额、订单数等。
- Cuboid:每个 Cube 由多个 Cuboid 构成,Cuboid 是一个特定维度组合的子集。Cube 中每种维度组合都会生成一个 Cuboid,每个 Cuboid 存储了该组合下的预聚合结果。
Cube 的创建过程
- 数据建模:首先在 Kylin 中创建一个数据模型(Data Model),这个模型定义了事实表和维度表之间的关系,类似于星型或雪花型模式。模型中也定义了需要聚合的度量字段。
- Cube 设计:基于数据模型设计 Cube,指定 Cube 的维度和度量。Kylin 会根据定义自动计算所有可能的维度组合(Cuboid)。
- 构建 Cube:构建过程会读取底层数据源(如 Hive、HBase、Kafka),然后根据指定的维度和度量生成每个 Cuboid 的预计算数据。这些预计算结果存储在 HBase 或其他存储引擎中。
Cube 的查询与优化
- 查询加速:当有 SQL 查询请求到达时,Kylin 会根据查询所涉及的维度组合,选择合适的 Cuboid 返回结果,避免了实时计算,极大地提高了查询性能。
- Cube 优化:为了控制 Cube 大小和加速构建,Kylin 支持裁剪 Cube,通过配置仅生成部分 Cuboid,这称为“Aggregation Group”,可以减少冗余计算。
实时 OLAP
Kylin 4.0 引入了对实时 OLAP 的支持,使用 Kafka 作为实时数据流输入,构建实时 Cube。通过使用 Lambda 架构,Kylin 可以支持实时和批处理数据的整合分析。
Cube 的典型应用场景
- 大规模数据分析:Cube 适用于分析超大规模的数据集,通过预计算方式加速查询。
- 实时分析:实时 Cube 允许用户在近乎实时的基础上分析流数据。
- 商业智能(BI)工具的集成:Kylin 提供与 Tableau、Power BI 等常见 BI 工具的集成,用户可以使用熟悉的 SQL 查询语言进行复杂的多维分析。
创建Cube(按日期、区域、产品、渠道)
Cube设计
维度:日期、渠道、区域、产品
指标:销售总金额、订单总比数
结构图如下:

对应的SQL如下所示:
selectt1.date1,t2.regionid,t2.regionname,t3.productid,t3.productname,sum(t1.price) as total_money,sum(t1.amount) as total_amount
fromdw_sales t1
inner join dim_region t2
on t1.regionid = t2.regionid
inner join dim_product t3
on t1.productid = t3.productid
group byt1.date1,t2.regionid,t2.regionname,t3.productid,t3.productname
order byt1.date1,t2.regionname,t3.productname
核心步骤
定义数据源 => 定义Model => 定义Cube => 构建Cube
操作步骤
创建Model
创建的时候,Lookup Table,配置成如下的内容:

配置维度为如下的结果:

配置度量为如下的结果:

创建Cube

选择维度,如下图所示:

配置完的结果如下图:

指定指标,如下图所示:

我们继续Build操作,对Cube进行Build:

漫长等待,构建完毕的结果:

执行SQL
selectt1.date1,t2.regionid,t2.regionname,t3.productid,t3.productname,sum(t1.price) as total_money,sum(t1.amount) as total_amount
fromdw_sales t1
inner join dim_region t2
on t1.regionid = t2.regionid
inner join dim_product t3
on t1.productid = t3.productid
group byt1.date1,t2.regionid,t2.regionname,t3.productid,t3.productname
order byt1.date1,t2.regionname,t3.productname
执行的结果:

Cube 查询流程
当查询请求到达 Kylin 时,Kylin 通过以下步骤来确定如何利用 Cube 加速查询:
查询解析
当用户通过 SQL 提交查询时,Kylin 会先将 SQL 查询进行解析。解析的内容包括:
选择的维度(如 GROUP BY 和 WHERE 中使用的字段)
聚合操作(如 SUM、COUNT 等)
过滤条件(WHERE 和 HAVING 子句)
Kylin 会将解析后的 SQL 查询映射到事先创建好的 Cube 上,并尝试根据查询所涉及的维度和度量,找到最匹配的 Cuboid。
Cuboid 匹配
Kylin 的核心是 Cube,它由多个 Cuboid 组成,每个 Cuboid 存储了一个特定维度组合的聚合结果。Cuboid 是基于事实表中的维度进行组合的子集,每个子集存储了预计算的度量值。
Kylin 通过如下步骤进行 Cuboid 匹配:
确定 SQL 查询需要的维度和度量。
查找与查询条件最匹配的 Cuboid。Kylin 会优先选择最小的 Cuboid,即只包含所需维度的子集,这样可以减少数据读取量,提高查询性能。
如果找到匹配的 Cuboid,Kylin 会直接从中提取预计算的数据。
查询执行
一旦找到匹配的 Cuboid,Kylin 会从 HBase 或者其他存储引擎中读取 Cuboid 中的数据,然后对数据进行最后的过滤、排序或聚合(如果查询中有其他未预先计算的内容)。因为大部分计算已经在 Cube 构建阶段完成,所以这一步的执行速度非常快,通常可以在秒级内完成大规模数据的查询。
Cube 优化策略
虽然 Cube 提供了强大的查询加速功能,但 Cube 的构建、存储和管理也存在一定的挑战。因此,Kylin 提供了一些优化策略,帮助用户最大化利用 Cube 的性能,最小化资源消耗。
维度裁剪(Aggregation Group)
Cube 的大小和复杂度与维度的数量密切相关,因为 Cube 中每个维度的组合都会生成一个 Cuboid,维度越多,Cuboid 数量呈指数级增长。为了避免不必要的 Cuboid 生成,Kylin 支持 Aggregation Group,它允许用户定义 Cube 中仅需要保留的维度组合,从而减少不常用维度组合的计算和存储。
举例:
如果某个 Cube 中有 时间、地区 和 产品 三个维度,用户可以根据业务需求定义只计算 时间-产品 和 地区-产品 的组合,而忽略不常用的 时间-地区 组合。
Cuboid 裁剪(Cuboid Pruning)
Cuboid 裁剪是进一步优化的手段,用于在 Cube 构建时减少不必要的 Cuboid。Kylin 会根据查询历史和配置规则,自动裁剪不经常使用的 Cuboid,减少 Cube 的构建时间和存储空间。这一过程称为 Cuboid Pruning。
Cuboid 裁剪的规则:
通过历史查询分析:Kylin 可以根据历史查询分析哪些维度组合更常被查询,从而决定哪些 Cuboid 需要保留。
通过手动配置:用户也可以根据业务场景,手动配置哪些维度组合重要,哪些可以被裁剪。
增量构建
在大规模数据环境中,全量构建 Cube 的代价非常高。为了应对这一问题,Kylin 提供了 增量构建 功能。增量构建允许用户只对新增或更新的数据进行 Cube 构建,而无需重建整个 Cube。
增量构建的好处:
提高构建效率:只处理增量数据,避免对整个数据集的重复计算。
实时更新:支持更快的响应时间,能够在较短的时间内更新最新数据的 Cube。
Cube 的层次构建(Layered Cuboid)
为了减少 Cuboid 的存储空间,Kylin 采用了 层次构建(Layered Cuboid) 策略。这个策略通过优先计算最小的 Cuboid(即包含较少维度的组合),再基于这些 Cuboid 逐层构建更大的 Cuboid。这样不仅可以减少存储占用,还能提高构建速度。
数据分区
Kylin 支持将 Cube 按照时间维度进行分区(如按天、按月等),从而使得查询和数据管理更加高效。分区可以帮助 Kylin 减少每次查询时的数据量,提高查询性能。
静态和动态优化
Kylin 提供了 静态优化 和 动态优化 两种方式:
静态优化:在 Cube 构建时进行优化,例如通过裁剪 Cuboid、定义 Aggregation Group 等手段减少 Cube 的体积。
动态优化:在查询时动态选择最合适的 Cuboid,尽可能避免过大的数据读取,提升查询效率。
Cube 的监控与调优
为了进一步优化 Cube,Kylin 提供了多种工具和功能用于监控和调优:
- 查询日志分析:通过分析查询日志,用户可以识别出哪些查询执行时间过长或未命中 Cube,从而针对性地调整 Cube 设计。
- 构建日志监控:监控 Cube 构建过程中的性能瓶颈,及时发现并优化构建效率。
相关文章:
大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
uni-app使用v-show编译成微信小程序的问题
问题 在uni-app使用v-show语法编译成微信小程序会有一个问题 当我们设置成v-show"false" 在Hbuilder X里面确实没有显示 然后运行到 微信开发程序里面 发现显示了出来,说明设置的 v-show"false"没有起作用 解决办法 首先去uniapp官网查看v…...
充电宝租赁管理系统网站毕业设计SpringBootSSM框架开发
目录 1. 概述 2. 技术选择与介绍 3. 系统设计 4. 功能实现 5. 需求分析 1. 概述 充电宝租赁管理系统网站是一个既实用又具有挑战性的项目。 随着移动设备的普及和人们日常生活对电力的持续依赖,充电宝租赁服务已成为现代都市生活中的一项重要便利设施。它不仅为…...
喜讯!迈威通信TSN产品通过“时间敏感网络(TSN)产业链名录计划”评测,各项指标名列前茅
TSN技术,作为推动企业网络化与智能化转型的关键力量,已成为工业网络迈向下一代演进的共识方向,正加速重构工业网络的技术架构与产业生态。为响应这一趋势,工业互联网产业联盟携手中国信息通信研究院及50余家产学研用单位ÿ…...
国产工具链GCKontrol-GCAir助力控制律开发快速验证
前言 随着航空领域技术的不断发展,飞机的飞行品质评估和优化成为了航空领域的一个重要任务,为了确保飞行器在各种复杂条件下的稳定性,控制律设计过程中的模型和数据验证需要大量仿真和测试。 本文将探讨基于世冠科技的国产软件工具链GCKont…...
嵌入式开发:STM32 硬件 CRC 使用
测试平台:STM32G474系列 STM32硬件的CRC不占用MCU的资源,计算速度快。由于硬件CRC需要配置一些选项,配置不对就会导致计算结果错误,导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…...
基于STM32的智能家居语音控制系统:集成LD3320、ESP8266设计流程
一、项目概述 项目目标和用途 近年来,智能家居产品逐渐成为家庭生活中不可或缺的一部分。为了提升家庭生活的便捷性和舒适度,本项目旨在设计一款基于STM32F407VGT6(Cortex-M4内核)微控制器的多功能智能家居语音控制系统。该系统…...
【docker】要将容器中的 livox_to_pointcloud2 文件夹复制到宿主机上
复制文件夹 使用 docker cp 命令从容器复制文件夹到宿主机: docker cp <container_id_or_name>:/ws_livox/src/livox_to_pointcloud2 /path/to/host/folder sudo docker cp dandong_orin_docker:/ws_livox/src/livox_to_pointcloud2 /home...
网络编程(17)——asio多线程模型IOThreadPool
十七、day17 之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext, 各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题…...
【rust/egui/android】在android中使用egui库
文章目录 说在前面AndroidStudio安装编译安装运行问题 说在前面 操作系统:windows11java版本:23android sdk版本:35android ndk版本:22rust版本: AndroidStudio安装 安装AndroidStudio是为了安装sdk、ndk,…...
Git---Git打标签
打标签 像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 在本节中,你将会学习如…...
深入理解Transformer的笔记记录(精简版本)---- Transformer
自注意力机制开启大规模预训练时代 1 从机器翻译模型举例 1.1把编码器和解码器联合起来看待的话,则整个流程就是(如下图从左至右所示): 1.首先,从编码器输入的句子会先经过一个自注意力层(即self-attention),它会帮助编码器在对每个单词编码时关注输入句子中的的其他单…...
Ubuntu 更换内核版本
更换内核脚本 这里以更换 5.15.0-88-generic 版本内核为例 cat kernel.sh#!/bin/bashapt install linux-image-5.15.0-88-generic # Ubuntu内核切换脚本# 检查是否具有root权限 if [[ $(id -u) -ne 0 ]]; thenecho "请以root身份运行此脚本。"exit 1 fi# 检查系统是…...
博士找高校教职避坑指南:史上最全的避坑秘籍
在学术的海洋中遨游多年,博士们终于要踏上寻找高校教职的征程。这不仅是职业生涯的新起点,更是一场充满未知与挑战的冒险。今天,就让我们来聊聊那些在寻找高校教职时需要避开的坑,希望能为你的求职之路保驾护航。 1. 薪资结构&am…...
Study-Oracle-11-ORALCE19C-ADG集群搭建
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、ORACLE--ADG VS ORACLE--DG的区别 1、DG是Oracle数据库的一种灾难恢复和数据保护解决方案,它通过在主数据库和一个或多个备用数据库之间实时复制数据,提供了数据的冗余备份和故障切换功能。…...
【C++】map详解(键值对的概念,与multimap的不同)
目录 00.引言 set 和 map 的区别 键值对的概念 01.map容器 主要特性 常用操作 主要用途 02.multimap容器 特性 常用操作 用途 00.引言 set 和 map 的区别 set 和 map 都是C标准模板库(STL)中的容器,它们的区别如下:…...
私域电商新纪元:消费增值模式引领百万业绩飞跃
各位朋友,我是吴军,专注于带领大家深入探索私域电商领域的非凡魅力与潜在机会。 今天,我想与大家分享一个鼓舞人心的真实故事。在短短的一个月内,我们的合作伙伴实现了业绩的飞跃,突破百万大关,并且用户活跃…...
AAA Mysql与redis的主从复制原理
一 :Mysql主从复制 重要的两个日志文件:bin log 和 relay log bin log:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。 relay log:用来保存从节点I/O线程接受的bin log日志…...
结合大语言模型的机械臂抓取操作学习
一、 大语言模型的机械臂抓取操作关键步骤 介绍如何基于大语言模型实现机械臂在PyBullet环境中的抓取操作,涵盖机器人运动学、坐标系转换、抓取候选位姿生成、开放词汇检测以及大语言模型代码生成等模块。 1. 机器人正逆运动学基本概念 正运动学: 已知机器人的关节…...
数据结构-二叉树_堆
一. 树的概念 树在我们的日常生活中随处可见,人们将生活中的树转换成存放数据的树形结构,就成了数据结构中的“树”。 如上图所示,自然界中的树有树根,有树枝,有树叶,当我们将其转换成树形结构时…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
