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

news2025/1/21 4:45:53

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;

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

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

相关文章

07_阻塞队列(BlockingQueue)

目录 1. 什么是BlockingQueue 2. 认识BlockingQueue 3. 代码演示 栈与队列概念 栈(Stack)&#xff1a;先进后出&#xff0c;后进先出 队列&#xff1a;先进先出 1. 什么是BlockingQueue 在多线程领域&#xff1a;所谓阻塞&#xff0c;在某些情况下会挂起线程&#xff08;即…

JVM 基本知识

目录 前言 一、JVM 内存区域划分 1.1 程序计数器 1.2 栈 1.3 堆 1.4 方法区 二、 JVM 类加载机制 2.1 类加载需要经过的几个步骤 2.1.1 Loading - 加载 2.1.2 Linking - 连接 2.1.3 initialization&#xff08;初始化&#xff09; 小结 经典面试题 三、JVM 垃圾…

天河新一代,安装OpenCV

1&#xff09;下载 Releases opencv/opencv GitHub 下载一个版本&#xff0c;传上去。 解压&#xff0c;因为只要最基本的功能&#xff0c;所以不需要ctri等包。 2&#xff09; 一些选项 cmake .. -D<选项名1><设定值1> -D<选项名2><设定值2> …

Metasploit Framework-安全漏洞检测工具使用

一款开源的安全漏洞检测工具&#xff0c;简称MSF。可以收集信息、探测系统漏洞、执行漏洞利用测试等&#xff0c;为渗透测试、攻击编码和漏洞研究提供了一个可靠平台。 集成数千个漏洞利用、辅助测试模块&#xff0c;并保持持续更新。 由著名黑客、安全专家H.D. Moore主导开发…

Hadoop学习笔记(二)环境配置与服务器克隆

VMware与Centos7的安装 这部分很简单&#xff0c;只需要按照常规步骤一步一步安装即可。最后出现如下画面便完成了。 如果出现了一打开 “开启虚拟机” 就蓝屏的情况。可以试试将VMware更新到16的版本以上。 对虚拟机进行一系列的设置 设置VMware的IP地址 接下来点击 “NAT设…

计算任意时间内课时出现次数以及冲突情况判断

背景 整体由四部分组成&#xff0c;报名时间、报名周期、上课时间、上课周期 通过选择报名时间、报名周期、以及上课时间&#xff0c;去计算在培训周期内总的培训课时&#xff0c;并当上课时间冲突时&#xff0c;给出提示。 需求&#xff1a; 报名时间&#xff08;日期时分&…

分享10个非常好用的绘图工具

无论你是一个专业的插画师&#xff0c;还是一个有创造力的人&#xff0c;想要随时记录生活的灵感&#xff0c;现在你只需要拿起平板电脑或打开电脑浏览器来描述你脑海中的图片。在本文中&#xff0c;我们选择了10个强大、方便、易于使用的在线绘图软件&#xff0c;其中一个必须…

人工智能之配置环境教程一:安装VsCode和Anaconda

人工智能之配置环境教程一&#xff1a;安装VsCode和Anaconda 作者介绍一&#xff0e; 安装VScode编辑器二. 安装Anaconda 作者介绍 孟莉苹&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2021级硕士研究生&#xff0c;张宏伟人工智能课题组。 研究方向&#…

语音特征工程—时域分析

当下主流语音前端算法在特征工程方面&#xff0c;从vad&#xff0c;降噪、降混响到盲源分离&#xff0c;无论是传统做法还是NN做法&#xff0c;大多基于频域。但近年在语音分离领域也看到了利用时域的做法&#xff0c;也取得了不错的效果。 本文从特征工程的角度&#xff0c;对…

jQuery购物车案例模块

<div class"car-header"><div class"w"><div class"car-logo"><img src"img/logo.png" alt""> <b>购物车</b></div></div></div></div><div class"c-…

研究了一个多月ChatGPT我发现了这些!!AI时来了?

好久都没有更新过博客了&#xff0c;大一下是真的很忙碌&#xff0c;属实是真的要崩溃了&#xff0c;但是博主还是坚强的活了下来&#xff0c;好了&#xff0c;进入正题&#xff0c;博主使用了一段时间的chatGPT发现真的可能AI时代将要来临&#xff0c;原本以为gpt能做网页已经…

二十三种设计模式第一篇-设计模式的原则和分类

怎么说&#xff0c;其实我挺讨厌设计模式的&#xff0c;但是不得不说&#xff0c;这东西解决问题确实有一手&#xff0c;并且设计模式确实规范了我们在开发中的代码&#xff0c;并且我们可以使用这二十三种设计模式解决我们碰到的业务问题&#xff0c;并且我们学的框架里边多多…

利用Python操作Mysql数据库

我们在进行Python编程的时候&#xff0c;时常要将一些数据保存起来&#xff0c;其中最方便的莫过于保存在文本文件了。但是如果保存的文件太大&#xff0c;用文本文件就不太现实了&#xff0c;毕竟打开都是个问题&#xff0c;这个时候我们需要用到数据库。提到数据库&#xff0…

怎样从零开始编译一个魔兽世界开源服务端Windows

怎样从零开始编译一个魔兽世界开源服务端Windows 第二章&#xff1a;编译和安装 我是艾西&#xff0c;上期我们讲述到编译一个魔兽世界开源服务端环境准备&#xff0c;那么今天跟大家聊聊怎么编译和安装我们直接进入正题&#xff08;上一章没有看到的小伙伴可以点我主页查看&…

haproxy负载均衡+keepalived高可用

LVS和haproxy、nginx做负载均衡时的区别 调度算法 LVS:轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)、源地址哈希值(sh)、目的地址哈希&#xff08;dh&#xff09; haproxy:轮询&#xff08;roundrobin)、加权轮询&#xff08;static-rr)、最少连接&#xff08…

2023有潜力的新药都有哪些?新药筛选方法总结

2023有潜力的新药都有哪些&#xff1f;这是一道蕴含无限可能性和未知挑战的问题。新药研发是制药公司不断追求的目标&#xff0c;每一次成功都可以带来巨额利润&#xff0c;改善患者生命质量&#xff0c;成就公司声誉。但与此同时&#xff0c;新药研发风险也是极大的&#xff0…

电梯导航栏的实现

点击跳到指定位置类似于电梯导航 .w {width: 1200px;margin: 0 auto; } .fixedtool {position: fixed;top: 100px;left: 50%;margin-left: -676px;width: 66px;background-color: #fff;display: none; }.fixedtool li {height: 32px;line-height: 32px;text-align: center;fo…

基于dsp+fpga的半导体运动台高速数据采集FPGA endac设计(三)

EnDat 双向串行通信协议的实现 数据&#xff08;测量值或参数&#xff09;可以在位置编码器和 EnDat 协议内核之间进行双向传输&#xff0c; EnDat 协议内核的收发单元支持 RS-485 差分信号传输&#xff0c;数据传输与传感伺服控制系统 生成的时钟脉冲同步。传输的数据…

如何将Postman API测试转换为JMeter以进行扩展

许多测试工程师使用Postman进行API测试自动化。他们发现端点&#xff0c;发出请求&#xff0c;创建测试数据&#xff0c;运行回归测试&#xff0c;使用Newman等实现API测试的持续集成。但是&#xff0c;Postman有一定的测试限制。希望获得更多负载测试能力的开发人员&#xff0…

系统集成项目管理工程师 笔记(第10章:项目质量管理)

文章目录 10.1.2 质量管理及其 发展史 35610.1.3 项目质量管理 35810.2.2 规划质量管理的输入 35910.2.3 规划质量管理的工具与技术 3601、成本效益分析法2、质量成本法&#xff08;一致性成本【预防、评价】 和 非一致性成本【内部、外部】&#xff09;3、七种基本质量工具&am…