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

HBase架构篇 - Hadoop家族的天之骄子HBase

HBase的基本组成结构

在这里插入图片描述

表(table)

HBase 的数据存储在表中。表名是一个字符串。表由行和列组成。

行(row)

HBase 的行由行键(rowkey)和 n 个列(column)组成。行键没有数据类型,可以看作是字节数组,类似于关系型数据库的主键索引,在整个 HBase 表中是唯一的,按照字母顺序排序。

列族(column family)

HBase 的列族由多个列组成,相当于将列进行分组。列的数量没有限制。表中的每一行都有同样的列族。列族必须在表创建的时候指定,不能轻易修改,并且数量不能太多,一般不超过 3 个。列族名的类型是字符串。

列限定符(qualifier)

列限定符用于代表 HBase 表中列的名称,列族中的数据通过列限定符来定位,常见的定位格式为 “family:qualifier”(比如定位列族 cf1 的列 name,则使用 cf1:name)。一个列族下面可以有多个列限定符。列限定符没有数据类型,可以看作是字节数组。

单元格(cell)

单元格通过行键、列族、列限定符一起来定位。单元格包括值和时间戳。值没有数据类型,总是视为字节数组。时间戳代表该值的版本,类型为 long。默认,时间戳表示数据写入服务器的时间,但是当数据放入单元格时,也可以指定不同的时间戳。每个单元格都根据时间戳保存着同一份数据的多个版本,并且按照降序排列,即最新的数据排在前面。对单元格中的数据进行访问的时候会默认读取最新值。

{"00001": {				                    // 行键"info": {			                    // 列族"username": {	                    // 列限定符												"15335401223674": "zhangsan"	// 时间戳:列值				 },																						 "password": {						   -----"1533540265719": "hello",				|"1533540102020": "123"					| --> 单元格}									    -----}}
}

HBase的架构设计

HMaster

HMaster 节点可以有多个。通过 ZooKeeper 的选举机制保证同一时刻只有一个 HMaster 节点处于活动状态,其它 HMaster 节点处于备用状态。

HMaster 节点的特点如下:

  • HMaster 节点本身不存储 HBase 的任何数据。它主要用于管理 HRegionServer 节点,指定 HRegionServer 节点可以管理哪些 HRegion,以实现其负载均衡。
  • 当某个 HRegionServer 节点宕机时,HMaster 会将其中的 HRegion 迁移到其它的 HRegionServer 上。
  • 管理用户对表的增删改查操作。
  • 管理表的元数据(每个 HRegion 都有一个唯一标识符,元数据主要保存这个唯一标识符与 HRegionServer 的映射关系)。
  • 权限管理。

HRegion、HRegionServer

HBase 通过 rowkey 自动将表水平切分成多个区域,这个区域称为 HRegion。每个 HRegion 由表中的多行数据组成。

最初一个表只有一个 HRegion,随着数据的增多,当数据大到一定的值后,便会在某行的边界上将表分割成两个大小基本相同的HRegion。然后由 HMaster 节点将不同的 HRegion 分配到不同的 HRegionServer 节点上,由 HRegionServer 节点对其进行管理以及响应客户端的读写请求。换言之,分布在集群中的所有 HRegion 按序排列就组成了一张完整的表。

每个 HRegion 记录了 rowkey 的起始行键(startkey)、结束行键(endkey)。第一个 HRegion 的 startkey 为空,最后一个 HRegion 的 endkey 为空。客户端可以通过 HMaster 节点快速定位每个 rowkey 所在的 HRegion。

在这里插入图片描述

Store

一个 Store 存储 HBase 表的一个列族的数据。由于表被水平分割成多个 HRegion,那么一个 HRegion 中包含一个或者多个 Store。Store 包含一个 MemStore 和多个 HFile 文件。MemStore 相当于一个内存缓冲区,数据存入磁盘之前先存入 MemStore 中。当 MemStore 中的数据大小达到一定值后,会生成一个 HFile 文件,MemStore 中的数据会转移到 HFile 文件中。StoreFile 是对 HFile 文件的封装,HFile 是 HBase 底层的数据存储格式,最终数据以 HFile 的格式存储在 HDFS 中。

值得注意的是,一个HFile 文件只存放某个时刻 MemStore 中的所有数据,一个完整的行数据可能存放于多个 HFile 中。

HLog

HLog 是 HBase 的日志文件,存储于 HDFS 中,用于记录数据的写操作。HBase 在写入数据时会先进行 WAL(预写日志)操作,即将写操作写入到 HLog 文件中,才会将数据写入 Store 的 MemStore 中,只有这两个地方都写入并且确认后,才认为数据写入成功。

ZooKeeper

每个 HRegionServer 节点会在 ZooKeeper 中注册一个自己的临时节点,HMaster 通过这些临时节点发现可用的 HRegionServer 节点,跟踪 HRegionServer 节点的故障等。

HBase 利用 ZooKeeper 确保只有一个活动的 HMaster 节点在运行。

HRegion 应该分配到哪个 HRegionServer 节点上,也是通过 ZooKeeper 得知的。

客户端操作

创建表

public class CreateTableDemo {public static void main(String[] args) throws IOException {Configuration configuration = HBaseConfiguration.create();// 指定ZooKeeper集群地址configuration.set("hbase.zookeeper.quorum", "10.211.55.6:2181,10.211.55.7:2181,10.211.55.8:2181");Connection connection = ConnectionFactory.createConnection(configuration);Admin admin = connection.getAdmin();TableName tableName = TableName.valueOf("t_order3");// 创建表描述HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);// 创建列描述HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("f1");// 添加列族hTableDescriptor.addFamily(hColumnDescriptor);// 创建表admin.createTable(hTableDescriptor);}
}

接下来进入 HBase shell 命令行模式,执行 list 命令查看当前所有表。

TABLE                                                                           
t_order                                                                         
t_order2                                                                        
t_order3                                                                        
3 row(s)
Took 0.0261 seconds                                                             
=> ["t_order", "t_order2", "t_order3"]

可见,t_order3 表已经创建成功了。

此外也可以执行 create 命令创建表。create 命令指定表名、列族。

hbase:004:0> create 't_order4', 'f1'
Created table t_order4
Took 1.3553 seconds                                                             
=> Hbase::Table - t_order4

添加数据

public class AddDataDemo {public static void main(String[] args) throws IOException {Configuration configuration = HBaseConfiguration.create();configuration.set("hbase.zookeeper.quorum", "10.211.55.6:2181,10.211.55.7:2181,10.211.55.8:2181");Connection connection = ConnectionFactory.createConnection(configuration);TableName tableName = TableName.valueOf("t_order2");Table table = connection.getTable(tableName);// 设置行键Put put = new Put(Bytes.toBytes("row1"));// 添加列族、列名、列值put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("zhangsan2"));put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("20"));put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("beijing"));table.put(put);// 设置行键Put put2 = new Put(Bytes.toBytes("row2"));// 添加列族、列名、列值put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("lisi"));put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes("25"));put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), Bytes.toBytes("shanghai"));table.put(put2);// 释放资源table.close();}
}

接下来进入 HBase shell 命令行模式,执行 scan 命令扫描 t_order2 表的所有数据。

hbase:006:0> scan 't_order2'
ROW                   COLUMN+CELL                                               
row1                  column=f1:address, timestamp=2023-04-15T21:37:23.457, value=shanghai                                                
row1                  column=f1:age, timestamp=2023-04-15T21:37:23.457, value=25
row1                  column=f1:name, timestamp=2023-04-15T21:37:23.457, value=lisi                                                       
row2                  column=f1:age, timestamp=2023-04-15T21:16:46.128, value=22
row2                  column=f1:name, timestamp=2023-04-15T21:16:35.289, value=wangwu                                                     
2 row(s)
Took 0.0699 seconds    

可以使用 put 命令添加数据。put 命令可以指定表名、行键、列族:列名、列值。

hbase:007:0> put 't_order2', 'row2', 'f1:name', 'wangwu'
Took 0.1126 seconds                                                             
hbase:008:0> put 't_order2', 'row2', 'f1:age', '22'
Took 0.0868 seconds     

修改数据

与添加数据的方式相同。

删除数据

public class DeleteDataDemo {public static void main(String[] args) throws IOException {Configuration configuration = HBaseConfiguration.create();configuration.set("hbase.zookeeper.quorum", "10.211.55.6:2181,10.211.55.7:2181,10.211.55.8:2181");Connection connection = ConnectionFactory.createConnection(configuration);// 指定表名TableName tableName = TableName.valueOf("t_order2");Table table = connection.getTable(tableName);// 指定行键Delete delete = new Delete(Bytes.toBytes("row2"));table.delete(delete);table.close();}
}

可以执行 delete 命令删除指定单元格。delete 命令可以指定表名、行键、列族:列名。

hbase:009:0> delete 't_order2', 'row1', 'f1:address'
Took 0.0834 seconds 

可以执行 deleteall 命令删除一整行数据。delete 命令可以指定表名、行键。

hbase:010:0> deleteall 't_order2', 'row1'
Took 0.0370 seconds    

可以执行 disabledrop 命令删除一张表。disable 命令禁用表,可以指定表名;drop 命令删除表,可以指定表名。

hbase:010:0> disable 't_order2'
Took 0.0375 seconds    
hbase:010:0> drop 't_order2'
Took 0.0375 seconds    

查询数据

public class QueryDataDemo {public static void main(String[] args) throws IOException {Configuration configuration = HBaseConfiguration.create();configuration.set("hbase.zookeeper.quorum", "10.211.55.6:2181,10.211.55.7:2181,10.211.55.8:2181");Connection connection = ConnectionFactory.createConnection(configuration);// 指定表名TableName tableName = TableName.valueOf("t_order2");Table table = connection.getTable(tableName);// 指定行键Get get = new Get(Bytes.toBytes("row1"));Result result = table.get(get);for (Cell cell : result.rawCells()) {// 获取列族String family = new String(CellUtil.cloneFamily(cell));// 获取列名String qualifier = new String(CellUtil.cloneQualifier(cell));// 获取列值String value = new String(CellUtil.cloneValue(cell));System.out.println("列:" + family + ":" + qualifier + "---值:" + value);}}
}

接下来进入 HBase shell 命令行模式,执行 get 命令查询一整行数据。get 命令可以指定表名、行键。

hbase:011:0> get 't_order2', 'row1'
COLUMN                CELL                                                      f1:address           timestamp=2023-04-15T21:10:16.950, value=shanghai         f1:age               timestamp=2023-04-15T21:10:16.950, value=25               f1:name              timestamp=2023-04-15T21:10:16.950, value=lisi             
1 row(s)
Took 0.0684 seconds  

可以执行 count 命令获取表的记录数。count 命令可以指定表名。

hbase:001:0> count 't_order2'
2 row(s)
Took 0.5480 seconds                                                             
=> 2

可以执行 exists 命令查看表是否存在。exists 命令可以指定表名。

hbase:008:0> exists 't_order2'
Table t_order2 does exist                                                       
Took 0.2278 seconds                                                             
=> true

相关文章:

HBase架构篇 - Hadoop家族的天之骄子HBase

HBase的基本组成结构 表(table) HBase 的数据存储在表中。表名是一个字符串。表由行和列组成。 行(row) HBase 的行由行键(rowkey)和 n 个列(column)组成。行键没有数据类型&…...

STL及常用容器vector、list和deque的介绍

vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取,即[]操作符,即可以以数组下标的方式来访问或遍历。但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需…...

SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)

统⼀⽤户登录权限验证 1、最初的用户登录效验:在每个方法里面获取session和 session 中的用户信息,如果存在用户,那么就认为登录成功了,否则就登录失败了。 2、第二版用户登录效验:提供了统一的方法,在每个需要验证的方法中调用…...

华为实习笔试复盘(1)配送站和客户问题

写在前面 自己玩了很多项目,但是最近准备秋招的过程中,发现自己对于算法和编程语言的基本功夫实在是太欠缺了。 投递了华为的实习岗位,4.26参加机考,一做题就发现了自己很多地方都不会。这里写下笔试后的复盘以警醒自己。 题目 …...

alibaba yalantingLibs struct_pack代码梳理

这里写目录标题 struct_pack 接口序列化序列化对象到新字节容器序列化对象到容器尾部将序列化结果保存到指针指向的内存中多参数序列化将序列化结果保存到输出流自定义类型序列化序列化到自定义的输出流 反序列化基本反序列化从指针指向的内存中反序列化反序列化到已有对象多参…...

JavaWeb( 二 ) URL

1.4.URL统一资源定位符 URL代表Uniform Resource Locator 统一资源定位符,也叫 URL地址 。是用于标识和定位Web上资源的地址,通常用于在Web浏览器中访问网站和文件。 URL由若干部分组成,scheme:// host : port / path 例如: htt…...

Python斐波那契数列

斐波那契数列是一个经典的数学问题&#xff0c;在 Python 中可以使用多种方法来实现&#xff0c;下面是几个常见的实现方式&#xff1a; 1. 使用递归 python def fibonacci_recursive(n): if n < 1: return n else: return fibonacci_recursive(n…...

华为OD机试 - 模拟商场优惠打折(Python)

题目描述 模拟商场优惠打折,有三种优惠券可以用,满减券、打折券和无门槛券。 满减券:满100减10,满200减20,满300减30,满400减40,以此类推不限制使用; 打折券:固定折扣92折,且打折之后向下取整,每次购物只能用1次; 无门槛券:一张券减5元,没有使用限制。 每个人…...

【JAVA程序设计】(C00132)基于SSM的固定资产管理系统

基于SSM的固定资产管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统为基于SSM的固定资产管理系统&#xff0c;本系统分为二种用户&#xff1a;超级管理员和普通管理员&#xff1b; 超级管理员功能&#xff1a; 首页查看、设备管理、平台账户管理、设备台账…...

简单的无理函数的不定积分

前置知识&#xff1a; 直接积分法有理函数的不定积分 简单的无理函数的不定积分 对无理函数积分的基本方法就是通过换元将其化为有理函数的积分。下面讲讲几类无理函数积分的求法。 注&#xff1a; R ( u , v ) R(u,v) R(u,v)是由 u , v u,v u,v与常数经过有限次四则运算得…...

《国际联网安全保护管理办法》

1.基本信息 &#xff08;1997年12月11日国务院批准 1997年12月16日公安部令第33号发布 根据2011年1月8日《国务院关于废止和修改部分行政法规的决定》修订&#xff09; 2.办法内容 第一章 总 则 第一条为了加强对计算机信息网络国际联网的安全保护&#xff0c;维护公共…...

Redis常用命令

目录 一. 字符串string常用操作命令 二. 哈希hash常用操作命令 三. 列表list常用操作命令 四. 集合set常用操作命令 五. 有序集合sorted set常用操作命令 六. 通用命令 一. 字符串string常用操作命令 SET key value 设置指定key的值GET key 获取指定key的值 SETEX key…...

功能齐全的 DIY ESP32 智能手表设计之原理图讲解二

相关设计资料下载ESP32 智能手表带心率、指南针设计资料(包含Arduino源码+原理图+Gerber+3D文件).zip 目录 构建 ESP32 智能手表所需的组件 光照度传感器电路讲解...

烦恼的高考志愿

烦恼的高考志愿 题目背景 计算机竞赛小组的神牛 V 神终于结束了高考&#xff0c;然而作为班长的他还不能闲下来&#xff0c;班主任老 t 给了他一个艰巨的任务&#xff1a;帮同学找出最合理的大学填报方案。可是 v 神太忙了&#xff0c;身后还有一群小姑娘等着和他约会&#x…...

【地铁上的设计模式】--结构型模式:适配器模式

前面几篇文章我们学习了创建型模式&#xff0c;从本篇文章开始&#xff0c;我们将学习结构型模式。 什么是结构型模式 结构型模式是一种设计模式&#xff0c;它描述了如何将类或对象结合在一起形成更大的结构&#xff0c;以提供新的功能或实现更复杂的行为。结构型模式包括以…...

重大剧透:你不用ChatGPT,它砸你饭碗

早晨看到路透社报道&#xff0c;盖茨说&#xff0c;与其争论技术的未来&#xff0c;不如专注于如何更好地利用人工智能。 这可能是他对马斯克他们呼吁暂停AI研发6个月的一种回应吧。 有种古语说&#xff1a;天下大势&#xff0c;浩浩汤汤&#xff0c;顺之者昌&#xff0c;逆之者…...

状态机模式

状态模式 状态模式定义:使用场景角色定义1. State一抽象状态角色2. ConcreteState一-具体状态角色3. Context--环境角色 需求背景1. 订单状态抽象类2. 定义订单具体状态类并集成基类&#xff08;抽象类&#xff09;2.1 订单创建状态2.2 订单已支付状态2.3 订单已发货状态2.4 订…...

瑞吉外卖:后台系统登录功能

文章目录 需求分析代码开发创建实体类导入返回结果类Rcontroller、service与mapperlogin.html 需求分析 点击登录按钮后&#xff0c;浏览器以POST方式向employee/login提交username和password&#xff0c;服务器经过处理后向浏览器返回某种格式的数据&#xff0c;其中包含&…...

Linux拓展:链接库

一.说明 本篇博客介绍Linux操作系统下的链接库相关知识&#xff0c;由于相关概念已在Windows下链接库一文中介绍&#xff0c;本篇博客直接上操作。 二.静态链接库的创建和使用 1.提前看 这里主要介绍的是C语言的链接库技术&#xff0c;而在Linux下实现C语言程序&#xff0c…...

基于.Net开发的、支持多平台、多语言餐厅点餐系统

今天给大家推荐一套支持多平台、多语言版本的订单系统&#xff0c;适合餐厅、酒店等场景。 项目简介 这是基于.Net Framework开发的&#xff0c;支持手机、平板、PC等平台、多语言版本开源的点餐系统&#xff0c;非常适合餐厅、便利店、超市、酒店等&#xff0c;该系统基础功…...

Windows系统SSL/TLS安全协议介绍

支持安全加密的https底层使用的就是SSL/TLS,在发起https请求之前需要先建立TCP连接,之后再进行SSL/TLS协议协商,协商通过后才能发起https请求。本文将详细介绍SSL/TLS协议相关的内容。 之前在项目中就出现过客户端SSL/TLS版本过低,导致向服务器发起连接时被服务器拒绝的问题…...

ovs-vsctl 命令详解

ovs-vsctl 命令详解 网桥Bridge 创建 Bridge ovs-vsctl add-br br0 删除 Bridge ovs-vsctl del-br br0 列出 Bridge ovs-vsctl list-br 显示详情 ovs-vsctl show 端口 Port 添加端口 ovs-vsctl add-port br0 p1 其中br0 为上面添加的bridge p1可以是物理端口或者vN…...

具备“记忆”功能的VBA目录选择器

大家使用任意一款浏览器&#xff08;例如&#xff1a;Chrome、Edge&#xff09;下载文件时&#xff0c;如果【另存为】对话框选择C:\Download&#xff0c;那么下次再次使用【另存为】功能&#xff0c;对话框默认显示C:\Download&#xff0c;而不是根目录。 在VBA开发中调用目录…...

electron入门 | 手把手带electron项目初始化

Electron是一个基于Chromium和 Node.js&#xff0c;可以使用 HTML、CSS和JavaScript构建跨平台应用的技术框架&#xff0c;兼容 Mac、Windows 和 Linux。 目录 1.了解electron 2.开发环境 3.初始化 采坑插曲&#xff1a; 1.了解electron Electron 可以让你使用纯 JavaScrip…...

​力扣解法汇总2423. 删除字符使频率相同

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个下标从 0 开始的字符串 word &#xff0c;字符串只包含小写英文字母。你…...

【超算/先进计算学习】日报8

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记阶段一阶段二阶段三阶段四 对自己的表现是否满意简述下次计划其他反馈 今日已完成任务列表 超算/高性能计算总结 遇到的问题及解决方案 无 任务完成详细笔记 阶段一 在学习的第一阶段&#xff0c;我们首先对需要…...

《LearnUE——基础指南:上篇—2》——GamePlay架构之Level和World

目录 听说世界是由多个Level组成的 1.2.1 引言 1.2.2 建造大陆&#xff08;ULevel&#xff09; 1.2.3构建世界&#xff08;World&#xff09; 1.2.4总结 听说世界是由多个Level组成的 1.2.1 引言 上小节谈到Actor和Component的关系&#xff0c;UE利用Actor的概念组成了世…...

IDEA部署tomcat项目

文章目录 只是部署一下看到这里即可war和war exploded的区别warwar exploded update的动作update resourcesupdate classes and resourcesredeployrestart server 解决了拿到了一个tomcat项目后如何将它部署到IDEA里面的问题。 file->open 选中pom.xml并open as project …...

IAM角色

Identity-based policy&#xff0c;它关联到特定的User/Role/Group上&#xff0c;指定这些主体能对哪些资源进行怎样的操作 Resource-based policy&#xff0c;它关联到具体的AWS资源上&#xff0c;指定哪些主体可以对这个资源做怎样的操作 aws受信任关系视为aws服务可以实现&a…...

【VAR | 时间序列】以美国 GDP 和通货膨胀数据为例的VAR模型简单实战(含Python源代码)

以美国 GDP 和通货膨胀数据为例&#xff1a; 1. 数据集 下载数据我们需要从 FRED 数据库下载美国 GDP 和通货膨胀数据&#xff0c;并将它们存储在 CSV 文件中。可以在 FRED 网站&#xff08;https://fred.stlouisfed.org/&#xff09;搜索并下载需要的数据。在这里&#xff0…...

在58做网站推广有用没/洛阳seo网站

cisco(思科)两个不同网段相连接 喜欢的朋友可以点个赞关注哦 拓扑图分析&#xff1a; 1.实验所需&#xff1a; 四台电脑、一个DHCP服务器、两个交换机、一个路由器。 2.实验分析&#xff1a; 1&#xff09;.实验分成两个网段。 第一个网段&#xff1a;192.168.2.0 第二个…...

百度网站名称和网址/正规引流推广公司

源&#xff1a;Basic脚本解释器移植到STM32转载于:https://www.cnblogs.com/LittleTiger/p/7639063.html...

如何做网站的301重定向/新东方雅思培训机构官网

本例介绍《vue.js实战》第五章最后的购物车练习一, 练习1:在当前示例基础上扩展商品列表,新增一项是否选中该商品的功能,总价变为只选中商品的总价,同时提供一个全选按钮 截图如下: html: <div id"app" v-cloak><template v-if"list.length">…...

用自己的名字做网站域名/南昌关键词优化软件

记录今天遇到的一个小问题&#xff1a; AtomicInteger atomicInteger new AtomicInteger();System.out.println(atomicInteger.getAndIncrement()); 大家可以先猜想一下这个输出的是几&#xff0c;我之前一直以为是1&#xff0c;但是今天发现好像并不是。它是0。 public fina…...

淄博高端网站建设/免费网页空间到哪申请

支付宝刚刚在官方微博上发表了一份致 236 位用户的道歉信&#xff0c;信中表示&#xff0c;在 7 月 26 日&#xff0c;“我们干了一件比较傻逼的事儿”&#xff0c;误向 236 位用户发送了中奖短信&#xff0c;为了弥补过错&#xff0c;支付宝将错就错&#xff0c;会负起责任向这…...

濮阳免费网站建设/互联网营销具体做什么

SqlServer2005在表上按右键&#xff0c;dao打开du表&#xff0c;来编辑&#xff0c;这种情况zhi下的dao数据默认情况下是全部&#xff0c;不是你版想要的结果&#xff0c;你在工具栏权上点一个sql的小图标&#xff0c;会变成sql&#xff0c;修改成你的sql&#xff0c;然后执行&…...