运行环境若发现文章有误,敬请指出,感谢
文章目录
运行环境DDL 数据定义操作
数据库DDL操作
增——新增数据库删——删除数据库改——修改数据库查——查询数据库 切换数据库(内部/外部)结构表DDL操作
管理表与外部表
查询、切换管理表与外部表 增——新增数据表删——删除数据表改——修改数据表 列DDL操作
增删——新增/删除列改——修改列
CentOS 7Hadoop3.3.0JDK8Hive 3.1.2 DDL 数据定义操作
数据库DDL操作
增——新增数据库
参考资料
标准语法:
CREATE [REMOTE] (DATAbase|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [MANAGEDLOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
参数说明:
| 参数 | 描述 |
|---|---|
| COMMENT | 对于数据库的描述 |
| LOCATION | 设置数据库位于HDFS的位置 |
| MANAGEDLOCATION | 设置管理数据库的位置 |
| WITH DBPROPERTIES (property_name=property_value, …) | 设置更多的数据库参数 |
案例:
(1) 创建uni数据库
hive (default) > create database uni;
(2) 创建uni数据库,若已存在则不创建
hive (default) > create database uni if not exists
(3) 创建uni数据库,并指定其在HDFS里的存储位置
hive (default) > create database uni location '/uni.db';删——删除数据库
参考资料
标准语法:
DROp (DATAbase|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
案例:
(1) 删除之前创建的uni数据库
hive (default) > drop database uni;
(2) 删除数据库uni,若不存在则不删除
hive (default) > drop database if exists uni;
(3) 删除不为空的数据库,使用CASCADE/cascade 强制删除
hive (default) > drop database uni cascade;改——修改数据库
参考资料
标准语法:
ALTER (DATAbase|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); -- (Note: SCHEMA added in Hive 0.14.0) ALTER (DATAbase|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0) ALTER (DATAbase|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later) ALTER (DATAbase|SCHEMA) database_name SET MANAGEDLOCATION hdfs_path; -- (Note: Hive 4.0.0 and later)
案例: 修改数据库的描述信息并查看
hive (default) > create database if not exists uni;
hive (default) > alter database uni set dbproperties('createtime'='20220323');
hive (default) > desc database extended uni;
运行结果:
参考资料
标准语法:
SHOW (DATAbaseS|SCHEMAS) [LIKE 'identifier_with_wildcards'];
案例:
(1) 显示所有数据库
hive (default) > show databases;
(2) 过滤显示的数据库
hive (default) > create database if not exists uni; hive (default) > show database like 'un*';
(3) 查看数据库信息
hive (default) > desc database uni;
(4) 查看数据库的详细信息
hive (default) > desc database extended uni;切换数据库(内部/外部)
参考资料
标准语法:
use database_name; use default;
案例:切换到hive提供的默认数据库
hive (uni)> use default;结构表DDL操作
参考资料
管理表与外部表在Hive中数据库的数据表分为两种,分别是 管理表 和 外部表。
Hive 创建的表默认为 管理表,有时称为内部表。
对于管理表,Hive会控制其中数据的生命周期,Hive默认情况下会将这些表的数据存储在配置项
hive.metastore.warehourse.dir中,默认为HDFS里的 /user/hive/warehouse 位置。
管理表和外部表的最大区别就是:当删除管理表(默认)后,其所在的HDFS存储内容也会被删除。
而后者外部表就不会,外部表仅仅会删除元数据,而不会删除HDFS里的完整数据。
这意味着管理表不适合跟其他工具共享。
使用场景: 每天将收集到的网站日志定期流入HDFS文本文件,在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表/管理表存储。
案例:分别创建班级和学生外部表,通过HDFS向表中导入数据,之后在hive里删除表,观察HDFS里的表数据是否跟着删除(不会删除HDFS的数据)
(1) 准备原始数据
class.txt 班级数据(班级ID、班级号)
1 1 2 2 3 3
student.txt 学生数据(学生ID、学生名称、学生年龄、所属班级ID)
1 uni 21 1 2 qaq 20 2 3 pistar 18 3 4 hhh 20 1
(2) 创建班级和学生的外部表
hive (default) > create external table if not exists class( hive (default) > id int, cid int) hive (default) > row format delimited fields terminated by 't'; hive (default) > create external table if not exists student( hive (default) > id int, name string, age int, cid int) hive (default) > row format delimited fields terminated by 't';
(3) 上传本地文件到HDFS
hive (default)> dfs -put /opt/module/hive/data/class.txt /user/hive/warehouse/class; hive (default)> dfs -put /opt/module/hive/data/student.txt /user/hive/warehous/student;
(4) 查看表以及内容
hive (default) > show tables; hive (default) > desc formatted class;
运行结果:
查看通过上传到HDFS插入的数据:
hive (default) > select * from class; hive (default) > select * from student;
运行结果:
可以发现里面出现了NULL,说明原先的文本中有多余的空格,导致Hive识别失败。
此时执行删除表的语句,然后在使用hdfs的命令查看表的内容是否存在
hive (default) > drop table class; hive (default) > drop table student; hive (default) > dfs -ls /user/hive/warehouse/;
运行结果:
标准语法:
查询数据表的类型(内部or外部)
desc formatted table_name;
修改内部表为外部表
alter table table_name set tblproperties('EXTERNAL'='TRUE');
修改外部表为内部表
alter table table_name set tblproperties('EXTERNAL'='FALSE');
注:这里的EXTERNAL和值TRUE和FALSE都必须为大写
增——新增数据表参考资料
标准语法:
CREATE [REMOTE] (DATAbase|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [MANAGEDLOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
案例:
(1) 创建表(默认为管理表)
hive (default) > create table if not exists uni(id int, name string);
(2) 根据表uni的查询结果创建表student
hive (default) > create table if not exists student as select id, name from uni;
(3) 根据已存在的表student结构创建空表
hive (default) > create table if not exists student2 like student;删——删除数据表
标准语法:
DROP TABLE table_name改——修改数据表
标准语法:
修改表名:
DROP TABLE [IF EXISTS] table_name [PURGE];列DDL操作
增删——新增/删除列
参考资料
标准语法:
ALTER TABLE table_name [PARTITION partition_spec] -- (Note: Hive 0.14.0 and later) ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT] -- (Note: Hive 1.1.0 and later)
ADD表示新增一个字段,字段位置在所有列后面(除partition列外)。
REPLACE则是表示替换表中所有字段,当选择该配置且后面的COLUMNS为空时,则表示为删除所有列
改——修改列标准语法:
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];



