Hive之DDL库操作

144 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

第四章 DDL库操作

DDL: Data Definition Language     数据定义语言
DML: Data Manipulation Language   数据操纵语言
DQL :Data Query Language 数据查询语言
分为两大类
    库 :创建库、查看库、删除库、修改库、切换库  等
    表 :创建表、查看表、删除表、修改表、查看某张表的详细信息 等
DDL操作官网链接:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/Alter/UseDatabase

4.1 创建库

语法结构:

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、 创建普通库 
create database myhivedb; 
hive (mydb)> create database myhivedb; 
​
2、 创建库的时候检查存与否 
create database if not exists myhivedb; 
hive (mydb)> create database if not exists myhivedb; 
​
3、 创建库的时候带注释 
create database if not exists myhivedb comment 'create my db named myhivedb'; 
hive (mydb)> create database if not exists myhivedb comment 'create my db named myhivedb'; 
OK
Time taken: 0.021 seconds
​
4、创建库的时候可以指定非默认路径
hive (mydb2)> create database if not exists myhivedb3 comment "myhivedb3 comment" location "/myhivedb3";

4.2 查看库

1、查看有哪些数据库

show databases;
hive (mydb)> show databases;
OK
database_name
default
mydb
myhivedb
Time taken: 0.015 seconds, Fetched: 3 row(s)

2、显示数据库的详细属性信息

语法:

desc  database  [extended]  dbname;

示例:

hive (mydb)> desc database myhivedb;
OK
db_name comment location    owner_name  owner_type  parameters
myhivedb        hdfs://hadoop10/user/hive/warehouse/myhivedb.db root    USER    
Time taken: 0.021 seconds, Fetched: 1 row(s)
hive (mydb)> desc database extended myhivedb;
OK
db_name comment location    owner_name  owner_type  parameters
myhivedb        hdfs://hadoop10/user/hive/warehouse/myhivedb.db root    USER    
Time taken: 0.02 seconds, Fetched: 1 row(s)
​

3、查看正在使用哪个库

select current_database(); 
hive (mydb)> select current_database();
OK
_c0
mydb
Time taken: 0.939 seconds, Fetched: 1 row(s)

4、过滤显示查询的数据库

hive (mydb)> show databases;
OK
database_name
default
mydb
myhivedb
Time taken: 0.018 seconds, Fetched: 3 row(s)
hive (mydb)> show databases like 'my*';
OK
database_name
mydb
myhivedb
Time taken: 0.022 seconds, Fetched: 2 row(s)
hive (mydb)> show databases like "my*";
OK
database_name
mydb
myhivedb
Time taken: 0.015 seconds, Fetched: 2 row(s)
hive (mydb)>

4.3 删除库

语法结构:

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

删除库一系列测试操作:

hive (mydb)> create database myhivedb2;
OK
Time taken: 0.043 seconds
hive (mydb)> use myhivedb2;
OK
Time taken: 0.017 seconds
hive (myhivedb2)> show tables;
OK
tab_name
Time taken: 0.02 seconds
hive (myhivedb2)> create table student(id int, name string, sex string, age int, department string) row format delimited fields terminated by ",";
OK
Time taken: 0.242 seconds
//其实不给数据添加进去,哪怕就是一个一个库下面只有一个空的表,也不能直接删除掉,需要加cascade强制删除。
hive (myhivedb2)> load data local inpath "/home/data/student.txt" into table student;
Loading data to table myhivedb2.student
OK
Time taken: 0.207 seconds
hive (myhivedb2)> drop database myhivedb2;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database myhivedb2 is not empty. One or more tables exist.)
hive (myhivedb2)> drop database myhivedb2 restrict;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database myhivedb2 is not empty. One or more tables exist.)
hive (myhivedb2)> drop database myhivedb2 cascade;
OK
Time taken: 0.24 seconds
hive (myhivedb2)> 

默认情况下,hive 不允许删除包含表的数据库,有两种解决办法:

1、 手动删除库下所有表,然后删除库

2、 使用 cascade 关键字

drop database if exists dbname cascade; 

默认情况下就是 restrict

drop database if exists myhive;
等价于 
drop database if exists myhive restrict;

4.4 切换库

切换库操作:

语法:

use database_name;

示例:

hive (myhivedb2)> use myhivedb;
OK
Time taken: 0.023 seconds

4.5 修改库

语法:

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)

示例:

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

hive (myhivedb)> desc database extended myhivedb;
OK
db_name	comment	location	owner_name	owner_type	parameters
myhivedb		hdfs://hadoop10/user/hive/warehouse/myhivedb.db	root	USER	
Time taken: 0.027 seconds, Fetched: 1 row(s)
hive (myhivedb)> alter database myhivedb set dbproperties('createtime'='20210924');
OK
Time taken: 0.029 seconds
hive (myhivedb)> desc database extended myhivedb;
OK
db_name	comment	location	owner_name	owner_type	parameters
myhivedb		hdfs://hadoop10/user/hive/warehouse/myhivedb.db	root	USER	{createtime=20210924}
Time taken: 0.016 seconds, Fetched: 1 row(s)
hive (myhivedb)> 

其实修改库很少使用啦。



声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。

        落叶飘雪