当前位置: 首页 > news >正文

ClickHouse(二十):Clickhouse SQL DDL操作-2-分区表DDL操作

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

1. 查看分区信息

2. 卸载分区

3. 装载分区

4. 删除分区

​​​​​​​5. 替换分区

6. 移动分区

​​​​​​​​​​​​​​7. 重置分区列


ClickHouse中只有MergeTree家族引擎下的表才能分区。这里说的分区表就是MergeTree家族表引擎对应的分区表。

1. 查看分区信息

  • 示例:
#在newdb中创建分区表 t_partition ,使用MergeTree引擎node1 :) create table t_partition (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;#向表 t_partition 中插入以下数据:node1 :) insert into t_partition values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');#查询表 t_partition 的分区信息node1 :) select database,table,name,partition from system.parts where table = 't_partition';

也可以在ClickHouse节点上查看分区信息,路径为:/var/lib/clickhouse/data/newdb/t_partition/,信息如下:

2. 卸载分区

将指定分区的数据移动到 detached 目录。服务器会忽略被分离的数据分区。只有当你使用 ATTACH 时,服务器才会知晓这部分数据。当执行操作以后,可以对 detached 目录的数据进行任意操作,例如删除文件,或者放着不管。

  • 卸载分区语法:
ALTER TABLE table_name DETACH PARTITION partition_expr
  • 示例:
#卸载 表 t_partition 中 ‘BJ’分区数据node1 :) alter table t_partition detach partition 'BJ'#查看表 t_partition中的数据node1 :) select * from t_partition;┌─id─┬─name─┬─age─┬─loc─┐│  2  │ 李四  │  19  │ GZ  ││  4  │ 马六  │  21  │ GZ  │└────┴──────┴─────┴─────┘#查看表 t_partition 中的分区信息node1 :) select database,table,name,partition from system.parts where table = 't_partition';┌─database─┬─table───────┬─name───────────────────────────────────┬─partition─┐│ newdb     │ t_partition │ 8700fff36a8bf87b6ea3eedb16d04038_2_2_0 │ GZ         │└──────────┴─────────────┴────────────────────────────────────────┴───────────┘#查看路径/var/lib/clickhouse/data/newdb/t_partition/detached中数据,发现卸载的对应分区移动到此目录中

3. 装载分区

我们可以将已经卸载的分区重新装载到对应的表分区中。这里就是将detached目录中的数据重新移动到对应的表数据目录下。

也可以将卸载的分区数据加载到其他表中,但是这个表需要与原来的表具有相同的表结构及相同的分区字段。

  • 装载分区数据语法:
ALTER TABLE table_name ATTACH PARTITION partition_expr
  • 示例:
#将表 t_partition 对应的 ‘BJ’分区装载回来node1 :) alter table t_partition attach partition 'BJ';#查看表 t_partition 中的数据node1 :) select * from t_partition;┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18 │ BJ   ││  3  │ 王五  │  20 │ BJ   │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  2  │ 李四  │  19 │ GZ   ││  4  │ 马六  │  21 │ GZ   │└────┴──────┴─────┴─────┘#查看表 t_partition 分区信息node1 :) select database,table,name,partition from system.parts where table = 't_partition';

​​​​​​​4. 删除分区

ClickHouse中的分区表,可以针对分区表删除某个分区,之后再导入当前分区的数据,以达到数据更新的目的。​​​​​​​

执行删除分区命名是直接将对应分区数据删除,不会放入detached目录。该操作会将分区标记为不活跃的,然后在大约10分钟内删除全部数据。

  • 删除分区语法:
ALTER TABLE table_name DROP PARTITION partition_expr
  • 示例:
#删除表 t_partition 中的 'BJ' 分区:node1 :) alter table t_partition drop partition 'BJ';#查询 t_partition 中的分区信息:node1 :) select database,table,name,partition from system.parts where table = 't_partition';┌─database─┬─table───────┬─name───────────────────────────────────┬─partition─┐│ newdb     │ t_partition  │ 8700fff36a8bf87b6ea3eedb16d04038_2_2_0 │ GZ         │└──────────┴─────────────┴────────────────────────────────────────┴───────────┘

​​​​​​​5. 替换分区

替换分区支持将table1表的分区数据复制到table2表,并替换table2表的已有分区。table1表中分区数据不会被删除,table1和table2表必须要有相同的表结构且分区字段相同。这个操作经常用作数据备份、表数据同步操作。

  • 替换分区语法:
ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1
  • 示例:
#创建表 table1 和table2 ,使用MergeTree表引擎,并且两表结构相同node1 :) create table table1 (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;node1 :) create table table2 (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;#向table1中插入以下数据node1 :) insert into table1 values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');┌─id─┬─name─┬─age─┬─loc─┐│  1   │ 张三    │  18   │ BJ    ││  3   │ 王五    │  20   │ BJ    │└───┴────┴────┴────┘┌─id─┬─name─┬─age─┬─loc─┐│  2   │ 李四    │  19   │ GZ    ││  4   │ 马六    │  21   │ GZ    │└───┴────┴────┴────┘#向table2中插入以下数据node1 :) insert into table2 values (5,'田七',22,'BJ'),(6,'赵八',23,'GZ'),(7,'李九',24,'BJ'),(8,'郑十',25,'GZ');┌─id─┬─name─┬─age─┬─loc─┐│  5   │ 田七    │  22   │ BJ    ││  7   │ 李九    │  24   │ BJ    │└───┴────┴────┴────┘┌─id─┬─name─┬─age─┬─loc─┐│  6   │ 赵八   │  23   │  GZ    ││  8   │ 郑十   │  25   │ GZ     │└───┴────┴────┴────┘#将table1表中’BJ’分区内的数据替换到table2中node1 :) alter table table2 replace partition 'BJ' from table1;#查看表 table2中的数据node1 :) select * from table2;┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18  │ BJ  ││  3  │ 王五  │  20  │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  6  │ 赵八  │  23 │ GZ   ││  8  │ 郑十  │  25 │ GZ   │└────┴──────┴─────┴─────┘#查看表 table1中的数据,没有变化,不会删除 ‘BJ’ 分区的数据node1 :) select * from table1;┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18  │ BJ  ││  3  │ 王五  │  20  │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  2  │ 李四  │  19  │ GZ  ││  4  │ 马六  │  21  │ GZ  │└────┴──────┴─────┴─────┘

6. 移动分区

该操作将 table_source表的数据分区移动到 table_dest表,并删除table_source表的数据。

  • 移动分区语法:
ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest
  • 示例:
#创建表 table_source ,table_dest, 两表结构相同,都是MergeTree引擎表node1 :) create table table_source (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;node1 :) create table table_dest (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;#向table_source 表中插入以下数据node1 :) insert into table_source values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');┌─id─┬─name─┬─age─┬─loc─┐│  1   │ 张三    │  18   │ BJ    ││  3   │ 王五    │  20   │ BJ    │└───┴────┴────┴────┘┌─id─┬─name─┬─age─┬─loc─┐│  2   │ 李四    │  19   │ GZ    ││  4   │ 马六    │  21   │ GZ    │└───┴────┴────┴────┘#向table_dest 表中插入以下数据:node1 :) insert into table_dest values (5,'田七',22,'BJ'),(6,'赵八',23,'GZ'),(7,'李九',24,'BJ'),(8,'郑十',25,'GZ');┌─id─┬─name─┬─age─┬─loc─┐│  5   │ 田七    │  22   │ BJ    ││  7   │ 李九    │  24   │ BJ    │└───┴────┴────┴────┘┌─id─┬─name─┬─age─┬─loc─┐│  6   │ 赵八   │  23   │  GZ    ││  8   │ 郑十   │  25   │ GZ     │└───┴────┴────┴────┘#将表 table_source 中的分区‘BJ’的数据移动到 table_dest表中node1 :) alter table table_source move partition 'BJ' to table table_dest;#查看表 table_source中的数据node1 :) select * from table_source;┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18 │ BJ  ││  3 │ 王五   │  20 │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  2  │ 李四  │  19 │ GZ  ││  4  │ 马六  │   21 │ GZ │└────┴──────┴─────┴─────┘#查看表 table_dest中的数据node1 :) select * from table_dest;┌─id─┬─name─┬─age─┬─loc─┐│  6  │ 赵八  │  23 │ GZ  ││  8  │ 郑十  │  25 │ GZ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  5  │ 田七  │  22 │ BJ  ││  7  │  李九 │  24 │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18 │ BJ  ││  3  │ 王五  │  20 │ BJ  │└────┴──────┴─────┴─────┘#手动执行 optimize 命令,合并table_dest相同分区数据node1 :) optimize table table_dest;#查询表 table_dest中的数据node1 :) select * from table_dest;┌─id─┬─name─┬─age─┬─loc─┐│  1  │ 张三  │  18 │ BJ  ││  3  │ 王五  │  20 │ BJ  ││  5  │ 田七  │  22 │ BJ  ││  7  │ 李九  │  24 │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  6  │ 赵八  │  23 │ GZ  ││  8  │ 郑十  │  25 │ GZ  │└────┴──────┴─────┴─────┘#查看 table_source 表中的数据,分区‘BJ’被删除。node1 :) select * from table_source;┌─id─┬─name─┬─age─┬─loc─┐│  2  │ 李四  │  19 │ GZ  ││  4  │ 马六  │  21 │ GZ  │└────┴──────┴─────┴─────┘

​​​​​​​​​​​​​​7. 重置分区列

重置指定分区的特定列的值,就是将指定分区下某列的数据清空,如果建表时使用了 DEFAULT 语句,该操作会将列的值重置为该默认值。

  • 重置分区列语法:
ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr
  • 示例:
#针对之前的表 table_dest中的数据进行操作,清空当前表中 ‘BJ’分区中name列node1 :) alter table table_dest clear column name in partition 'BJ';#查看表 table_dest中的数据node1 :) select * from table_dest;┌─id─┬─name─┬─age─┬─loc─┐│  1  │       │  18 │ BJ  ││  3  │       │  20 │ BJ  ││  5  │       │  22 │ BJ  ││  7  │       │  24 │ BJ  │└────┴──────┴─────┴─────┘┌─id─┬─name─┬─age─┬─loc─┐│  6  │ 赵八  │  23 │ GZ  ││  8  │ 郑十  │  25 │ GZ  │└────┴──────┴─────┴─────┘

👨‍💻如需博文中的资料请私信博主。


相关文章:

ClickHouse(二十):Clickhouse SQL DDL操作-2-分区表DDL操作

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…...

Springboot 在 redis 中使用 Guava 布隆过滤器机制

一、导入SpringBoot依赖 在pom.xml文件中&#xff0c;引入Spring Boot和Redis相关依赖 <!-- Google Guava 使用google的guava布隆过滤器实现--><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><vers…...

Docker本地镜像发布到阿里云

1. 本地镜像发布到阿里云 2. 镜像的生成方法 OPTIONS说明&#xff1a; -a :提交的镜像作者&#xff1b; -m :提交时的说明文字&#xff1b; 本次案例centosubuntu两个&#xff0c;当堂讲解一个&#xff0c;家庭作业一个&#xff0c;请大家务必动手&#xff0c;亲自实操。 docke…...

Postgresql源码(112)plpgsql执行sql时变量何时替换为值

相关 《Postgresql源码&#xff08;41&#xff09;plpgsql函数编译执行流程分析》 《Postgresql源码&#xff08;46&#xff09;plpgsql中的变量类型及对应关系》 《Postgresql源码&#xff08;49&#xff09;plpgsql函数编译执行流程分析总结》 《Postgresql源码&#xff08;5…...

OhemCrossEntropyLoss

1. Ohem Cross Entropy Loss 的定义 OhemCrossEntropyLoss 是一种用于深度学习中目标检测任务的损失函数&#xff0c;它是针对不平衡数据分布和困难样本训练的一种改进版本的交叉熵损失函数。Ohem 表示 “Online Hard Example Mining”&#xff0c;意为在线困难样本挖掘。在目…...

prometheusalert区分告警到不同钉钉群

方法一 修改告警规则 - alert: cpu使用率大于88%expr: instance:node_cpu_utilization:ratio * 100 > 88for: 5mlabels:severity: criticallevel: 3kind: CpuUsageannotations:summary: "cpu使用率大于85%"description: "主机 {{ $labels.hostname }} 的cp…...

AUTOSAR规范与ECU软件开发(实践篇)3.2 ETAS AUTOSAR系统解决方案介绍(上)

1、ETAS AUTOSAR系统解决方案介绍 博世集团ETAS公司基于其强大的研发实力为用户提供了一套高效、 可靠的AUTOSAR系统解决方案&#xff0c; 该方案覆盖了软件架构设计、 应用层模型设计、 基础软件开发、 软件虚拟验证等各个方面&#xff0c; 如图3.5所示&#xff0c; 其中深色…...

【leetcode】第三章 哈希表part02

454.四数相加II public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {HashMap<Integer,Integer> map new HashMap<>();// 统计频率for (int i 0; i < nums1.length; i) {for (int j 0; j < nums2.length; j) {int num nums1…...

【C语言】memset()函数

一.memset()函数简介 我们先来看一下cplusplus.com - The C Resources Network网站上memset()函数的基本信息&#xff1a; 1.函数功能 memset()函数的功能是:将一块内存空间的每个字节都设置为指定的值。 这个函数通常用于初始化一个内存空间&#xff0c;或者清空一个内存空间…...

C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine,也叫作“隐藏”)的区别?

在C中&#xff0c;允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义&#xff08;实现&#xff09;不相同。 …...

将非受信数据作为参数传入,可能引起xml 注入,引起数据覆盖,这个问题咋解决

目录 1 解决 1 解决 当将非受信数据作为参数传入时&#xff0c;确实存在XML注入&#xff08;XML Injection&#xff09;的风险&#xff0c;攻击者可以通过构造恶意的XML数据来修改XML文档结构或执行意外的操作。为了解决这个问题&#xff0c;你可以采取以下措施&#xff1a; 输…...

设计模式-简单工厂模式

简单工厂模式又称为静态工厂模式&#xff0c;其实就是根据传入参数创建对应具体类的实例并返回实例对象&#xff0c;这些类通常继承至同一个父类&#xff0c;该模式专门定义了一个类来负责创建其他类的实例。 using System.Collections; using System.Collections.Generic; us…...

Maven框架SpringBootWeb简单入门

一、Maven ★ Maven:是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:https://maven.apache.org/ ★ Maven的作用: 1. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。 2. 统一项目结构:提供标准、统一的项目结构。 …...

关于2023年8月19日PMP认证考试准考信下载通知

各位考生: 为保证参加2023年8月19日PMI项目管理资格认证考试的每位考生都能顺利进入考场参加考试&#xff0c;请完整阅读本通知内容。 一、关于准考信下载 为确保您顺利进入考场参加8月份考试&#xff0c;请及时登录本网站&#xff08;https://event.chinapmp.cn/&#xff09…...

html实现iphone同款开关

一、背景 想实现一个开关的按钮&#xff0c;来触发一些操作&#xff0c;网上找了总感觉看着别扭&#xff0c;忽然想到iphone的开关挺好&#xff0c;搞一个 二、代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&qu…...

使用Vue和jsmind如何实现思维导图的历史版本控制和撤销/重做功能?

思维导图是一种流行的知识图谱工具&#xff0c;可以帮助我们更好地组织和理解复杂的思维关系。在开发基于Vue的思维导图应用时&#xff0c;实现历史版本控制和撤销/重做功能是非常有用的。以下为您介绍如何使用Vue和jsmind插件来实现这些功能。 安装依赖 首先&#xff0c;我们…...

【Vue-Router】路由元信息

路由元信息&#xff08;Route Meta Information&#xff09;是在路由配置中为每个路由定义的一组自定义数据。这些数据可以包含任何你希望在路由中传递和使用的信息&#xff0c;比如权限、页面标题、布局设置等。Vue Router 允许你在路由配置中定义元信息&#xff0c;然后在组件…...

vue 控件的四个角设置 父视图position:relative

父视图relative&#xff0c;子视图 absolute <div class"bg1"> <i class"topL"></i> <i class"topR"></i> <i class"bottomL"></i> <i class"bottomR"></i> <di…...

VM中linux虚拟机配置桥接模式(虚拟机与宿主机网络互通)

VM虚拟机配置桥接模式&#xff0c;可以让虚拟机和物理主机一样存在于局域网中&#xff0c;可以和主机相通&#xff0c;和互联网相通&#xff0c;和局域网中其它主机相通。 vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&…...

7.Eclipse中改变编码方式及解决部分乱码问题

1、改变整个工作空间的编码方式&#xff1a; 点击Window->Preference->General->workplace&#xff0c;然后选择默认编码方式 2、改变某个项目的编码方式&#xff1a; 右键点击项目名->Properties>Resource&#xff0c;然后选择默认编码方式。 问题&#xff…...

性价比高的国产PLM软件公司

在制造业领域&#xff0c;不少企业都面临着研发效率低下、协同困难等问题。比如某电子制造企业&#xff0c;研发部门与生产部门之间信息沟通不畅&#xff0c;图纸版本管理混乱&#xff0c;导致产品研发周期延长&#xff0c;生产成本增加&#xff0c;新品上市时间比预期晚了近30…...

Mythos骨架式推理:企业级AI能力治理与因果建模新范式

1. 项目概述&#xff1a;一次被刻意“锁住”的能力跃迁如果你最近关注大模型前沿动态&#xff0c;大概率已经看到“Anthropic Mythos”这个词在技术圈悄然升温。它不是某个新发布的开源模型&#xff0c;也不是某家创业公司的秘密武器&#xff0c;而是Anthropic内部代号为Mythos…...

Wireshark深度解析:HTTP/1.1协议层隐写与pcapng元数据取证

1. 这不是一次普通的数据包分析&#xff0c;而是一场“协议层藏宝游戏”Wireshark实战&#xff1a;解密http1.pcapng中的隐藏flag——光看标题&#xff0c;你可能以为这只是又一篇教你怎么点开Filter框、输http然后截图的入门教程。但实际操作中&#xff0c;我连续三次在http1.…...

JMeter接口测试实战:从登录闭环到分布式压测

1. 为什么接口测试不能只靠“点点点”——从一个被忽略的500错误说起我第一次在客户现场接手一个电商后台系统时&#xff0c;开发说“所有接口都测过了&#xff0c;Postman跑了一遍&#xff0c;没问题”。上线前夜&#xff0c;支付回调接口突然返回500&#xff0c;日志里只有一…...

【限时开放】ElevenLabs波斯文语音调试秘钥包(含Persian SSML扩展标签库、RTL音频波形对齐工具、实时音素诊断CLI):仅支持至2024年Q3 API v2退役前

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs波斯文语音支持的演进与技术边界 ElevenLabs自2022年推出多语言TTS服务以来&#xff0c;波斯文&#xff08;Farsi&#xff09;长期处于实验性支持阶段。早期版本仅能通过自定义音色音素级微调…...

干货合集:2026最新AI论文软件测评与推荐大全

2026年真正好用的AI论文软件&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

梳理尼日利亚外贸典型骗局分享高效避雷方法

与尼日利亚客户交易须防范D/P条款陷阱&#xff0c;信用证务必经第三国银行保兑&#xff0c;警惕提单信息泄露&#xff0c;掌握风控要点方能安全拓展西非市场。拒绝D/P托收条款切勿接受D/P付款方式。尼日利亚部分银行可能与客户勾结&#xff0c;在买方未付货款的情况下擅自放行提…...

百度网盘全自动化实录:Hermes Agent + bb-browser

缘起&#xff1a;今天风暴了一下&#xff0c;准备实践一下Hermes自动售卖数字产品实现自动变现的MVP&#xff0c;谁知道刚开始就卡在了操作百度网盘&#xff0c;要么被反爬&#xff0c;要么靠之前开发的computer use for win截图点坐标像瞎子摸象。最后换了条路——用 bb-brows…...

Cadence 17.4 CIS配置踩坑实录:MySQL元件数据库连接失败与中文乱码全解决

Cadence 17.4 CIS配置实战&#xff1a;MySQL元件数据库连接与中文乱码终极解决方案 当工程师尝试将Cadence CIS与MySQL数据库集成时&#xff0c;往往会遇到两个令人头疼的问题&#xff1a;连接失败和中文乱码。这两个问题看似简单&#xff0c;却可能耗费大量调试时间。本文将深…...

为什么越来越多的程序员纷纷转行网络安全?拆解背后的4大核心逻辑

引言&#xff1a;从 “代码搬运” 到 “安全守护”&#xff0c;程序员转行的新趋势 打开招聘平台不难发现一个现象&#xff1a;越来越多标注 “5 年 Java 开发”“3 年前端工程师” 的简历&#xff0c;在技能栏里新增了 “渗透测试”“代码审计”“漏洞挖掘” 等关键词&#x…...