栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive 学习笔记(一) DDL数据定义操作常用命令 | 增删改查数据库、数据表、列

Hive 学习笔记(一) DDL数据定义操作常用命令 | 增删改查数据库、数据表、列

若发现文章有误,敬请指出,感谢

文章目录

运行环境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];
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号