大数据-159 Apache Kylin 构建Cube 准备和测试数据

embedded/2024/10/10 23:51:15/

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

目前已经更新到了:

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

章节内容

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

  • Apache Kylin 安装
  • Apache Kylin 部署
  • Apache Kylin 集群模式

在这里插入图片描述

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!
由于我是在 h122.wzk.icu 节点上启动的,所以下面的操作都在 h122 节点上,后续没有详细说明就是在该机器上了。

准备数据

在这里插入图片描述

准备数据

将4个数据文件:

  • dw_sales_data.txt
  • dim_channel_data.txt
  • dim_product_data.txt
  • dim_region_data.txt

我写了几个脚本来辅助生成数据
在这里插入图片描述

dw_sales_data

import random
import datetime# 设置参数
num_records = 1000
output_file = 'dw_sales_data.txt'# 定义可能的值
channel_ids = ['C001', 'C002', 'C003', 'C004']
product_ids = ['P001', 'P002', 'P003', 'P004']
region_ids = ['R001', 'R002', 'R003', 'R004']
base_date = datetime.date(2024, 1, 1)# 生成数据
with open(output_file, 'w') as f:for i in range(num_records):record_id = f"{i+1:04d}"date1 = (base_date + datetime.timedelta(days=random.randint(0, 365))).strftime('%Y-%m-%d')channel_id = random.choice(channel_ids)product_id = random.choice(product_ids)region_id = random.choice(region_ids)amount = random.randint(1, 100)price = round(random.uniform(10.0, 500.0), 2)line = f"{record_id},{date1},{channel_id},{product_id},{region_id},{amount},{price}\n"f.write(line)print(f"{num_records} records have been written to {output_file}")

生成数据如下图所示:
在这里插入图片描述

dim_channel_data

# 设置参数
output_file = 'dim_channel_data.txt'# 定义渠道ID和渠道名称
channels = [('C001', 'Online Sales'),('C002', 'Retail Store'),('C003', 'Wholesale'),('C004', 'Direct Sales')
]# 生成数据
with open(output_file, 'w') as f:for channel_id, channel_name in channels:line = f"{channel_id},{channel_name}\n"f.write(line)print(f"Channel data has been written to {output_file}")

生成数据如下图所示:
在这里插入图片描述

dim_product_data

# 设置参数
output_file = 'dim_product_data.txt'# 定义产品ID和产品名称
products = [('P001', 'Smartphone'),('P002', 'Laptop'),('P003', 'Tablet'),('P004', 'Smartwatch'),('P005', 'Camera'),('P006', 'Headphones'),('P007', 'Monitor'),('P008', 'Keyboard'),('P009', 'Mouse'),('P010', 'Printer')
]# 生成数据
with open(output_file, 'w') as f:for product_id, product_name in products:line = f"{product_id},{product_name}\n"f.write(line)print(f"Product data has been written to {output_file}")

生成数据如下图所示:
在这里插入图片描述

dim_region_data

# 设置参数
output_file = 'dim_region_data.txt'# 定义区域ID和区域名称
regions = [('R001', 'North America'),('R002', 'Europe'),('R003', 'Asia'),('R004', 'South America'),('R005', 'Africa'),('R006', 'Australia'),('R007', 'Antarctica')
]# 生成数据
with open(output_file, 'w') as f:for region_id, region_name in regions:line = f"{region_id},{region_name}\n"f.write(line)print(f"Region data has been written to {output_file}")

生成的数据如下图所示:
在这里插入图片描述

kylin_examplessql_188">kylin_examples.sql

-- 创建订单数据库、表结构
create database if not exists `wzk_kylin`;
-- 1、销售表:dw_sales
-- id 唯一标识
-- date1 日期
-- channelId 渠道ID
-- productId 产品ID
-- regionId 区域ID
-- amount 数量
-- price 金额
create table wzk_kylin.dw_sales(id string,date1 string,channelId string,productId string,regionId string,amount int,price double
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
-- 2、渠道表:dim_channel
-- channelId 渠道ID
-- channelName 渠道名称
create table wzk_kylin.dim_channel(channelId string,channelName string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
-- 3、产品表:dim_product
create table wzk_kylin.dim_product(productId string,productName string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
--4、区域表:dim_region
create table wzk_kylin.dim_region(regionId string,regionName string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';-- 导入数据
LOAD DATA LOCAL INPATH '/opt/wzk/kylin_test/dw_sales_data.txt'
OVERWRITE INTO TABLE wzk_kylin.dw_sales;
LOAD DATA LOCAL INPATH '/opt/wzk/kylin_test/dim_channel_data.txt'
OVERWRITE INTO TABLE wzk_kylin.dim_channel;
LOAD DATA LOCAL INPATH '/opt/wzk/kylin_test/dim_product_data.txt'
OVERWRITE INTO TABLE wzk_kylin.dim_product;
LOAD DATA LOCAL INPATH '/opt/wzk/kylin_test/dim_region_data.txt'
OVERWRITE INTO TABLE wzk_kylin.dim_region;

运行数据

我们需要把刚才的数据上传到指定目录上,/opt/wzk/目录下。

cd /opt/wzk/kylin_test

我已经上传到服务器上了:
在这里插入图片描述

SQL文件也记得上传上去
在这里插入图片描述
执行Hive:

hive -f kylin_examples.sql

执行结果如下图所示:
在这里插入图片描述

测试数据

我们需要启动Hive

hive

执行结果如下图所示:
在这里插入图片描述
执行如下的指令:

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

执行结果如下图所示:
在这里插入图片描述


http://www.ppmy.cn/embedded/125608.html

相关文章

【大数据】Flink CDC 实时同步mysql数据

目录 一、前言 二、Flink CDC介绍 2.1 什么是Flink CDC 2.2 Flink CDC 特点 2.3 Flink CDC 核心工作原理 2.4 Flink CDC 使用场景 三、常用的数据同步方案对比 3.1 数据同步概述 3.1.1 数据同步来源 3.2 常用的数据同步方案汇总 3.3 为什么推荐Flink CDC 3.4 Flink …

【Iceberg分析】Spark与Iceberg集成落地实践(一)

Spark与Iceberg集成落地实践(一) 文章目录 Spark与Iceberg集成落地实践(一)清理快照与元数据配置表维度自动清理元数据文件属性SPARK DDL语句作用 手动清理 清理孤岛文件合并数据文件可用配置rewriteDataFiles核心类图 清理快照与…

毕业设计项目 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

C++、Ruby和JavaScript

C C最初被称为带类的C, 兼容C的语法,此既是C得以流行的前提,也是C某些语法被捆绑的根源。C的来源于C语言的递增运算符,代表增加,意义为扩展。 C的历史 C类的设计思想来源于Simula. Simula为模拟的意思,被称为最早的面向…

【软考】设计模式之中介者模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点 1. 说明 1.用一个中介对象来封装一系列的对象交互。2.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。3.中介者模式(Mediator Pattern&…

前端使用rsa对密码加密,springboot使用rsa对密码进行解密

前端 <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JSEncrypt Example</title><script src"https://cdn.rawgit.com/spark/crypto-js/master…

听说这是MATLAB基础?

MATLAB&#xff08;矩阵实验室&#xff09;是一个强大的高性能计算环境和编程语言&#xff0c;广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识&#xff0c;涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区&#xf…

QT学习笔记4.1(常用控件、功能、窗口)

QT学习笔记4.1&#xff08;常用控件) 目录 控件功能、属性 窗口常用功能、属性 扩展功能&#xff1a; 资料 控件功能、属性 1.打开网址 点击菜单名字打开网址&#xff1a; 检测&QMenu::aboutToShow菜单展开信号-》槽函数--》title“”&#xff0c;--》执行打开网址…