大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录

news/2024/10/21 6:10:10/

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

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(正在更新…)

章节内容

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

  • Apache Kylin 构建Cube 准备数据
  • 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 查询语言进行复杂的多维分析。

维度表优化

  • 要具有数据一致性,主键值必须是唯一的(否则Kylin构建过程会报错)
  • 维度表越小越好,因为Kylin会将维度表加载到内存中供查询使用,过大的表不适合作为维度表,默认的阈值是300MB
  • 改变频率低,Kylin会在每次构建中试图重用维度表的快照(Snapshot),如果维度表经常改变的话,重用就会失效,这就会导致要经常对维度表创建快照
  • 维度表最好不要是Hive视图(View),因为每次都需要将视图进行物化,从而导致额外的时间开销

事实表优化

  • 移除不参与Cube构建的字段,可以提升构建的速度,降低Cube构建结果的大小
  • 尽可能将事实表进行维度拆分,提取公用的维度
  • 保证维度与事实表的映射关系,过滤无法映射的记录

创建Cube(按日期)

核心步骤

DataSource => Model => Cube

  • Model:描述了一个星型模式的数据结构,定义事实表(FactTable)和维度表(LookUpTable),以及它们之间的关系
  • 基于一个Model可以创建多个Cube,可以减少重复工作

Cube设计

  • 维度:日期
  • 度量:订单商品销售量、销售总金额
select date1, sum(price), sum(amount)
from dw_sales
group by date1;

结构图如下:
在这里插入图片描述

执行步骤

  • 创建项目Project(非必须)
  • 创建数据源(DataSource),指定有哪些数据需要进行数据分析
  • 创建模型(Model),指定具体要对哪个事实表、维度表进行数据分析
  • 创建立方体(Cube),指定对哪个数据模型执行预处理,生成不同维度的数据
  • 执行构建 等待构建完成
  • 再执行SQL查询,获取结果,从Cube中查询结果。

操作步骤

创建项目(Project)

左上角有一个 Add Project
在这里插入图片描述
我们点击之后弹窗,随便填写信息,创建
在这里插入图片描述

创建数据源(DataSource)

此时页面来到这里:

  • 选择:DataSource面板
  • 点击蓝色的小按钮:Load Table From Tree

在这里插入图片描述
点击左侧的数据库:wzk_kylin,选择之后,展开了树:

  • wzk_kylin.dim_channel 点击
  • wzk_kylin.dim_product 点击
  • wzk_kylin.dim_region 点击
  • wzk_kylin.dim_sales 点击

可以看到选中的都成蓝色了,记着点击 SYNC 按钮。
在这里插入图片描述

创建模型(Model)

切换到 Models 面板,点击New按钮,选择 New Model:
在这里插入图片描述
指定模型名称:
在这里插入图片描述

选择事实表,选择 WZK_KYLIN.DW_SALES:
在这里插入图片描述
选择维度,Columns这里段 DATE1:
在这里插入图片描述
选择度量,Columns选择 AMOUNT和PRICE:
在这里插入图片描述
指定分区和过滤条件,不修改:
在这里插入图片描述
完毕之后,可以看到左侧多了一个:(刚才名字改了一下):
在这里插入图片描述

创建立方体(Cube)

新建Cube
在这里插入图片描述
选择数据模型,同时设置一个Cube的名字:
在这里插入图片描述
选择 Add Dimensions 指定维度:
在这里插入图片描述
指定度量:

  • _COUNT_是系统缺省参数给的。
  • 新增 column叫 total_money 选择 DW_SALES.PRICE
  • 新增 column叫 total_amount 选择 DW_SALES.AMOUNT

图片1
在这里插入图片描述
图片2
在这里插入图片描述
指定刷新设置:(默认的没改)
在这里插入图片描述
高级设置,找到Cube Engine的部分,选择 MapReduce:
在这里插入图片描述
后边的都默认就行,最后保存Save之后,可以看到如下的页面:
在这里插入图片描述
选择后面的Actions的Build:
在这里插入图片描述
进入Monitor页面可以看到任务的进度,可视化的,刷新页面可以看到数据在变,但是我性能太差了,需要等好长时间:
在这里插入图片描述
等了好久好久··· 终于执行完毕了:
在这里插入图片描述

执行SQL

进入 Insight 选项卡中,执行下面的SQL进行查询:

select date1,sum(price) as total_money,sum(amount) as total_amount
from dw_sales
group by date1;

运行出来的结果是:
在这里插入图片描述


http://www.ppmy.cn/news/1538696.html

相关文章

Starrocks的表引擎选择及表属性的设置详细说明

表引擎选择 OLAP引擎 特点与适用场景: 这是StarRocks中用于数据分析场景的主要引擎。它针对海量数据的复杂分析查询进行了优化,能够高效地处理聚合、分组、排序等操作。例如,在数据仓库场景下,当需要对销售数据进行按地区、时间等…

iOS NSString 使用Copy修饰,而不使用Strong修饰

其实老实讲, 定义property 属性,“使用Copy修饰,而不是用Strong修饰”这句话也不完全正确.因为如果他们对接的是不可变字符串,那么无论使用哪个都一样. 问题就出现在,如果他们对接的是可变字符串NSMutableString,那就得用copy 定义两个NSString 属性: interface ViewControl…

利用编程思维做题之将两个有序的单链表合并成一个新的有序单链表

1. 理解问题 将两个有序的单链表合并成一个新的单链表,并且保持有序。每个链表的元素按照升序排列,合并后的链表也需要保持升序。 示例: 假设我们有两个有序链表: 链表 1:1 -> 3 -> 5链表 2:2 -&g…

python爬虫 - 深入requests模块

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、下载网络文件 (一)基本步骤 (二&…

【C++几种单例模式解读及实现方式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、单例是什么?二、解读1.懒汉式2.饿汉式3.static变量特性4.call_once特性 总结 前言 单例模式几乎是每种语言都不可少的一种设计模式&#xff0c…

Redis 典型应用之缓存

目录 1. 缓存的基本概念 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 3.2.1 内存淘汰策略 1. FIFO (First In First Out) 先进先出 2. LRU (Least Recently Used) 淘汰最久未使使用的 3. LFU (Least Frequently Used) 淘汰访问次数最少的 4…

【uni-app】HBuilderX安装uni-ui组件

目录 1、官网找到入口 2、登录帐号 3、打开HuilderX 4、选择要应用的项目 5、查看是否安装完成 6、按需安装 7、安装完毕要重启 8、应用 前言:uniapp项目使用uni-ui组件方式很多,有npm安装等,或直接创建uni-ui项目,使用un…

操作系统15

设备分配与回收 1.数据结构:系统设备表、设备控制表、控制器控制表、通道控制表 2.分配原则 (1)要充分发挥设备的使用率,尽可能让设备忙碌,但又避免由于不合理的分配方法造成的死锁 (2)要做到…