大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图

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

目前已经更新到了:

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

章节内容

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

  • 构建Cube 按照日期、区域、产品、渠道
  • Cube 优化方案

在这里插入图片描述

增量 Cube

  • 在大多数业务场景下,Hive中的数据处于不断增长的状态
  • 为了支持在构建Cube,无需重复处理历史数据,引入增量构建功能

Segment

Kylin将Cube划分为多个Segment(对应就是HBase中的一个表)

  • 一个Cube可能由1个或多个Segment组成,Segment是指定时间范围的Cube,可以理解为Cube的分区
  • Segment是针对源数据中的某个片段计算出来的Cube数据,代表一段时间内源数据的预计计算结果
  • 每个Segment用起始时间和结束时间来标志
  • 一个Segment的起始时间等于它之前Segment的结束前时间,它的结束时间等于它后面那个Segment的起始时间
  • 同一个Cube下不同的Segment除了背后的源数据不同之外,其他如结构定义、构建过程、优化方法、存储方式等完全相同

在这里插入图片描述

Segment示意图

在这里插入图片描述
例如:以下为针对某个Cube的Segment

在这里插入图片描述

全量构建与增量构建

全量构建

在全量构建中:

  • Cube中存在唯一一个Segment
  • 每Segment没有分割时间的概念,即没有起始时间和结束时间
  • 对于全量构建来说,每当需要更新Cube数据时,它不会区分历史数据和新加入的数据,即在构建时导入并处理所有的数据

增量构建

在增量构建中:

  • 只会导入新Segment指定的时间区间内的原始数据,并只对这部分原始数据进行预计算

相互对比

在这里插入图片描述
全量构建与增量构建的Cube查询的方式对比:
全量构建Cube:

  • 查询引擎只需要向存储引擎访问单个Segment所对应的数据,无需进行Segment之间的聚合
  • 为了加强性能,单个Segment的数据也有可能被分片存储到引擎的多个分区上,查询引擎可能仍然需要对单个Segment不同分区的数据进一步聚合

增量构建Cube:

  • 由于不同的时间的数据分布在不同的Segment中,查询引擎需要向存储引擎请求读取各个Segment的数据
  • 增量构建的Cube上的查询会比全量构建的做更多的运行时聚合,通常来说增量构建的Cube上查询会比全量构建的Cube上的查询要慢一些

对于小数据量的Cube,或者经常需要全表更新的Cube,使用全量构建需要更少的运维精力,以少量的重复计算降低生产环境中的维护复杂度。
对于大数据量的Cube,例一个包含较长历史数据的Cube,如果每天更新,那么大量的资源是在用于重复计算,这个情况下可以考虑使用增量构建。

增量构建Cube过程

指定分割时间列

增量构建Cube的定义必须包含一个时间维度,用来分割不同的Segment,这样的维度称为分割时间列(Partition Date Column)。

增量构建过程

  • 在进行增量构建时,将增量部分的起始时间和结束时间作为增量构建请求的一部分提交给Kylin的任务引擎
  • 任务引擎会根据起始时间和结束时间从Hive中抽取相应时间的数据,并对这部分数据做预处理计算
  • 将预计算的结果封装成一个新的Segment,并将相应的信息保存到元数据和存储引擎中,一般来说,增量部分的起始时间等于Cube中最后一个Segment的结束时间

增量Cube构建

步骤:定义数据源 => 定义Model => 定义Cube => 构建Cube

SQL 语句

-- 数据结构类似,只是改为了分区表
drop table wzk_kylin.dw_sales1;
create table wzk_kylin.dw_sales1(id string,channelId string,productId string,regionId string,amount int,price double
)
partitioned by (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';-- 加载数据
load data local inpath "dw_sales20240101_data.txt"
into table wzk_kylin.dw_sales1
partition(dt="2024-01-01");
load data local inpath "dw_sales20240102_data.txt"
into table wzk_kylin.dw_sales1
partition(dt="2024-01-02");
load data local inpath "dw_sales20240103_data.txt"
into table wzk_kylin.dw_sales1
partition(dt="2024-01-03");
load data local inpath "dw_sales20240104_data.txt"
into table wzk_kylin.dw_sales1
partition(dt="2024-01-04");

生成数据

同样,我们先编写一个脚本来生成对应的数据:

import random# 设置参数
dates = ["2024-01-01", "2024-01-02", "2024-01-03", "2024-01-04"]
num_records_per_file = 100# 定义可能的值
channel_ids = ['C001', 'C002', 'C003', 'C004']
product_ids = ['P001', 'P002', 'P003', 'P004']
region_ids = ['R001', 'R002', 'R003', 'R004']# 生成数据
for dt in dates:output_file = f'dw_sales{dt.replace("-", "")}_data.txt'with open(output_file, 'w') as f:for i in range(num_records_per_file):record_id = f"{i+1:04d}"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},{channel_id},{product_id},{region_id},{amount},{price}\n"f.write(line)print(f"{num_records_per_file} records have been written to {output_file}")print("All data files have been generated.")

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

上传数据

通过你习惯的方式,将这几个txt上传到服务器上,准备执行:
在这里插入图片描述

执行脚本

hive -f kylin_partition.sql

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

加载数据源

Load Table From Tree

在这里插入图片描述
选择刚才创建的表,wzk_kylin.dw_sales1:
在这里插入图片描述

定义Model

增量构建的Cube需要指定分割时间列,例如:将日期分区字段添加到维度列中:
Data Model:New Join Condition,需要配置好几个:
在这里插入图片描述
配置成如下的结果:
在这里插入图片描述
维度配置如下图所示:
在这里插入图片描述
度量选择 AMOUNT 和 PRICE,最后的设置:
在这里插入图片描述

定义Cube

填写名字等跳过,维度需要添加 DT、其他都要:
在这里插入图片描述
配置完的结果如下图:
在这里插入图片描述
度量配置如下:(Bulk Add Measures 快速配置)
在这里插入图片描述
剩余的信息都默认填写即可:
在这里插入图片描述

构建Cube

接下来构建Cube的时候,进行Build:
在这里插入图片描述

选部分的日期,就不选所有数据了:
在这里插入图片描述

继续等待构建完毕:
在这里插入图片描述

查看Segment

刚才我们构建了

  • 2024-01-01 到 2024-01-02 的数据
  • 我们继续build 2024-01-02 到 2024-01-03
  • 完成后继续build 2024-01-03 到 2024-01-04
    分段的进行build的任务,最后我们查看 Segment如下:

2024-01-01 到 2024-01-02 完成之后,我们继续任务:
在这里插入图片描述
2024-01-02 到 2024-01-03 完成之后,我们继续任务:
在这里插入图片描述
漫长等待,任务都完成之后如下图所示:
在这里插入图片描述

查询测试

第一部分:按日期和地区汇总销售数据

-- 第一部分查询:按日期和地区汇总销售数据
SELECT t1.dt,t2.regionname,SUM(t1.price) AS total_money,SUM(t1.amount) AS total_amount,MAX(t1.price) AS max_price,MIN(t1.amount) AS min_amount
FROM dw_sales1 t1
JOIN dim_region t2 
ON t1.regionid = t2.regionid
GROUP BY t1.dt, t2.regionname
ORDER BY t1.dt;

运行的结果如下图所示:
在这里插入图片描述
另一部分:按日期、地区和产品汇总销售数据

-- 第二部分查询:按日期、地区和产品汇总销售数据
SELECT t1.dt,t2.regionid,t2.regionname,t3.productid,t3.productname,SUM(t1.price) AS total_money,SUM(t1.amount) AS total_amount
FROM dw_sales1 t1
INNER JOIN dim_region t2 
ON t1.regionid = t2.regionid
INNER JOIN dim_product t3 
ON t1.productid = t3.productid
GROUP BY t1.dt,t2.regionid,t2.regionname,t3.productid,t3.productname
ORDER BY t1.dt,t2.regionname,t3.productname;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443575.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis:分布式 - 哨兵

Redis:分布式 - 哨兵 概念哨兵 Docker 搭建哨兵分布式选举流程 概念 Redis 的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工进行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于上了一定规模…

【LeetCode HOT 100】详细题解之回溯篇

【LeetCode HOT 100】详细题解之回溯篇 回溯法的理论基础回溯法解决的问题理解回溯法回溯法模板 46 全排列思路代码 78 子集思路代码 17 电话号码的字母组合思路代码 39 组合总和思路代码 22 括号生成思路代码 79 单词搜索思路代码 131 分割回文串思路代码 51 N皇后思路代码 回…

打造梦幻AI开发环境:一步步解锁高效配置的魅力

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

疾病防控|基于springBoot的疾病防控综合系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 在如今社会上,关于信息上面的处理,没有任何…

基于SpringBoot+Vue的农场管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

通过Fiddler抓包采集某音作品列表,视频列表

声明:文章仅用于学习交流,如有侵权请联系删除 今天分享下某音app作品列表采集方法,我只详细说一下大步骤,细节就不多说了,留着大家去试吧 我们通过Fiddler 快捷方式 配置好代理 打开抖音进行抓包,随便找个达人打开主…

计算机的错误计算(一百一十七)

摘要 算式“(5^25*(1/25)^(1/5)*3^25(1/25)^(1/5)*5^25*3^(251/5)-(9/25)^(1/5)*3^25*5^25-(1/25)^(1/5)*3^25*5.0^25*(13^(1/5)-3^(2/5.0)))” 的准确值是0. 但是,Python 与 Excel 均输出了错误结果:一个含有15位整数,一个含有14位整数。 …

stm32学习笔记-RTC实时时钟

文章目录 一、RTC基础知识1.1 RTC简介1.2 RTC的晶振 二、stm32的RTC2.1 RTC和后备寄存器2.2 stm32 RTC结构框图及特性 三、stm32 RTC编程2.1 RTC初始化2.2 RTC控制程序 一、RTC基础知识 1.1 RTC简介 实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称…

【机器学习】深度学习、强化学习和深度强化学习?

深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标,虽然都属于机器学习的范畴,但各自的实现方式和侧重点有所不同。 1. 深度学习(Deep Learning) 深度学习是一种基于神经网络的…

76.【C语言】perror函数介绍

1.cplusplus的官网介绍 cplusplus的介绍 点我跳转 2.翻译 函数 perror void perror ( const char * str ); 打印错误信息 将errno(最后一个错误数字)的值解释为错误信息,之后把它打印到stderr中(标准错误输出流,通常是控制台)(备注有关"流"的概念在75.【C语言】文件…

CMake 属性之目录属性

【写在前面】 CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置。 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为。 通过目录…

Jax(Random、Numpy)常用函数

目录 Jax vmap Array reshape Random PRNGKey uniform normal split choice Numpy expand_dims linspace jax.numpy.linalg[pkg] dot matmul arange interp tile reshape Jax jit jax.jit(fun, in_shardingsUnspecifiedValue, out_shardingsUnspecifiedVa…

docker compose一键部署容器监控 CAdvisor+InfluxDB+Granfana

docker compose一键部署容器监控 CAdvisorInfluxDBGranfana CAdvisor监控收集InfluxDB存储数据Granfana展示图表 1、原生命令 通过docker stats 命令可以查看当前宿主机上所有创建的容器的CPU,内存和网络流量等信息 docker stats 缺点:只能查看当前宿主机的全部…

Pyppeteer:如何在 Python 中使用 Puppeteer 和 Browserless?

Python 中的 Pyppeteer 是什么? Pyppeteer 是流行的 Node.js 库 Puppeteer 的 Python 移植版本,用于以编程方式控制无头 Chrome 或 Chromium 浏览器。 本质上,Pyppeteer 允许 Python 开发人员在 Web 浏览器中自动执行任务,例如抓…

多选框的单选操作 Element ui

文章目录 样式预览Q:为什么要这么做?实现原理探索路程 样式预览 Q:为什么要这么做? 单选框的样式不够好看单选框因为框架等原因,无法取消选择 实现原理 判断多选框绑定的 value,如果长度为2,那…

oracle-函数-instr()的妙用以及相似功能like

INSTR(C1,C2[,I[,J]]) 【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等),按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【…

RTSP RTP RTCP SDP基础知识

理论 流(Streaming ) 是近年在 Internet 上出现的新概念,其定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种 顺序流式传输 (Progressive Streaming) 实时流式传输 (Real time Streaming) ​​​​​…

国产长芯微LDC5422单通道、16位、电流源和电压输出DAC,HART连接完全P2P替代AD5422

描述 LDC5422是低成本、精密、完全集成、16位数模转换器(DAC),内置可编程电流源和可编程电压输出,设计用于满足工业过程控制应用的需要。 输出电流范围可编程设置为4 mA至20 mA、0 mA至20 mA或者超量程的0 mA至24 mA。 此产品的LFCSP版本有一个CAP2引脚…

胤娲科技:00后揭秘——AI大模型的可靠性迷局

当智能不再“靠谱”,我们该何去何从? 想象一下,你向最新的GPT模型提问:“9.9和9.11哪个大?”这本应是个小菜一碟的问题,却足以让不少高科技的“大脑”陷入沉思, 甚至给出令人啼笑皆非的答案。近…

vite学习教程06、vite.config.js配置

前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…