Hive DDL和DML

这篇具有很好参考价值的文章主要介绍了Hive DDL和DML。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 DDL

1.1 数据库

1.1.1 创建数据库

1.1.2 查询数据库

1.1.3 修改数据库

1.1.4 删除数据库

1.1.5 切换当前数据库

1.2 表

1.2.1 创建表

1.2.2 查看表

1.2.3 修改表

3.2.4 删除表

3.2.5 清空表

二 DML

2.1 Load

2.2 Insert

2.2.1  将查询结果插入表中

2.2.2 将给定Values插入表中

2.2.3 将查询结果写入目标路径

2.3 Export&Import


在关系型数据库管理系统(RDBMS)中,DDL(Data Definition Language)和DML(Data Manipulation Language)是两类不同类型的SQL语句,用于对数据库进行不同的操作。

DDL(Data Definition Language):DDL语句用于定义数据库的结构,包括创建、修改和删除数据库、表、视图、索引、约束等数据库对象。常见的DDL语句包括:

  • CREATE:用于创建数据库对象,例如CREATE DATABASE、CREATE TABLE、CREATE INDEX等。
  • ALTER:用于修改数据库对象,例如ALTER TABLE、ALTER INDEX等。
  • DROP:用于删除数据库对象,例如DROP DATABASE、DROP TABLE、DROP INDEX等。
  • TRUNCATE:用于清空表中的所有数据,并且保留表的结构。
  • RENAME:用于重命名数据库对象,例如RENAME TABLE。

DML(Data Manipulation Language):DML语句用于对数据库中的数据进行操作,包括查询、插入、更新和删除数据。常见的DML语句包括:

  • SELECT:用于查询数据库中的数据,可以使用多种条件和操作符进行过滤、排序、分组等操作。
  • INSERT:用于插入新的数据行到表中。
  • UPDATE:用于更新表中的现有数据。
  • DELETE:用于删除表中的数据行。

需要注意的是,DDL语句会对数据库的结构进行修改,可能会对数据库的完整性和安全性产生重大影响,因此通常需要具有足够权限的用户来执行。而DML语句只涉及对数据的操作,一般权限较低,更多地用于对数据库中的数据进行日常的查询、插入、更新和删除操作。

一 DDL

1.1 数据库

1.1.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;

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

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

create database db_hive2 location '/db_hive2';

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

create database db_hive3 with dbproperties('create_date'='2023-4-7');

1.1.2 查询数据库

1)展示所有数据库

1)语法

SHOW DATABASES [LIKE 'identifier_with_wildcards'];

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

2)案例

hive> show databases like 'db_hive*';

OK

db_hive_1

db_hive_2

2)查看数据库信息

1)语法

DESCRIBE DATABASE [EXTENDED] db_name;

2)案例

①查看基本信息

hive> desc database db_hive3;

OK

db_hive      hdfs://hadoop102:8020/user/hive/warehouse/db_hive.db   atguigu   USER

查看更多信息

desc database extended db_hive3;

1.1.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 ('author'='mingyu','create-time'='2023-4-7');

 Hive DDL和DML

如果修改的键值对存在,会更新值,若不存在,会新建键值对

(2)修改location

alter database db_hive3 set location 'hdfs://hadoop102:8020/user/db_hive3';

 旧表的绝对位置并未发生变化,新创建的表在新位置 

(3)修改owner user

alter database db_hive3 set owner user `mingyu`;

注意用户名要用反引号🕵️‍♀️ 

Hive DDL和DML

1.1.4 删除数据库

1语法

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

注:RESTRICT:严格模式,若数据库不为空,则会删除失败,默认为该模式。

    CASCADE:级联模式,若数据库不为空,则会将库中的表一并删除。

Hive DDL和DML

2)案例

(1)删除空数据库

drop database db_hive2;

2删除非空数据库

drop database db_hive3 cascade;

1.1.5 切换当前数据库

1语法

USE database_name;

1.2 表

1.2.1 创建表

Hive有三种建表语法

  语法

1)普通建表

1)完整语法

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name   

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

[CLUSTERED BY (col_name, col_name, ...)

[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

[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

说明

定义

tinyint

1byte有符号整数

smallint

2byte有符号整数

int

4byte有符号整数

bigint

8byte有符号整数

boolean

布尔类型,true或者false

float

单精度浮点数

double

双精度浮点数

decimal

十进制精准数字类型

decimal(16,2)

varchar

字符序列,需指定最大长度,最大长度的范围是[1,65535]

varchar(32)

string

字符串,无需指定最大长度

timestamp

时间类型

binary

二进制数据

复杂数据类型如下;

类型 说明 定义 取值示例
array 数组是一组相同类型的值的集合 array<string> arr[0]
map map是一组相同类型的键-值对集合 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

Hive DDL和DML

方式二:显示转换

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

a.语法

cast(expr as <type>)

b.案例

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

_c0    _c1

3.0     3

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键值对参数

2Create Table As SelectCTAS)建表

该语法允许用户利用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]

3Create 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.2 查看表

1)展示所有表

1)语法

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

Hive DDL和DML

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

2)案例

show tables like 'stu*';

Hive DDL和DML

2)查看表信息

1)语法

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name

注:EXTENDED:展示详细信息

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

2)案例

1查看基本信息

desc stu;

2查看更多信息

 desc formatted stu;

Hive DDL和DML

1.2.3 修改表

1)重命名表

1)语法

ALTER TABLE table_name RENAME TO new_table_name

2)案例

alter table stu rename to stu1;

2)修改列信息

只修改表中元数据,不修改hdfs中数据

1语法

① 增加列

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

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

alter table teacher1 add columns (birthday string 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], ...)

2案例

1)查询表结构

hive (default)> desc stu;

2)添加列

hive (default)> alter table stu add columns(age int);

3)查询表结构

hive (default)> desc stu;

4)更新列

hive (default)> alter table stu change column age ages double;

6)替换列

hive (default)> alter table stu replace columns(id int, name string);

3.2.4 删除表

DROP TABLE [IF EXISTS] table_name;

3.2.5 清空表

1)语法

TRUNCATE [TABLE] table_name

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

2)案例

hive (default)> truncate table student;

二 DML

Hive是用作大数据处理的框架,updatedelete用的非常少

2.1 Load

Load语句可将文件导入到Hive表中。

1)语法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)];

关键字说明:

(1)local:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。

(2)overwrite:表示覆盖表中已有数据,否则表示追加。

(3)partition:表示上传到指定分区,若目标是分区表,需指定分区。

2)实操案例

(0)创建一张表

create table student(

    id int,

    name string

)

row format delimited fields terminated by '\t';

(1)加载本地文件到hive

load data local inpath '/opt/module/datas/student.txt' into table student;

(2)加载HDFS文件到hive中

①上传文件到HDFS

hdfs dfs -put /opt/module/data/student.txt /user/mingyu

②加载HDFS上数据,导入完成后去HDFS上查看文件是否还存在

load data inpath '/user/mingyu/student.txt'

into table student;

(3)加载数据覆盖表中已有的数据

①上传文件到HDFS

 dfs -put /opt/module/data/student.txt /user/mingyu;

②加载数据覆盖表中已有的数据

load data inpath '/user/atguigu/student.txt'

overwrite into table student;

2.2 Insert

2.2.1  将查询结果插入表中

1)语法

INSERT (INTO | OVERWRITE) TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)] 
select_statement;

关键字说明:

(1)INTO:将结果追加到目标表

(2)OVERWRITE:用结果覆盖原有数据

2)案例

(1)新建一张表

create table student1(
    id int,
    name string
)
row format delimited fields terminated by '\t';

2)根据查询结果插入数据

insert overwrite table student3
select
    id,
    name
from student;

2.2.2 将给定Values插入表中

1)语法

INSERT (INTO | OVERWRITE) TABLE tablename 
[PARTITION (partcol1[=val1], partcol2[=val2] ...)] 
VALUES values_row [, values_row ...]

2)案例

insert into table  student1 values(1,'wangwu'),(2,'zhaoliu');

2.2.3 将查询结果写入目标路径

1)语法

INSERT OVERWRITE [LOCAL] DIRECTORY directory

  [ROW FORMAT row_format] [STORED AS file_format] select_statement;

2)案例

insert overwrite  directory '/user/mingyu/write.json'
row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
select id,name
from student;

Hive DDL和DML

2.3 Export&Import

Export导出语句可将表的数据和元数据信息一并到处的HDFS路径,Import可将Export导出的内容导入Hive,表的数据和元数据信息都会恢复。Export和Import可用于两个Hive实例之间的数据迁移。

1)语法

--导出
EXPORT TABLE tablename 
TO 'export_target_path'

--导入
IMPORT [EXTERNAL] TABLE new_or_original_tablename 
FROM 'source_path' [LOCATION 'import_target_path']

2)案例文章来源地址https://www.toymoban.com/news/detail-415720.html

--导出
export table default.student 
to '/user/hive/warehouse/export/student';

--导入
import table student2 
from '/user/hive/warehouse/export/student';

到了这里,关于Hive DDL和DML的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL小记——DDL、DML、DQL

    目录 数据库概念 关系型数据库 MySQL使用 SQL语言 sql分类 DDL:操作数据库和表 操作数据库 操作表 DML:数据操作语言,用来增删改数据库记录 1.插入数据 2.删除数据 3.修改数据 DQL:查询 条件查询 模糊查询 字段的运算和去重 排序 order by 聚合函数 分组 group by  分页 limit 存储数

    2024年02月05日
    浏览(80)
  • ☆常用的Sql语句汇总(DDL/DML)

    里面有表注释 数据库种类 sql 备注 mysql -- 获取所有表名、视图名 show tables -- 获取 dev_test_data数据库 所有表、视图信息 select * from information_schema.tables where table_schema=\\\'dev_test_data\\\' -- 获取表名、视图名 select table_name from information_schema.tables where table_schema=\\\'dev_test_data\\\' -- 只获取表信息

    2024年02月03日
    浏览(55)
  • sql语句中的ddl和dml

    操作数据库:CRUD C(create) 创建 *数据库创建出来默认字符集为utf8 如果要更改字符集就 Create database 名称 character set gbk(字符集) *创建数据库:create database 名称 *先检查是否有该数据库在创建 create database if not exists 名称 创建db4数据库,判断是否存在,并指定字符集为gbk

    2024年02月11日
    浏览(35)
  • [JavaWeb]SQL介绍-DDL-DML

    SQL: Structured Query Language–结构化查询语言 用来操作关系型数据库的编程语言, 定义了关系型数据库的统一标准 每一种数据库可能有不一样的语法, 我们称其为\\\"方言\\\" SQL语句可以单行或多行书写,以分号结尾 MySQL语句不区分大小写, 但是建议用大写 注释: 单行注释 -- 注释内

    2024年02月15日
    浏览(34)
  • 学习笔记-mysql基础(DDL,DML,DQL)

    DDL,Data Definition Language,数据库定义语言,该语言包括以下内容: 对数据库的常用操作 对表结构的常用操作 修改表结构 1.对数据库的常用操作 注意:在sql server 中使用,if exists和mysql不同,sql server里面检查是否有这个表再删除,需要这样:if exists (select * from dbo.sysobjects where id = objec

    2024年01月16日
    浏览(36)
  • SQL语言:DDL、DML、DQL、DCL

    SQL程序语言有四种类型,对数据库的基本操作都属于这四类,分别为: 数据定义语言(DDL) 数据查询语言(DQL) 数据操纵语言(DML) 数据控制语言(DCL) DDL(Data Definition Language):就是定义关系模式、删除关系、修改关系模式及创建数据库中的各种对象,如表、聚簇、索引、视

    2024年02月02日
    浏览(41)
  • 第3步---MySQL的DDL和DML操作

      Data Defination Language 数据定义语言。创建数据库和表的不涉及到数据的操作。 1.1DDL基本操作 1.1.1数据库相关操作 ddl:创建数据库,创建和修改表 对数据库常见的操作:  操作数据库 2.1.2数据库表的相关操作       2.1.3表的字段数据类型 数值类型: tinyInt :1字节。有符号

    2024年02月12日
    浏览(44)
  • HBase操作学习:从DDL到DML的全面指南

    文全面介绍了HBase的操作学习,包括命名空间管理、DDL(数据定义语言)如创建、查看、修改和删除表,以及DML(数据操作语言)如put、get、scan、delete等操作的详细步骤。

    2024年02月08日
    浏览(31)
  • Mysql基础篇(一)之DDL、DML、DQL、DCL

    SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。 分类 全称 说明 DDL Data Definition Language 数据定义语言,用来定义数据对象(数据库,表,字段) DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改 DQL Data Query Language 数据查询语言,用来查询数据

    2024年02月11日
    浏览(77)
  • 【DB】DML DDL DCL TCL分别指的哪些

    在写设计书的时候经常碰到这几个词语,之前还跑去问leader,leader感觉到大受震撼,其实这些是数据库的设计阶段经常接触的概念 DML (Data Manipulation Language) 这指的就是访问和操作数据的语言,对数据库的内容物进行操作,主要包括 insert        delete        update        s

    2024年01月19日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包