Hive DDL和DML

news2024/11/9 9:33:19

目录

一 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');

 

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

(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`;

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

1.1.4 删除数据库

1语法

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

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

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

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]
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;

_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'];

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

2)案例

show tables like 'stu*';

2)查看表信息

1)语法

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name

注:EXTENDED:展示详细信息

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

2)案例

1查看基本信息

desc stu;

2查看更多信息

 desc formatted stu;

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;

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)案例

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

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

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

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

相关文章

C++程序设计函数部分(定义+实例)

目录 1、内联函数 2、默认形参值函数 3、重载函数 4、系统函数 1、内联函数 &#xff08;1&#xff09;定义 在函数前面加上 inline 申明 eg&#xff1a; inline double CalArea(double radius) { return 3.14*radius*radius; } void main() { double r(3.0); dou…

后缀数组的应用:[Leetcode] 321.拼接最大数(困难)

题目描述 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字拼接成一个新的数&#xff0c;要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的…

ChatGPT 究竟在做什么?它为何能做到这些?(1)

ChatGPT能够自动生成一些表面上看起来像人类写出的文字的东西&#xff0c;是一件很厉害且出乎大家意料的事。那么&#xff0c;它是如何做到的呢&#xff1f;又是为何能做到呢&#xff1f;我在这里想大致介绍一下ChatGPT的内部机理&#xff0c;然后探讨一下为什么它能很好地生成…

ZNS 架构实现 : 解决传统SSD问题的高性能存储栈设计

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 2.2 ZNS 的架构实现 先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态 其中对…

前端项目-12-个人中心-二级路由配置-导航守卫-懒加载

目录 1-个人中心 1.1-个人中心路由注册 1.2-拆分二级路由组件 1.3-动态渲染我的订单页面 2-导航守卫优化 2.1-用户未登录导航守卫优化 2.2-路由独享 2.3-组件内守卫 3-懒加载 3.1-图片懒加载 3.2-路由懒加载 4-map文件处理 1-个人中心 需求&#xff1a;当用户点击支…

计算机图形学 | 实验五:模型导入

计算机图形学 | 实验五&#xff1a;模型导入计算机图形学 | 实验五&#xff1a;模型导入模型加载库AssimpAssimp简介Assimp构建Mesh && Model 类的创建MeshModel绘制模型华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff…

进阶C语言

1.数据的存储 1.1 为什么数据在内存中存放的是补码 因为CPU只有加法器,而使用补码&#xff0c;就可以将符号位和数值域统一处理(即统一处理加法和减法)且不会需要额外的硬件电路。 1.2 为什么会有大小端 这是因为在计算机系统中,是以字节为单位的,比如: 每个地址单元都对应着…

双指针算法初阶

前言&#xff1a;首先&#xff0c;这是不是你所了解的双指针算法&#xff1f; for (int i 0; i < n; i) {for (int j 0; j < n; j){...} } 那你就要继续往下看了&#xff0c;双指针算法可不是简单的两层的for循环暴力&#xff0c;这并不能起到时间优化的作用。 那话…

基于html+css的图片展示9

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

educoder实训——数值类型

第1关:三角形周长及面积 任务描述 输入的三角形的三条边a、b、c 的长度,计算并依次输出三角形的周长和面积,结果严格保留2位小数。测试用例的数据保证三角形三边数据可以构成三角形。 三角形面积计算公式: 其中s=(a+b+c)/2。 输入格式 分三行输入 3 个浮点数,表示三…

银行数字化转型导师坚鹏:金融数字化转型助力乡村振兴及案例

金融数字化转型助力乡村振兴及案例课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚如何借助数字化转型助力乡村振兴&#xff1f; 不知道普惠金融模式和产品如何有效创新&#xff1f; 不知道数字化转型助力乡村振兴的成功案例&#xff1f; 课程特色&#xff1…

【用AI写周报,“卷死”同事】打造一款自动生成周报的微信小程序

文章目录前言步骤1&#xff1a;创建一个ChatGPT账号步骤2&#xff1a;创建一个微信小程序并配置API。步骤3&#xff1a;在微信开发者工具中创建一个新的微信小程序项目步骤4&#xff1a;创建ChatGPT API云函数步骤5&#xff1a;创建UI界面步骤6&#xff1a;创建发送邮件的云函数…

Kubernetes 1.27 正式发布

Kubernetes 1.27 正式发布&#xff0c;这是 2023 年的第一个版本。这个版本包括 60 项增强功能。其中 18 项增强功能进入 Alpha、29 项进入 Beta&#xff0c;还有 13 项升级为 Stable 稳定版。 主题和标识 Kubernetes v1.27 的主题是 Chill Vibes 新内容 冻结 k8s.gcr.io镜像…

replugin宿主与插件通信小结

近来replugin开发中遇到宿主和插件间需要通信的情形&#xff0c;思来只有进程间通信(IPC)才是比较好的宿主与插件的通信方式。而Android进程间通信主要有2种方式&#xff1a;Messenger和AIDL。 AIDL&#xff08;Android Interface Definition Language&#xff09;是Android接…

矩阵和线性代数的应用

矩阵和线性代数是数学中重要的概念&#xff0c;它们被广泛应用于物理、工程、计算机科学、经济学等众多领域。本文将讨论矩阵和线性代数的一些基本概念以及它们在实际应用中的重要性和影响。 一、矩阵和线性代数的基本概念 矩阵是由数字组成的矩形数组。它可以表示线性方程组…

线程池并发服务器

线程池技术 线程池技术是一种典型的生产者-消费者模型。 线程池技术是指能够保证所创建的任一线程都处于繁忙状态&#xff0c;而不需要频繁地为了某一任务而创建和销毁线程&#xff0c;因为系统在创建和销毁线程时所耗费的cpu资源很大。如果任务很多&#xff0c;频率很高&am…

Android中级——系统信息与安全机制

系统信息与安全机制系统信息获取/system/build.prop/procandroid.os.buildSystemPropertyPackageManagerActivityManagerpackages.xmlpermissions标签package标签perms标签安全机制Apk反编译apktooldex2jarjd-guiApk加密系统信息获取 /system/build.prop 存放一些配置信息&am…

Seaborn 变量分布分析

文章目录一、数据集1.1 下载数据集1.2 字段含义说明1.3 导入数据集二、初步分析2.1 缺失值分布查看2.2 异常值分布查看2.3 查看变量分布三、数值变量分析3.1 replot()&#xff1a;多个变量之间的关联关系3.2 lmplot()/regplot&#xff1a;分析两个变量的线性关系3.3 displot()&…

从前序与中序遍历序列构造二叉树——力扣105

题目描述 法一&#xff09;递归 复杂度分析 代码如下 class Solution { private:unordered_map<int, int> index;public:TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>& inorder, int preorder_left, int preorder_ri…

Qt Quick - StackView

StackView 使用总结一、概述二、在应用中使用StackView三、基本的导航1. push Item2. pop Item3. replace Item四、深度链接五、寻找Item六、转换六、Item的所有权七、大小一、概述 StackView可以与一组相互链接的信息页面一起使用。例如&#xff0c;电子邮件应用程序具有单独…