大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(正在更新…)
章节内容
上节我们完成了如下的内容:
- 全量增量Cube的构建
- Segment

基本流程
在 Apache Kylin 中,手动触发 Segment 合并的步骤如下:
-
选择要合并的 Cube 和 Segments: 进入 Kylin Web UI,选择你要操作的 Cube,进入该 Cube 的详情页面。在“Segments”标签页下,可以看到当前 Cube 的所有 Segments。选择你希望合并的 Segments。
-
合并 Segments: 点击页面上的 “Merge Segment” 按钮。通常情况下,Kylin 会自动计算可以合并的 Segments。如果你想手动控制合并的 Segments,可以在弹出的对话框中手动选择你想合并的 Segments。
-
配置合并任务: 配置合并任务的参数,如目标时间范围等。Kylin 会根据你选择的 Segments 的范围自动填充一些默认的值。你可以根据需求调整这些参数。
-
启动合并任务: 完成配置后,点击 “Submit” 按钮。Kylin 将会创建一个新的合并任务(Job),该任务将在后台执行。你可以在 “Job” 页面查看任务的执行状态。
-
监控任务状态: 在 “Job” 页面,你可以查看合并任务的日志和状态。如果任务执行成功,你会看到新的 Segment 出现在 Segments 列表中,表示合并已经完成。
-
如果合并成功,新的合并后 Segment 会替代原来的多个 Segments,而旧的 Segments 将被 Kylin 自动清理。
需要注意的是,手动合并的操作可能会占用大量资源,因此在高负载时需要谨慎操作,并在合适的时间段执行合并任务。
手动触发合并Segment
Kylin提供了一种简单的机制用于控制Cube中Segment的数量:合并Segment,在WebGUI中选中需要进行Segments合并的Cube。
单击Action => Merge
我们刚才分阶段进行了任务的Build操作,
01-01、01-02、01-03、01-04 的任务,我们可以使用 Merge 来进行合并:

选中需要合并的Segment,可以同时合并多个Segment,但这些Segment必须是连续的,单击提交系统会提交一个类型为 MERGE 的构建任务,这里可以选择时间阶段,我选择的是 01-03到01-04:

提交任务,可以看到是一个 Merge任务,看名字:【MERGE】,等待合并完毕:

合并完毕的结果如下图:

注意事项
- 在MERGE构建结束之前,所有选中用来合并的Segment仍然处于可用的状态
- 在MERGE类型的构建完成之前,系统将不允许提交这个Cube上任何类型的其他构建任务
- 当MERGE构建结束的时候,系统将选中合并的Segment替换为新的Segment,而被替换下的Segment等待将被垃圾回收和清理,以节省系统资源
删除Segment
使用WebUI删除Cube的Segment,
这里选择 Disable 就可以删除Segment了:

Disable之后,可以看到下面的:DeleteSegment操作,就可以删除指定的Segment了:

自动合并
手动维护Segment很繁琐,人工成本高,Kylin中是可以支持自动合并Segment。
在Cube Designer的 Refresh Settings的页面中有:
- Auto Merge Thresholds
- Retention Thresholds
Refresh Settings的页面:

两个设置项可以用来帮助管理Segment碎片,这两项设置搭配使用这两项设置可以大大减少对Segment进行管理的麻烦。
Auto Merge Thresholds
- 允许用户设置几个层级的时间阈值,层级越靠后,时间阈值越大
- 每当Cube中有新的Segment状态变为READY的时候,就会自动触发一次系统自动合并
合并策略
- 尝试最大一级的时间阈值,例如:针对(7天、28天)层级的日志,先检查能够将连续的若干个Segment合并成为一个超过28天的大Segment
- 如果有个别的Segment的事件长度本身已经超过28天,系统会跳过Segment
- 如果满足条件的连续Segment还不能够累积超过28天,那么系统会使用下一个层级的时间戳重复寻找
案例1 理解Kylin自动合并策略
- 假设自动合并阈值设置为7天、28天
- 如果现在有A-H 8个连续的Segment,它们的时间长度为28天(A)、7天(B)、1天(C)、一天(D)、一天(E)、一天(F)、一天(G)、一天(H)
- 此时,第9个Segment加入,时间长度为1天
自动合并的策略为:
- Kylin判断时能够将连续的Segment合并到28天这个阈值,由于Segment A已经超过28天,会被排除。
- 剩下的连续Segment,所有时间加一起 B+C+D+E+F+G+H+I < 28天,无法满足28天的阈值,则开始尝试7天的阈值
- 跳过 A(28)、B(7)均超过7天,排除
- 剩下的连续Segment,所有时间加在一起 C+D+E+F+G+H+I 达到7天的阈值,触发合并,提交Merge任务,并构建一个SegmentX(7天)
- 合并后,Segment为:A(28天)、B(7天)、X(7天)
- 连续触发检查,A(28天)跳过,B+X(7+7=14)< 28天,不满足第一阈值,重新使用第二阈值触发
- 跳过B、X尝试终止
案例2 配置自动合并4天的Segment
选中Model,选择Edit进行编辑:

直接到Refresh Setting选项卡,将选项修改为,4天:

后续将自动进行Segment的构建。
配置保留的Segment
自动合并是将多个Segment合并为一个Segment,以达到清理碎片的目的,保留Segment则是及时清理不再使用的Segment。
在很多场景中,只会对过去一段时间内的数据进行查询,例如:
- 对于某个只显示过去1年数据的报表
- 支持它的Cube其实只需要保留过去一年类的Segment即可
- 由于数据在Hive中已经存在备份,则不需在Kylin中备份超过一年的类似数据
可以将Retention Threshold设置为365,每当有新的Segment状态变为READY的时候,系统会检查每一个Segment。如果它的结束时间距离最晚的一个Segment的结束时间已经大于等于RetentionThreshold,那么这个Segment将视为无需保留,系统会自动从Cube中删除这个Segment。
保留策略示意图如下所示:

使用JDBC连接操作Kylin
简单介绍
- 要将数据以可视化方式展示出来,需要使用Kylin的JDBC方式连接执行SQL,获取Kylin的执行结果
- 使用Kylin的JDBC与JDBC操作MySQL一致
业务需求
通过JDBC的方式,查询按照日期、区域、产品维度统计订单总额/总数量结果
开发步骤
添加依赖
<dependency><groupId>org.apache.kylin</groupId><artifactId>kylin-jdbc</artifactId><version>3.1.1</version>
</dependency>
实现规划
- 创建Connection连接对象
- 构建SQL语句
- 创建Statement对象,并执行executeQuery
- 打印结果
编写代码
我这里用Scala实现了,Java也差不多
package icu.wzk.kylinimport java.sql.DriverManagerobject KylinJdbcTest {def main(args: Array[String]): Unit = {// 创建连接对象val connection = DriverManager.getConnection("jdbc:kylin://h122.wzk.icu:7070/wzk_test_kylin", "ADMIN", "KYLIN")// 创建Statementval statement = connection.createStatement();// 构建SQL语句var sql ="""|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|""".stripMarginval resultSet = statement.executeQuery(sql)println("dt region product_name total_money total_amount")while (resultSet.next()) {// 获取时间val dt = resultSet.getString("dt")// 获取区域名称val regionName = resultSet.getString("regionname")// 获取产品名称val productName = resultSet.getString("productname")// 获取累计金额val totalMoney = resultSet.getDouble("total_money")// 获取累计数量val totalAmount = resultSet.getDouble("total_amount")println(f"$dt $regionName $productName $totalMoney $totalAmount")}connection.close()}}
测试运行
我们运行代码,可以看到如下的运行结果:

相关文章:
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
云手机与传统手机的区别是什么?
随着科技的快速进步,云手机逐渐成为手机市场的热门选择。与传统的智能手机相比,云手机具有许多独特的功能和优势,尤其在多账号管理和高效操作方面备受关注。那么,云手机究竟与普通手机有哪些区别呢? 1. 更灵活的操作与…...
微知-Bluefield DPU命名规则各字段作用?BF2 BF3全系列命名大全
文章目录 背景字段命名C是bmc的意思NOT的N是是否加密S表示不加密但是secureboot enable倒数第四个都是E倒数第五个是速率 V和H是200GM表示E serials,H表示P serials(区别参考兄弟篇:[more](https://blog.csdn.net/essencelite/article/detail…...
Ubuntu 上使用 Nginx 实现反向代理并启用 HTTPS(详细教程)
拒绝使用宝塔,虽然宝塔很好用方便,但是他非常占用资源,所以我正在尝试转换我使用服务器的方式,通过命令来才做这些,下面是我的详细步骤。 在这篇教程中,我们将详细介绍如何在 Ubuntu 系统上使用 Nginx 搭建…...
2. 继承Mono的单例模式基类
前提 继承MonoBehaviour的脚本不能new继承MonoBehaviour的脚本一定得依附在GameObject上 实现挂载式的单例模式基类 挂载式 继承Mono的单例模式基类 /// <summary> /// 挂载式 继承Mono的单例模式基类 /// </summary> /// <typeparam name"T">&…...
数据治理:制造企业转型的关键要素与战略需求
制造业,作为国民经济的主体,是立国之本、兴国之器、强国之基。从工业文明的曙光初现,到今日全球化的激烈竞争,始终昭示着一个真理:没有强大的制造业,就没有国家和民族的强盛。 为全面推进制造强国建设&…...
FastAPI 基本路由
FastAPI 基本路由 FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。在本文中,我们将探讨 FastAPI 的基本路由概念,包括如何定义路由、处理请求和响应,以及一些高级特性。 什么是路由? 在 Web 框架中,路由是指将传入的…...
Python库matplotlib之六
Python库matplotlib之六 动画FuncAnimation构造器成员函数应用例子 动画 Matplotlib基于其绘图功能,还提供了一个使用动画模块,生成动画的接口。动画是一系列帧,其中每个帧对应于图形上的一个图。 Matplotlib使用两个类来实现动画ÿ…...
十一、数据库的设计规范
文章目录 1. 为什么需要数据库设计2. 范式2.1 范式介绍2.2 范式都包括哪些2.3 键和相关属性的概念2.4 第一范式(1st NF)2.5 第二范式(2nd NF)2.6 第三范式(3rd NF)2.7 小结3. 反范式化3.1 概述3.2 应用举例3.3 反范式的新问题3.4 反范式的使用场景3.4.1 增加冗余字段的建议3.…...
这届物理与化学诺奖对S2AIAI4S的启示
物理学与AI看似神秘而又简洁的纠缠 随着今年诺贝尔物理学奖(这篇还没来得及发,化学奖也...)的颁布,不管是国内某圈还是国外某管,无论是学术界又或产业界,充斥着震惊又或是“物理学不存在了”之类的调侃&am…...
压力测试指南-云环境中的压力测试实践
云环境中的压力测试实践 1. 云环境对压力测试的影响 在数字化转型的浪潮中,云环境已成为软件部署与测试的首选。它不仅提供了无限的可扩展性,还极大地改变了我们进行压力测试的方式。传统本地环境中,硬件资源的限制常导致无法模拟真实世界…...
基于多密钥同态加密的安全高效的联邦学习
文章目录 摘要与简介部分1、联邦学习 FL2、同态加密 HE3、文章创新点 一、简介1、基于 HE 的 FLs2、离线问题3、计算开销4、该文章的工作5、文章的贡献点 二、背景和相关研究1、基于多方安全计算 (SMC) 的联邦学习 (FL)2、基于差分隐私 (DP) 的联邦学习 (FL)3、基于可信执行环境…...
R语言统计分析——气泡图
参考资料:R语言实战【第2版】 气泡图(bubble plot)用来展示三个定量变量间的关系:先创建一个二维散点图,然后用点的大小来代表第三个边变量的值。 我们可以使用symbols()函数来创建气泡图。该函数可以在指定的(x,y)坐标…...
实用篇—Navicat复制多条INSERT语句,去除ID列执行
在数据库管理中,常常需要将数据从一个表复制到另一个表。使用 Navicat 等工具可以方便地导出多条 INSERT 语句,但有时我们不需要某些列(如 ID 列)。本文将介绍如何在 Navicat 中复制多条 INSERT 语句,并去除 ID 列以便…...
pytorch中张量的有关操作
pytorch中张量的有关操作 创建张量torch.tensor(data): 从数据创建张量torch.zeros(size): 创建元素全为0的张量torch.ones(size): 创建元素全为1的张量torch.empty(size): 创建未初始化的张量torch.randn(size): 创建服从标准正态分布的张量torch.arange(start, end, step): 创…...
Windows多线程编程 互斥量和临界区使用
Windows 多线程编程允许程序同时运行多个线程,提高程序的并发性和执行效率。多线程编程中的核心概念包括线程的创建、同步、调度、数据共享和竞争条件等。本文详细介绍了 Windows 多线程编程的关键技术点,并解释如何使用线程同步机制来保证线程安全。 1…...
Java中集合类型的转换
在Java编程中,集合框架(Collections Framework)提供了一套用于存储和处理对象集合的接口和类。由于集合框架的灵活性和强大功能,我们经常需要在不同的集合类型之间进行转换。本文将介绍Java中常见的集合类型转换方法,包…...
汽车售后TPMS浅谈
汽车售后中的TPMS,即轮胎压力监测系统(Tire Pressure Monitoring System),是一种重要的汽车安全系统。以下是对汽车售后TPMS的详细解释: 一、TPMS的作用 TPMS的主要作用是在汽车行驶过程中对轮胎气压进行实时自动监测…...
LUCEDA IPKISS Tutorial 77:在版图一定范围内填充dummy
案例分享:在给定的Shape内填充dummy 所有代码如下: from si_fab import all as pdk from ipkiss3 import all as i3 from shapely.geometry import Polygon, MultiPolygon import numpy as np import matplotlib.pyplot as pltclass CellFilledWithCon…...
TON生态小游戏开发:推广、经济模型与UI设计的建设指南
随着区块链技术的快速发展,基于区块链的Web3游戏正引领行业变革。而TON生态小游戏,借助Telegram庞大的用户基础和TON(The Open Network)链上技术,已成为这一领域的明星之一。国内外开发者正迅速涌入,开发和…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
