大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据-161 Apache Kylin 构建Cube 按照日期、区域、产品、渠道 与 Cube 优化

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

Hadoop(已更完)

HDFS(已更完)

MapReduce(已更完)

Hive(已更完)

Flume(已更完)

Sqoop(已更完)

Zookeeper(已更完)

HBase(已更完)

Redis (已更完)

Kafka(已更完)

Spark(已更完)

Flink(已更完)

ClickHouse(已更完)

Kudu(已更完)

Druid(已更完)

Kylin(正在更新…)

章节内容

上节我们完成了如下的内容:


Apache Kylin 按日期构建 Cube

详细记录

597c6baba7a9da9752c99fa8c032adad_9d22579af37f4d4ca66efd8c9c9f77cd.png 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设计

维度:日期、渠道、区域、产品

指标:销售总金额、订单总比数


结构图如下:

81f77dc638d7b83e0f09a15357756287_3ff5c4e4c4754d57ae8d0b2dabf2a579.png 对应的SQL如下所示:

select
  t1.date1,
  t2.regionid,
  t2.regionname,
  t3.productid,
  t3.productname,
  sum(t1.price) as total_money,
  sum(t1.amount) as total_amount
from
  dw_sales t1
inner join dim_region t2
on t1.regionid = t2.regionid
inner join dim_product t3
on t1.productid = t3.productid
group by
  t1.date1,
  t2.regionid,
  t2.regionname,
  t3.productid,
  t3.productname
order by
  t1.date1,
  t2.regionname,
  t3.productname

核心步骤

定义数据源 => 定义Model => 定义Cube => 构建Cube

操作步骤

创建Model

创建的时候,Lookup Table,配置成如下的内容:

配置维度为如下的结果:

配置度量为如下的结果:

创建Cube

选择维度,如下图所示:

配置完的结果如下图:

指定指标,如下图所示:

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

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

执行SQL

select
  t1.date1,
  t2.regionid,
  t2.regionname,
  t3.productid,
  t3.productname,
  sum(t1.price) as total_money,
  sum(t1.amount) as total_amount
from
  dw_sales t1
inner join dim_region t2
on t1.regionid = t2.regionid
inner join dim_product t3
on t1.productid = t3.productid
group by
  t1.date1,
  t2.regionid,
  t2.regionname,
  t3.productid,
  t3.productname
order by
  t1.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 构建过程中的性能瓶颈,及时发现并优化构建效率。


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
88 4
|
2月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
81 5
|
2月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
37 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
1月前
|
消息中间件 canal 分布式计算
类似apache nifi的产品还有哪些?
【10月更文挑战第23天】类似apache nifi的产品还有哪些?
78 3
|
2月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
48 1
|
12天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
296 33
The Past, Present and Future of Apache Flink
|
2月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
850 13
Apache Flink 2.0-preview released
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
91 3
|
3月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。

推荐镜像

更多