Hive ---- DDL(Data Definition Language)数据定义

Hive ---- DDL(Data Definition Language)数据定义

  • 1. 数据库(database)
    • 1. 创建数据库
    • 2. 查询数据库
    • 3. 修改数据库
    • 4. 删除数据库
    • 5. 切换当前数据库
  • 2. 表(table)
    • 1. 创建表
    • 2. 查看表
    • 3. 修改表
    • 4. 删除表
    • 5. 清空表

1. 数据库(database)

1. 创建数据库

1. 语法

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

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

hive (default)> create database db_hive1;

注:若不指定路径,其默认路径为${hive.metastore.warehouse.dir}/database_name.db
(2)创建一个数据库,指定路径

hive (default)> create database db_hive2 location '/db_hive2';

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

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

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 (default)> desc database db_hive3;

在这里插入图片描述
查看更多信息

hive (default)> desc database extended db_hive3;

在这里插入图片描述

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. 案例
修改dbproperties

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

4. 删除数据库

1. 语法

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

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

2. 案例
(1)删除空数据库

hive> drop database db_hive2;

(2)删除非空数据库

hive> drop database db_hive3 cascade;

5. 切换当前数据库

1. 语法

USE database_name;

2. 案例

hive (default)> use db_hive1;

2. 表(table)

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]
[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的基本数据类型可以做类型转换,转换的方式包括隐式转换以及显示转换。

方式一:隐式转换
具体规则如下:
a. 任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。
b. 所有整数类型、float和string类型都可以隐式地转换成double。
c. tinyint、smallint、int都可以转换为float。
d. boolean类型不可以转换为任何其它的类型。

方式二:显示转换
可以借助cast函数完成显示的类型转换
a.语法

cast(expr as <type>) 

b.案例

hive (default)> 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序列化和反序列化每行数据。
语法一: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键值对参数

  1. 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]
  1. 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, ...)]

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

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

[fickler@hadoop102 datas]$ vim 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表指定的路径

[fickler@hadoop102 datas]$ hadoop fs -put student.txt /user/hive/warehouse/student

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

hive (default)> drop table student;

不见了

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

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

[fickler@hadoop102 datas]$ hadoop fs -put student.txt /user/hive/warehouse/student

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

hive (default)> drop table student;

还在

  1. 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字符串,考虑使用合适复杂数据类型保存其内容。最终设计出的表结构如下:

hive>
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';

创建该表,并准备以下文件。注意,需要确保文件中每行数据都是一个完整的JSON字符串,JSON SERDE才能正确的处理。

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

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

[fickler@hadoop102 datas]$ hadoop fs -put teacher.txt /user/hive/warehouse/teacher

尝试从复杂数据类型的字段中取值
在这里插入图片描述

  1. create table as select和create table like

(1)create table as select

hive>
create table teacher1 as select * from teacher;

表结构+数据一起复制
(2)create table like

hive>
create table teacher1 as select * from teacher;

仅复制表结构

2. 查看表

1. 展示所有表
(1)语法

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

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

hive> show tables like 'stu*';

2. 查看表信息
(1)语法

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name

注:EXTENDED:展示详细信息
FORMATTED:对详细信息进行格式化的展示
(2)案例
查看基本信息

hive> desc stu;

查看更多信息

hive> desc formatted stu;

3. 修改表

1. 重命名表
(1)语法

ALTER TABLE table_name RENAME TO new_table_name

(2)案例

hive (default)> alter table stu rename to stu1;

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], ...)

(2)案例
查询表结构

hive (default)> desc stu;

添加列

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

查询表结构

hive (default)> desc stu;

更新列

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

替换列

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

4. 删除表

1. 语法

DROP TABLE [IF EXISTS] table_name;

2. 案例

hive (default)> drop table stu;

5. 清空表

1. 语法

TRUNCATE [TABLE] table_name

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

2. 案例

hive (default)> truncate table student;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP教程:详解TCP连接过程

目录标题 一 、简述二 、TCP建立连接协议&#xff08;三次握手&#xff09;2.1 概述及目的2.2 第一次握手&#xff1a;客户端发送SYN报文2.3 第二次握手&#xff1a;服务器回应SYN-ACK报文2.4 第三次握手&#xff1a;客户端回应ACK报文2.5 顾客预定座位场景2.6底层原理2.7 TCP …

Docker 网络

一、Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认网关。因为在同一宿…

科海思除COD树脂,大孔树脂,除COD专用树脂

一、产品介绍 Tulsimer A-722 MP具有控制孔径的大孔强碱性Ⅰ型阴离子交换树脂 Tulsimer A-722 MP 是一款具有便于颜色和有机物去除的控制孔径的&#xff0c;专门开发的大孔强碱性Ⅰ型阴离子交换树脂。 Tulsimer A-722 MP&#xff08;氯型&#xff09;专门应用于去除COD…

day2 OSI七层体系结构

目录 网络体系结构的形成 协议与划分层次 OSI七层体系结构 网络体系结构的形成 两台计算机要互相传送文件需解决很多问题&#xff1b; (1) 必须有一条传送数据的通路。 (2) 发起方必须激活通路。 (3) 要告诉网络如何识别接收方。 (4) 发起方要清楚对方是否已开机&#…

[BJDCTF2020CTF]之Misc篇(NSSCTF)刷题记录③

NSSCTF-Misc篇刷题记录wp SUCTF-2019-MISC签到题2021-安徽省赛-misc签到RCTF-2019-Misc-draw2020-BJDCTF-Misc-藏藏藏2020-BJDCTF-Misc-签个到2020-BJDCTF-Misc-认真你就输了2020-BJDCTF-Misc-你猜我是个啥2020-BJDCTF-Misc-一叶障目2020-BJDCTF-Misc-鸡你太美2020-BJDCTF-Misc…

NLP原理和应用入门:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)

目录 一、梯度裁剪 1.1设定范围值裁剪 1. 全部参数裁剪&#xff08;默认&#xff09; 2. 部分参数裁剪 1.2 通过L2范数裁剪 1.3通过全局L2范数裁剪 二. 模型导出ONNX协议 三、动态图转静态图 3.1两种图定义 3.2 什么场景下需要动态图转静态图 3.3为什么动态图模式越来…

【NFS共享存储服务】

目录 一、NFS (Network File System&#xff09;网络文件系统1.1、NFS工作原理1.2、举例1.2.1、共享文件总结 一、NFS (Network File System&#xff09;网络文件系统 依赖于RPC (远端过程调用) 需安装nfs-utils、rpcbind软件包 系统服务: nfs、rpcbind 共享配置文件: /etc/ex…

Ajax和Json综合案例

1. 查询所有 创建brand.html,使用axios发送请求&#xff0c;其中查询一般采用get的请求方式 <script src"js/axios-0.18.0.js"></script><script>//1. 当页面加载完成后&#xff0c;发送ajax请求window.onload function () {//2. 发送ajax请求axi…

造型简约的机箱,安装简单兼容性好,安钛克P20C体验

我们准备组装一台新主机的时候&#xff0c;机箱确实很重要&#xff0c;它决定了主机的整体风格和兼容性。我比较喜欢用中塔机箱&#xff0c;像是上个月我新装的主机&#xff0c;用的就是安钛克P20C&#xff0c;这款机箱的设计很简约&#xff0c;而且还有多种版本可选&#xff0…

【剑指offer】学习计划day1

目录 一. 前言 二. 用两个栈实现队列 a.题目 b.题解分析 c.AC代码 二. 包含min函数的栈 a.题目 b.题解分析 c.AC代码 一. 前言 本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接&#xff1a; 剑指offer-学习计划https://leetcode.cn/study-pla…

jstat命令查看jvm内存情况及GC内存变化

命令格式 jstat [Options] pid [interval] [count] 参数说明&#xff1a; Options&#xff0c;选项&#xff0c;一般使用 -gc、-gccapacity查看gc情况 pid&#xff0c;VM的进程号&#xff0c;即当前运行的java进程号 interval&#xff0c;间隔时间(按该时间频率自动刷新当前内存…

Python整个颜色小网站,给刚刚失恋的他.........

一些过场剧情: 死党一直暗恋校花&#xff0c;但是校花对他印象也不差&#xff0c; 就是死党一直太怂了&#xff0c;不敢去找校花&#xff0c; 直到昨天看到校花登上了校董儿子的豪车&#xff0c; 死党终于彻底死心&#xff0c;大醉一场&#xff0c;作为他的兄弟&#xff0c…

系统集成项目管理工程师 笔记(第六章:项目整体管理)

文章目录 项目整体管理6个过程制定项目章程过程 6.3 制订项目管理计划 2476.4 指导与管理项目工作 2516.5 监控项目工作 255监控项目工作的输入监控项目工作的工具与技术监控项目工作的输出 6.6 实施整体变更控制6.7结束项目或阶段 6.1 项目整体管理概述 242 6.1.1 项目整体管理…

“探索C++非质变算法:如何更高效地处理数据“

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

王道计组(23版)6_总线

总线概述 特点 分时&#xff1a;同一时刻只允许一个部件向总线发送信息 共享&#xff1a;总线上可以挂接多个部件&#xff0c;各个部件互相交换的信息都可以通过这组线路分时共享&#xff0c;多个部件可以同时从总线接收相同的信息 分类 片内总线&#xff1a;CPU芯片内部AL…

Linux下版本控制器(SVN) -命令行客户端

文章目录 进阶知识-Linux下版本控制器(SVN)5、命令行客户端5.1 创建两个工作区目录模拟两个开发人员5.2 检出5.3 添加5.4 提交5.5 查看服务器端文件内容5.6 更新操作5.7 冲突5.7.1 过时的文件5.7.2 冲突的产生5.7.3 冲突的表现5.7.4 冲突的手动解决5.7.5 冲突的半自动解决5.7.6…

openharmony内核中不一样的双向链表

不一样的双向链表 链表初识别遍历双向链表参考链接 链表初识别 最近看openharmony的内核源码时看到一个有意思的双向链表&#xff0c;结构如下 typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev; //前驱节点struct LOS_DL_LIST *pstNext; //后继节点 }LOS_DL_LIST;不…

算法:在指定范围内生成随机不重复的位置

问题&#xff1a; 在游戏中&#xff0c;我们经常会遇到以下问题&#xff1a;在指定的范围内生成随机不重复的位置。 比如某次“神官赐福”活动中&#xff0c;需要在城门口生成n个不重复的宝箱。 针对这种问题&#xff0c;我们可以先将范围按照宝箱&#xff08;基本单元格&#…

【代码随想录】刷题Day5

1.链表重复节点删除 82. 删除排序链表中的重复元素 II 前后指针实现 1.做这道题最大的感受就是&#xff1a;不要觉得开辟空间浪费&#xff0c;多用临时变量去记录。越精确越容易成功 2.首先没有节点或者一个节点直接返回 3.因为头部会出现一样元素的情况&#xff0c;以至于我不…

Transformer 位置编码代码解析

Transformer 位置编码代码解析 Transformer 的 Multi-Head-Attention 无法判断各个编码的位置信息。因此 Attention is all you need 中加入三角函数位置编码&#xff08;sinusoidal position embedding&#xff09;&#xff0c;表达形式为&#xff1a; P E ( p o s , 2 i ) …