Hive04_DDL操作

Hive DDL操作

1 DDL 数据定义

1.1 创建数据库

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

[IF NOT EXISTS] :判断是否存在

[COMMENT database_comment] :注释

[LOCATION hdfs_path]:指定数据库的创建位置

1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db。

hive (default)> create database db_hive;

2)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)

hive (default)> create database db_hive;
FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists
hive (default)> create database if not exists db_hive;

3)创建一个数据库,指定数据库在 HDFS 上存放的位置

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

1.2 查询数据库

1.2.1 显示数据库

1)显示数据库

hive> show databases;

2)过滤显示查询的数据库

hive> show databases like 'db_hive*';
OKsh
db_hive
db_hive_1
1.2.2 查看数据库详情

1)显示数据库信息

hive> desc database db_hive;

2)显示数据库详细信息,extended

hive> desc database extended db_hive;
1.2.3 切换当前数据库
hive (default)> use db_hive;
1.2.4 修改数据库

用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,
来描述这个数据库的属性信息。

hive (default)> alter database db_hive set dbproperties('createtime'='20220830');

在 hive 中查看修改结果

hive> desc database extended db_hive;
1.2.5 删除数据库

1)删除空数据库

hive>drop database db_hive2;

2)如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在

hive> drop database db_hive;
FAILED: SemanticException [Error 10072]: Database does not exist: db_hive
hive> drop database if exists db_hive2;

3)如果数据库不为空,可以采用 cascade 命令,强制删除

hive> drop database db_hive;
FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.exec.DDLTask. 
InvalidOperationException(message:Database db_hive is not empty. One or 
more tables exist.)
hive> drop database db_hive cascade;

2 DDL创建表

2.0 内部表和管理表

在Hive中,表分为内部表(Internal Table)和外部表(External Table),也被称为管理表(Managed Table)和外部表(External Table)。

1 内部表
内部表是Hive自己管理的表,数据存储在HDFS上。创建内部表时,需要指定表的名称、列名、数据类型等信息,并使用CREATE TABLE语句进行创建。同时,在创建表时需要指定存储格式(如ORC、Parquet等)和存储路径等参数。对于内部表,当使用DROP TABLE语句删除表时,表的元数据和数据都会被删除。

内部表建表是不加修饰词即可:

create table database_name.table_name(column1 string,
column2 string)

2 管理表
管理表也存储在HDFS上,但是它们与内部表不同,管理表的元数据是由Hive管理的,并且可以被其他工具访问(如Pig)。创建管理表时,需要指定表的名称、列名、数据类型等信息,并使用CREATE TABLE语句进行创建。与内部表不同的是,创建管理表时无需指定存储格式和存储路径等参数,因为这些参数会被Hive自动管理。对于管理表,当使用DROP TABLE语句删除表时,仅删除表的元数据,而数据仍然保留在HDFS上。

外部表建表时需要加external:

create table external database_name.table_name(column1 string,
column2 string)

总结:
因此,使用内部表时,Hive会自动管理表的数据和元数据,而使用外部表时,则需要人工管理表的数据文件,但是可以让多个 Hive 实例共享同一个数据文件。通常情况下,如果数据只会被 Hive 使用,建议使用内部表,而如果数据需要被其他程序或服务使用,建议使用外部表。

管理表和外部表的使用场景
每天将收集到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过SELECT+INSERT进入内部表。

--创建外部表    定位原始数据
CREATE EXTERNAL TABLE tb_external_user(
id int,
name string,
age int 
)
row format delimited fields terminated by ','
location '/data/user';--创建管理表(内部表)     管理表的创建和使用,管理表直接管理数据, 管理表的目录和表一致
--将数据直接放到管理表的目录下  或者使用 insert into...select... 语法导入数据
CREATE TABLE tb_manager_user(
id int,
name string,
age int
)
row format delimited fields terminated by ',';

2.1 外部表

1 创建一张外部表

create external table if not exists mytest3 (id string);

在这里插入图片描述

在这里插入图片描述

2 删除此外部表

 drop table mytest3;

刷新mysql TBLS,mytest3的保存路径已经被删除。

刷新网页,hdfs中依然存在mytest3!

2.2 管理表与外部表的互相转换

查询表的类型

hive (default)> desc formatted mytest;

修改内部表 mytest为外部表

alter table mytest set tblproperties('EXTERNAL'='TRUE');

修改外部表 mytest为内部表

alter table mytest set tblproperties('EXTERNAL'='FALSE');

注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!

2.3 复制表

(0)原始数据
1001 ss1
1002 ss2
1003 ss3
1004 ss4
1005 ss5
1006 ss6
1007 ss7
1008 ss8
1009 ss9
1010 ss10
1011 ss11
1012 ss12
1013 ss13
1014 ss14
1015 ss15
1016 ss16

(1)普通创建表

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

(2)根据查询结果创建表(查询的结果会添加到新创建的表中

create table if not exists student2 as select id, name from student;

(3)根据已经存在的表结构创建表

create table if not exists student3 like student;

(4)查询表的类型

hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE

2.4 练习

分别创建部门和员工外部表,并向表中导入数据。
(0)原始数据

dept: 部门表
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700
emp:员工表
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10

(1)上传数据到 HDFS

hive (default)> dfs -mkdir /student;
hive (default)> dfs -put /usr/soft/datas/student.txt /student;

(2)建表语句,创建外部表
创建部门表

create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

创建员工表

create external table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by '\t';

(3)查看创建的表

hive (default)>show tables;

(4)查看表格式化数据

hive (default)> desc formatted dept;
Table Type: EXTERNAL_TABLE

(5)删除外部表

hive (default)> drop table dept;

外部表删除后,hdfs 中的数据还在,但是 metadata 中 dept 的元数据已被删除

3 DDL修改表

3.1 重命名表

1)语法

ALTER TABLE table_name RENAME TO new_table_name

2)实操案例

hive (default)> alter table mytest1 rename to mytest2;

3.2 增加/修改/替换列信息

1)语法

(1)更新列

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

示例

alter table mytest change id ids string; 

(2)增加和替换列

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

注:ADD 是代表新增一字段,字段位置在所有列后面(partition 列前),
REPLACE 则是表示替换表中所有字段。

示例:

alter table mytest add columns (name string); # 新增一列
alter table mytest replace columns (names string);

注意:replace对表中的所有列生效

3.3 删除表

hive (default)> drop table mytest;

ADD|REPLACE COLUMNS (col_name data_type [COMMENT
col_comment], …)


***注:ADD 是代表新增一字段,字段位置在所有列后面(partition 列前),***
***REPLACE 则是表示替换表中所有字段。*****示例:**```sql
alter table mytest add columns (name string); # 新增一列
alter table mytest replace columns (names string);

注意:replace对表中的所有列生效

3.3 删除表

hive (default)> drop table mytest;

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

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

相关文章

procise纯PL流程点灯记录

procise纯PL流程点灯记录 一、概述 此篇记录使用procise工具构造JFMQL15T 纯PL工程,显示PL_LED闪烁; 硬件说明如下: 时钟引脚 Pl_CLK: U2 ,IO_L14P_T2_SRCC_34 PL_LED1 : E2, IO_L17P_T2_AD5P_35 PL_LED2: D6, IO_L2N_T0_AD8N_35 PL_LED3 :…

.NET CORE 无法调试 当前不会命中断点

多个项目直接可以设置项目的属性->生成->输出的配置文件输出地址 然后路径统一输入该项目的bib/debug/.netcorex.x就可以了

【JAVA】黑马MybatisPlus 学习笔记【终】【插件功能】

4.插件功能 MybatisPlus提供了很多的插件功能,进一步拓展其功能。目前已有的插件有: PaginationInnerInterceptor:自动分页TenantLineInnerInterceptor:多租户DynamicTableNameInnerInterceptor:动态表名OptimisticL…

【Linux】生产者消费者模型(阻塞队列与环形队列)和POSIX信号量

文章目录 一、生产者消费者模型二、基于BlockingQueue的生产者消费者模型1.BlockQueue.hpp2.Task.hpp3.main.cc 三、POSIX信号量四、基于环形队列的生产消费模型1.RingQueue.hpp2.Task.hpp3.main.cc 一、生产者消费者模型 我们这里举一个例子,来解释生产者消费者模…

【数据结构和算法】寻找数组的中心下标

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…

雷盛红酒和云仓酒庄的优势

多国家采购、多葡萄酒品种、多价位区间的全系列整体品牌形式的雷盛(LEESON)红酒云仓酒庄,具有以下优势: 1.明星代言。雷盛(LEESON)品牌系列葡萄酒有幸邀请著名导演张纪中先生担任品牌代言人,为…

什么是天线OTA,怎么通过OTA数据评估产品射频环境情况

1.1 验证项目 产品的器件布局、走线是否合理、电源输入输出设计、纹波控制,铺地回流设计等是否合理. 通过验证产品的天线OTA_TIS项目来作为评估当前的设计是否合理之一,重点验证低频部分,如Band8段数据. 1.2 什么是天线OTA 是指某无线产品…

Vue3使用的Compostion Api和Vue2使用的Options Api有什么不同?

我们介绍Compostion Api和Options Api的区别之前,先来说一下为什么会推出来Composition Api,解决了什么问题? Vue2开发项目使用Options Api存在的问题 代码的可读性和维护性随着组件的变大业务的增多而变得差代码的共享和重用性存在缺点不支…

【Linux】进程查看|fork函数|进程状态

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

H.264宏块(Macroblock)概念(运动估计、变换编码、环路滤波)

参考文章:音视频高手课系列5-h264编码基础(宏块原理) 参考文章:切片slice与宏块,运动矢量 文章目录 使用videoEye分析视频宏块示例H.264宏块概念1. 宏块的定义2. 运动估计3. 变换编码4. 环路滤波5. 注意:宏块的概念既适用于帧内编…

基于Java Swing的图书管理系统

一、项目总体架构 本项目基于Java Swing框架,数据库采用的是MySQL。项目文件夹如下: 二、项目截图 1.登录和注册界面 2.用户界面 3.管理员管理图书类别 4.管理员管理书籍 5.管理员管理用户 项目总体包括源代码和课程论文,需要源码的…

通过MobaXterm远程连接Anolis

目录 前言: 一.设置ip 二.远程连接 前言: 小编已经阐述了如何安装Anolis系统,如果有不了解的小伙伴可以查看这一篇博客Anolis安装 这篇博客将会讲述如何远程连接Anolis系统。各位看官拿好板凳! 一.设置ip 打开网卡所在位…

西门子PLC通过PROFINET协议与多功能电表通讯

西门子PLC通过PROFINET协议与多功能电表通讯 项目要求 西门子S71200PLC需要通过PROFINET协议和多功能电表通讯,读取线电压、相电压、线电流、相电流、有功功率、无功功率等参数。 项目实施 采用网关NET90-PN-MBT(以下简称“网关”)&#…

怎么提取视频中的背景音乐?

当我们在刷视频的时候,有时候听到一个背景音乐很好听,但是又不知道歌名,比如英语歌,这个时候我们很难找到这首歌,相信有很多朋友会遇到这样的问题,不知道怎么弄,下面小编给大家推荐一些方法帮助…

Pytorch从零开始实战14

Pytorch从零开始实战——DenseNet SENet算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——DenseNet SENet算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook,使用Python3.8&#x…

亿赛通电子文档安全管理系统 linkfilterservice 未授权漏洞

产品简介 亿赛通电子文档安全管理系统,(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资…

Spring企业开发核心框架

文章目录 Spring企业开发核心框架一、框架前言1. 总体技术体系2. 框架概念和理解 二、Spring Framework简介1. Spring 和 SpringFramework2. SpringFramework主要功能模块3. SpringFramework 主要优势 三、Spring IoC 容器概念1. 组件和组件管理概念2. Spring IoC容器和容器实现…

ALS-运动系统解构

角色握持 角色蓝图:将物体绑在手上 动作蓝图: 将握持动画截取一帧(explicit time时间写好) 角色替换 在原人物模型下面加一个骨骼体(先不用添加模型),重命名为bodymesh AI使用流程 新建一…

品牌如何在线上打造“社交货币”?媒介盒子揭秘

品牌的社交货币,是品牌与消费者的共识身份铸造器。竹筒奶茶、Keep奖牌这类的实体产品作为社交货币,每每能够引爆社交平台,那么品牌能否通过线上平台打造“社交货币”呢?接下来就让媒介盒子和大家聊聊。 一、社交货币是什么 社交货…

6.Nacos

1.单机部署 1.1 官网 https://nacos.io/zh-cn/index.html https://github.com/alibaba/Nacos 1.2.版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 1.3.下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.…