Hive中的DDL操作

news2024/10/9 12:31:36

文章目录

  • Hive中的DDL操作
    • 一、数据库(database)相关操作
      • 1. 创建数据库
        • 1)语法
        • 2)案例
      • 2. 查询数据库
        • 1)展示所有数据库
        • 2)查看数据库信息
      • 3. 修改数据库
        • 1)语法
        • 2)案例
      • 4. 删除数据库
        • 1)语法
        • 2)案例
      • 5. 切换当前数据库
        • 1)语法
        • 2)案例
    • 二、表(table)相关操作
      • 1. 创建表
        • 1.1 语法
          • 1)普通建表
          • 2)Create Table As Select(CTAS)建表
          • 3)Create Table Like语法
        • 1.2 案例
          • 1)内部表与外部表
          • 2)SERDE和复杂数据类型
          • 3)create table as select和create table like
      • 2. 查看表
        • 1)展示所有表
        • 2)查看表信息
      • 3. 修改表
        • 1)重命名表
        • 2)修改列信息
        • 3)案例
      • 4. 删除表
        • 1)语法
        • 2)案例
      • 5. 清空表
        • 1)语法
        • 2)案例

Hive中的DDL操作

DDL(Data Definition Language)语句: 数据定义语言,主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。常用的语句关键字有 CREATE、DROP、ALTER 等。

对有SQL基础的朋友来说,内容相对简单。

一、数据库(database)相关操作

1. 创建数据库

1)语法

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

2)案例

(1)创建一个数据库,不指定路径

create database db_hive1;

image-20230608092825613

注:若不指定路径,其默认路径为${hive.metastore.warehouse.dir}/database_name.db

image-20230608093048940

(2)创建一个数据库,指定路径

create database db_hive2 location '/db_hive2';

image-20230608093133895

查看数据库所在位置:

image-20230403081636565

(3)创建一个数据库,带有dbproperties

create database db_hive3 with dbproperties('create_date'='2022-11-18');

image-20230403081910823

查看数据库:

image-20230608093536066

2. 查询数据库

1)展示所有数据库

(1)语法

SHOW DATABASES [LIKE 'identifier_with_wildcards'];

注:like通配表达式说明:*表示任意个任意字符,|表示或的关系。

(2)案例

查询所有数据库:

show databases;

image-20230608093639972

查询所有带有db_hive前缀的数据库:

show databases like 'db_hive*';

image-20230608094627034

2)查看数据库信息

(1)语法

DESCRIBE DATABASE [EXTENDED] db_name;

(2)案例

①查看基本信息

desc database db_hive3;

image-20230608094719429

②查看更多信息

desc database extended db_hive3;

image-20230608094750701

extended表示是否展示更为详尽的信息。

3. 修改数据库

用户可以使用alter database命令修改数据库某些信息,其中能够修改的信息包括dbproperties、location、owner user。

需要注意的是:修改数据库location,不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录

1)语法

--修改dbproperties
ALTER DATABASE database_name SET DBPROPERTIES (property_name=property_value, ...);

--修改location
ALTER DATABASE database_name SET LOCATION hdfs_path;

--修改owner user
ALTER DATABASE database_name SET OWNER USER user_name;

2)案例

(1)修改dbproperties

ALTER DATABASE db_hive3 SET DBPROPERTIES ('create_date'='2022-11-20');

image-20230608095411504

4. 删除数据库

1)语法

DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

注:

  • RESTRICT:严格模式,若数据库不为空,则会删除失败,默认为该模式。
  • CASCADE:级联模式,若数据库不为空,则会将库中的表一并删除。

2)案例

(1)删除空数据库

drop database db_hive2;

image-20230608095642844

(2)删除非空数据库

drop database db_hive3 cascade;

image-20230608095711726

5. 切换当前数据库

1)语法

USE database_name;

2)案例

切换到db_hive1:

use db_hive1;

image-20230608095836039

二、表(table)相关操作

1. 创建表

1.1 语法

1)普通建表

(1)完整语法

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name   
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]

[ROW FORMAT row_format] 
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

(2)关键字说明:

①TEMPORARY

临时表,该表只在当前会话可见,会话结束,表会被删除。

②EXTERNAL(重点)

外部表,与之相对应的是内部表(管理表)。管理表意味着Hive会完全接管该表,包括元数据和HDFS中的数据。而外部表则意味着Hive只接管元数据,而不完全接管HDFS中的数据。

③data_type(重点)

Hive中的字段类型可分为基本数据类型和复杂数据类型。

基本数据类型如下:

Hive说明定义
tinyint1byte有符号整数
smallint2byte有符号整数
int4byte有符号整数
bigint8byte有符号整数
boolean布尔类型,true或者false
float单精度浮点数
double双精度浮点数
decimal十进制精准数字类型decimal(16,2)
varchar字符序列,需指定最大长度,最大长度的范围是[1,65535]varchar(32)
string字符串,无需指定最大长度
timestamp时间类型
binary二进制数据

复杂数据类型如下:

类型说明定义取值
array数组是一组相同类型的值的集合arrayarr[0]
mapmap是一组相同类型的键-值对集合map<string, int>map[‘key’]
struct结构体由多个属性组成,每个属性都有自己的属性名和数据类型struct<id:int, name:string>struct.id

注:类型转换

Hive的基本数据类型可以做类型转换,转换的方式包括隐式转换以及显示转换。

方式一:隐式转换

具体规则如下:

a. 任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。

b. 所有整数类型、float和string类型都可以隐式地转换成double。

c. tinyint、smallint、int都可以转换为float。

d. boolean类型不可以转换为任何其它的类型。

详情可参考Hive官方说明:Allowed Implicit Conversions

方式二:显示转换

可以借助cast函数完成显示的类型转换

a.语法

cast(expr as <type>)

b.案例

select '1' + 2, cast('1' as int) + 2;

image-20230608100049221

④PARTITIONED BY(重点)
创建分区表

⑤CLUSTERED BY … SORTED BY…INTO … BUCKETS(重点)
创建分桶表

⑥ROW FORMAT(重点)

指定SERDE,SERDE是Serializer and Deserializer的简写。Hive使用SERDE序列化和反序列化每行数据。详情可参考 Hive-Serde。语法说明如下:

语法一:DELIMITED关键字表示对文件中的每个字段按照特定分割符进行分割,其会使用默认的SERDE对每行数据进行序列化和反序列化。

ROW FORAMT DELIMITED 
[FIELDS TERMINATED BY char] 
[COLLECTION ITEMS TERMINATED BY char] 
[MAP KEYS TERMINATED BY char] 
[LINES TERMINATED BY char] 
[NULL DEFINED AS char]

注:

  • fields terminated by :列分隔符
  • collection items terminated by : map、struct和array中每个元素之间的分隔符
  • map keys terminated by :map中的key与value的分隔符
  • lines terminated by :行分隔符

语法二:SERDE关键字可用于指定其他内置的SERDE或者用户自定义的SERDE。例如JSON SERDE,可用于处理JSON字符串。

ROW FORMAT SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value,property_name=property_value, ...)]

⑦STORED AS(重点)

指定文件格式,常用的文件格式有,textfile(默认值),sequence file,orc file、parquet file等等。

⑧LOCATION

指定表所对应的HDFS路径,若不指定路径,其默认值为

${hive.metastore.warehouse.dir}/db_name.db/table_name

⑨TBLPROPERTIES
用于配置表的一些KV键值对参数

2)Create Table As Select(CTAS)建表

该语法允许用户利用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且保证包含select查询语句放回的内容。

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name 
[COMMENT table_comment] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]
3)Create Table Like语法

该语法允许用户复刻一张已经存在的表结构,与上述的CTAS语法不同,该语法创建出来的表中不包含数据。

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[LIKE exist_table_name]
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

1.2 案例

1)内部表与外部表

(1)内部表

Hive中默认创建的表都是的内部表,有时也被称为管理表。对于内部表,Hive会完全管理表的元数据和数据文件。

创建内部表如下:

create table if not exists student(
    id int, 
    name string
)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/student';

image-20230608101254863

准备其需要的文件如下,注意字段之间的分隔符。

vim /opt/module/datas/student.txt

数据内容如下:

1001	student1
1002	student2
1003	student3
1004	student4
1005	student5
1006	student6
1007	student7
1008	student8
1009	student9
1010	student10
1011	student11
1012	student12
1013	student13
1014	student14
1015	student15
1016	student16

上传文件到Hive表指定的路径

hadoop fs -put student.txt /user/hive/warehouse/student

查看表,发现数据已经导入表中:

select * from student;

image-20230608101557958

找到原因:发现是因为先上传的数据,然后再创建的表。删除数据后重新上传,解决问题。

image-20230608102314198

删除表,观察数据HDFS中的数据文件是否还在,发现已经不存在了。

drop table student;

image-20230608102356956

(2)外部表

外部表通常可用于处理其他工具上传的数据文件,对于外部表,Hive只负责管理元数据,不负责管理HDFS中的数据文件。

注意:

在创建内部表的时候可以不指定路径进行创建,但是在创建外部表的时候,需要指定外部数据的存储位置,也就是指定外部存储的路径。外部表本身并没有真正存储数据,而是引用了外部存储中的数据。

创建外部表如下:

create external table if not exists student(
    id int,
    name string
)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/student';

image-20230608103100638

上传文件到Hive表指定的路径

hadoop fs -put student.txt /user/hive/warehouse/student

删除表,观察数据HDFS中的数据文件是否还在

drop table student;

image-20230608103311990

我们发现,虽然表已经删除了,但数据文件还在。

2)SERDE和复杂数据类型

本案例重点练习SERDE和复杂数据类型的使用。

若现有如下格式的JSON文件需要由Hive进行分析处理,请考虑如何设计表?

注:以下内容为格式化之后的结果,文件中每行数据为一个完整的JSON字符串。

{
    "name": "dasongsong",
    "friends": [
        "bingbing",
        "lili"
    ],
    "students": {
        "xiaohaihai": 18,
        "xiaoyangyang": 16
    },
    "address": {
        "street": "hui long guan",
        "city": "beijing",
        "postal_code": 10010
    }
}

我们可以考虑使用专门负责JSON文件的JSON Serde,设计表字段时,表的字段与JSON字符串中的一级字段保持一致,对于具有嵌套结构的JSON字符串,考虑使用合适复杂数据类型保存其内容。最终设计出的表结构如下:

create table teacher
(
    name     string,
    friends  array<string>,
    students map<string,int>,
    address  struct<city:string,street:string,postal_code:int>
)
row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
location '/user/hive/warehouse/teacher';

创建该表:

image-20230608103516800

准备以下文件:

注意,需要确保文件中每行数据都是一个完整的JSON字符串,JSON SERDE才能正确的处理。

vim /opt/module/datas/teacher.txt
{"name":"dasongsong","friends":["bingbing","lili"],"students":{"xiaohaihai":18,"xiaoyangyang":16},"address":{"street":"hui long guan","city":"beijing","postal_code":10010}}

上传文件到Hive表指定的路径

hadoop fs -put teacher.txt /user/hive/warehouse/teacher

尝试从复杂数据类型的字段中取值

select * from teacher;

teacher.name    teacher.friends         teacher.students        teacher.address
dasongsong      ["bingbing","lili"]     {"xiaohaihai":18,"xiaoyangyang":16}     {"city":"beijing","street":"hui long guan","postal_code":10010}
3)create table as select和create table like

(1)create table as select

create table teacher1 as select * from teacher;

image-20230608104041978

查询数据:

select * from teacher1;

image-20230608104420535

(2)create table like

create table teacher2 like teacher;

image-20230608104223617

创建的表中不包含数据。

select * from teacher2;

image-20230608104452341

2. 查看表

1)展示所有表

(1)语法

SHOW TABLES [IN database_name] LIKE ['identifier_with_wildcards'];

注:like通配表达式说明:*表示任意个任意字符,|表示或的关系。

(2)案例

show tables like 'te*';

image-20230608104305269

2)查看表信息

(1)语法

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name

注:

  • EXTENDED:展示详细信息
  • FORMATTED:对详细信息进行格式化的展示

(2)案例

①查看基本信息

desc teacher;
hive (db_hive1)> desc teacher;
OK
col_name        		data_type       		comment
name                    string                  from deserializer   
friends                 array<string>           from deserializer   
students                map<string,int>         from deserializer   
address                 struct<city:string,street:string,postal_code:int>       from deserializer   
Time taken: 0.035 seconds, Fetched: 4 row(s)

②查看更多信息

desc formatted teacher;
hive (db_hive1)> desc formatted teacher;
OK
col_name        data_type       comment
# col_name              data_type               comment             
name                    string                  from deserializer   
friends                 array<string>           from deserializer   
students                map<string,int>         from deserializer   
address                 struct<city:string,street:string,postal_code:int>       from deserializer   
                 
# Detailed Table Information             
Database:               db_hive1                 
OwnerType:              USER                     
Owner:                  root                     
CreateTime:             Thu Jun 08 10:34:51 CST 2023     
LastAccessTime:         UNKNOWN                  
Retention:              0                        
Location:               hdfs://node1:9000/user/hive/warehouse/teacher    
Table Type:             MANAGED_TABLE            
Table Parameters:                
        COLUMN_STATS_ACCURATE   {\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"address\":\"true\",\"friends\":\"true\",\"name\":\"true\",\"students\":\"true\"}}
        bucketing_version       2                   
        numFiles                0                   
        numRows                 0                   
        rawDataSize             0                   
        totalSize               0                   
        transient_lastDdlTime   1686191691          
                 
# Storage Information            
SerDe Library:          org.apache.hadoop.hive.serde2.JsonSerDe  
InputFormat:            org.apache.hadoop.mapred.TextInputFormat         
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat       
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:             
        serialization.format    1                   
Time taken: 0.061 seconds, Fetched: 34 row(s)

3. 修改表

1)重命名表

(1)语法

ALTER TABLE table_name RENAME TO new_table_name

(2)案例

创建表:

create table if not exists stu(
    id int, 
    name string
);

image-20230608105624715

重命名表

alter table stu rename to stu1;

image-20230608105728315

注意:

  • 修改的表要存在;
  • 修改后的表不要与已存在的表重名。

2)修改列信息

(1)语法

①增加列

该语句允许用户增加新的列,新增列的位置位于末尾。

ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...)

②更新列
该语句允许用户修改指定列的列名、数据类型、注释信息以及在表中的位置。

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

③替换列

该语句允许用户用新的列集替换表中原有的全部列。

ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

3)案例

(1)查询表结构

desc stu1;

image-20230608105754227

(2)添加列

添加一个列age,类型为int

alter table stu1 add columns (age int);

(3)查询表结构

desc stu1;

image-20230608105837781

(4)更新列

将列age修改为ages,类型为double

alter table stu1 change column age ages double;

image-20230608110149782

(5)替换列

alter table stu1 replace columns(id int, name string);

image-20230608110548757

4. 删除表

1)语法

DROP TABLE [IF EXISTS] table_name;

2)案例

drop table stu1;

image-20230608110721986

5. 清空表

1)语法

TRUNCATE [TABLE] table_name

注意:truncate只能清空管理表,不能删除外部表中数据。

2)案例

(1)内部表(管理表)测试

创建内部表:

create table if not exists student(
    id int, 
    name string
)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/student';

image-20230608110903389

清空表:

```hive在这里插入代码片
truncate table student;


![image-20230608111113426](https://img-blog.csdnimg.cn/img_convert/6e887ec8236b5eeea1f7527b928b31b3.png)

查询数据:

```hive
select * from student;

image-20230608111101010

发现表中已经没有数据了,查看hdfs中是否有数据:

image-20230608111213233

删除表:

drop table student;

(2)外部表测试

创建外部表:

create external table if not exists student(
    id int,
    name string
)
row format delimited fields terminated by '\t'
location '/user/hive/warehouse/student';

上传文件到指定路径:

hadoop fs -put student.txt /user/hive/warehouse/student

查询数据:

select * from student;

image-20230608111528748

清空表:

truncate table student;

出现错误:

hive (db_hive1)> truncate table student;
FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table student.

这个错误提示说明您尝试对一个非托管表进行truncate操作。在Apache Hive中,托管表(managed table)是由Hive自己管理其数据存储的表,因此,当您在Hive中执行TRUNCATE操作时,Hive会直接删除表中的所有数据,而存储表结构和元数据。

相反,非托管表(external table)是由用户管理其数据存储的表。对于非托管表,Hive不负责管理其数据存储,也不会对其执行数据的移动或者删除操作。因此,如果您尝试对一个非托管表执行TRUNCATE操作,将会得到类似于 “Cannot truncate non-managed table” 这样的错误提示。

如果您需要对非托管表清空数据,可以尝试使用HDFS命令或其他工具删除表数据存储路径下的数据文件。

参考链接:

1.聊聊SQL语句中 DDL 、DML 、DQL 、DCL 分别是什么https://blog.csdn.net/qq_45069279/article/details/115270096
2.尚硅谷大数据Hive 3.x教程全新升级版(基于hive3.1.3)p16-p27
3.HIve安装配置(超详细)
https://blog.csdn.net/W_chuanqi/article/details/130242723

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

需求三重境

需求的三点-痛点、痒点、爽点 我早前也做过产品经理&#xff0c;做产品经理经常需要分析需求&#xff0c;而KANO模型是其中的一个模型。如果要进一步解读痛点、痒点、爽点&#xff0c;或者可以尝试从KANO模型的角度分析。 所谓的KANO模型&#xff0c;是东京理工大学教授狩野纪…

接口测试 —— 接口和接口文档概念

1、接口的概念 接口又叫API&#xff0c;全称application programming interface&#xff1a;应用程序接口&#xff08;规范&#xff09;&#xff0c;也就是我们经常会听说Web接口&#xff0c;APP接口。 详细说明&#xff1a; APP是一种基于C/S架构的应用程序&#xff0c;如抖音…

阿里高工珍藏版“亿级高并发系统设计手册(2023版)”面面俱到,太全了

高并发 俗话说&#xff1a;罗马不是一天建成的&#xff0c;系统的设计当然也是如此。 从原来谁都不看好的淘宝到现在的电商巨头&#xff0c;展现的不仅仅是一家互联网巨头的兴起&#xff0c;也是国内互联网行业迎来井喷式发展的历程&#xff0c;网络信号从 2G 发展到现在的 5…

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能&#xff0c;调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…

邮件营销技巧!不想被打入冷宫?这五点让你的邮件不再进垃圾箱

邮件营销凭借其低成本、高效率的优势渐渐地在各个行业开始崭露头角。它既适用于外贸行业来拓展客户、又适用于金融行业来和客户保持联系。除此之外&#xff0c;企业还可以用邮件营销来通知活动信息、产品上新信息等等。 不过&#xff0c;很多人在进行邮件营销的时候经常会遇到“…

说点理论-什么叫TED背景

TED背景的概念 指technology, entertainment, design在英语中的缩写,即技术、娱乐、设计的3个首字母缩定。 TED背景的投影最小为4米*4米,大的有IMAX宽影幕布来打投影。给人感觉为:非常技术、非常高大上、非常专业、非常Fashion。 因此,头部一些公司会专门对于非常重要类…

【STM32】STM32G4系列片内模拟器件-比较器的使用

STM32G4系列片内模拟器件-比较器的使用 1.前言2.CubeMX配置3.HAL库函数 1.前言 STM32G4系列内置了片内模拟比较器&#xff0c;为电机控制、电源监测等方面的应用提供了很大的便利。要使用片内比较器&#xff0c;只需使用STM32CubeMX进行简单配置即可。 2.CubeMX配置 首先&am…

不敲一个代码,10分钟做出数据可视化大屏,还不快来学?

大屏幕实时数据可视化解决方案? 简道云去年举办过一场“最美仪表盘”评选活动&#xff0c;在活动中我们收到了很多精美炫酷的仪表盘&#xff0c;而且这所有的数据可视化仪表盘都是“从业务中来”&#xff0c;“到业务中去”的。 下面举几个例子展示下&#xff1a; 所用工具…

一、kafka入门

Kafka入门 为什么要用消息中间件&#xff1f; 异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信。传统的做法有两种1.串行的方式&#xff1b;2.并行方式。 串行方式&#xff1a;将注册信息写入数据库成功后&#xff0c;发送注册邮件&#xff…

最强AIGC实战应用速成指南来了!14天掌握核心技术

‍‍OpenAI 创始人 Sam Altman 在近期采访中说到&#xff1a;" AI 是少有的被严重炒作之后&#xff0c;还被严重低估的东西。" 现在的 AI 几乎把互联网上所有的数据都学习了一遍&#xff0c;相当于一个世界知识的统一建模。在如此规模的参数量下&#xff0c;更好的关…

Java 集合全教程—List

Java 集合全教程_Doker 多克的博客-CSDN博客 Java 集合全教程—Set 接口_Doker 多克的博客-CSDN博客 一、概述 列表是一个有序的集合&#xff08;有时称为序列&#xff09;。列表可能包含重复的元素。除了从Collection继承的操作外&#xff0c;List接口还包括以下操作&#x…

Java抽象类介绍

1 问题 声明一个名为Employee的抽象类&#xff0c;其中包含name(姓名)和sex(性别)两个String类型的私有属性&#xff0c;并声明一个继承于Employee抽象类的子类Teacher。 2 方法 2.1 定义一个抽象类&#xff1a;Employee。 2.2 为Employee类设计一个抽象方法。 2.3实现抽象类Em…

vue对接海康摄像头,配合ifarme进行展示。给ifarme点击事件(消除ifarme事件,因为ifarme没有点击事件)

1、在public文件夹下建一个文件ifarme.index&#xff0c;和index.html同级。 <!doctype html> <html><head><title></title><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta http-equi…

【熬夜送书 | 第三期】清华社赞助 | 《Java系列丛书》

前言 Java作为一门主流语言&#xff0c;它与其他语言相比&#xff0c;有什么优势呢? Java 是一种广泛使用的高级编程语言&#xff0c;具有多项特性&#xff1a; 1.简单易学&#xff1a;Java 语言的语法与 C 相似&#xff0c;但删掉了复杂的指针、运算符重载等内容&#xff0…

C++继承相关内容(三)

目录 一.单例模式和相关习题 1.不能在外部环境创建该类对象 方法&#xff1a; 代码&#xff1a; 2.创建一个不能被继承的类 方法&#xff1a; 3.创建一个不能被继承&#xff0c;但是可以在外部环境中创建该类对象 方法&#xff1a; ​编辑 4.一个能被继承的类&#xf…

【WinForm】WinForm常见窗体技术汇总

文章目录 前言一、窗体调用外部程序与渐变窗体1、效果2、界面设计3、代码 二、按回车键跳转窗体中的光标焦点1、效果2、界面设计3、代码 三、剪切板操作1、效果2、界面设计3、代码 四、实现拖放操作1、效果2、界面设计3、代码 五、移动的窗体1、效果2、界面设计3、代码 六、抓不…

聚观早报 | OpenAI 没有上市计划;马斯克称未来房价下跌将加速

今日要闻&#xff1a;OpenAI 没有上市计划&#xff1b;马斯克称未来房价下跌将加速&#xff1b;Coinbase被SEC起诉&#xff0c;股价闪崩&#xff1b;库克&#xff1a;苹果正密切关注ChatGPT等&#xff1b;推特正致力于开发视频直播产品 OpenAI没有上市计划 当地时间周二&…

068:cesium lookAtTransform围绕一个固定点上下左右旋转查看

第068个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中查看一个固定的点的情况,从上下左右不同的维度进行查看。这里面使用lookAtTransform这个操作函数。lookAtTransform(transform, offset),这里的offset偏移量可以是笛卡尔坐标或航向/俯仰/范围。 直接复制下面…

Java集合常见面试题集锦

1、介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点&#xff0c;主要分为List、Set、Map、Queue三大数据结构。它们在Java中的结构关系如下&#xff1a; Collection接口是List、Set、Queue的父级接口。 Set接口有两个常用的实现类&#xff1a;HashSet和Tre…

libmodbus编程笔记

一 基础知识 地址映射值 Modbus寄存器 Modbus寄存器地址分配 Modbus ASCII消息帧格式 Modbus RTU帧格式 Modbus RTU相邻帧间隔 Modbus寻址范围 PDU与ADU的关系 Modbus TCP/IP ADU与PDU的关系 Modbus TCP/IP与Modbus串行消息构成对比 Modbus TCP/IP协议最大帧数据长度为260字…