目录
创建和查询数据库
查询数据库
修改数据库
切换数据库
删除数据库
创建和查询数据库
- 掌握常用的建库语句
- 掌握查询数据库的常用语句
- 任务1:创建数据库
- 任务2:查询数据库
1.1 建库语法结构
CREATE(DATABASE| SCHEMA)[IFNOTEXISTS] database_name
[COMMENT'database_comment']
[LOCATION 'hdfs_path']
[WITHDBPROPERTIES('property_name'= 'property_value',...)];
database 和 schema 的使用是可以互换的,它们的意思相同。
建库语句解析:
- comment:可以为数据库增加描述信息;
- location:指定数据库在HDFS上的存储位置,默认地址:/user/hive/warehouse/db_name.db/...;
- with dbproperties:指定数据库属性。
1.2 建库语句
1. 创建普通数据库
创建一个数据库,数据库在HDFS上默认的存储路径是/user/hive/warehouse/db_name.db。
hive (default)> createdatabasetest;
执行结果如下所示:
图1
2. 创建库时检查是否存在
避免要创建的数据库发生已经存在的错误,增加 if not exists 判断。仅当名为 test 的数据库不存在时才创建:
hive (default)> createdatabaseifnotexiststest;
执行结果如下所示:
图2
3. 创建带注释的数据库
在创建数据库时可以使用 comment 指定描述信息:
hive (default)> createdatabaseifnotexiststest2 comment'learning hive';
通过describe database可以查看到数据库的详细信息:
hive (default)> describedatabasetest2;
执行结果如下所示:
图3
4. 指定数据库位置
我们可以在创建数据库时指定数据库在HDFS上存放的位置,默认的数据库存放路径是在 HDFS 的 /user/hive/warehouse 目录下:
hive (default)> createdatabaseifnotexiststest3 location '/mydb/test3.db';
指定数据库 test3 在 HDFS 上的存放位置为 /mydb/test3.db,效果如下所示:
图4
5. 创建带属性的数据库
数据库可以有一些描述性的键值对信息,在创建数据库时使用with dbproperties进行指定:
hive (default)> createdatabaseifnotexiststest4
> withdbproperties('creator'='root','date'='2020-05-13');
查看数据库的键值对信息:
hive(default)> describe database extended test4;
执行结果如下所示:
图5
查询数据库
2.1 语法结构
SHOW(DATABASES| SCHEMAS) [LIKE'identifier'];
语句解析:
- like:使用 like 从句利用正则表达式对数据库进行过滤,只是通配符仅仅能是*(任意字符)或者|(或选择),通配符必须要使用单引号。
2.2 查库语句
1. 显示数据库
查看已经创建的数据库:
hive (default)> showdatabases;
执行结果如下所示:
图6
2. 过滤显示查询的数据库
如果数据库非常多,可以使用正则表达式来过滤数据库列表。正则表达式中的通配符只能是 *(任意字符)或“|”(或选择),另外,通配符必须要使用单引号。例如:查询以 “d” 开头或者以 “t” 结尾 的数据库:
hive (default)> showdatabaseslike'd*|*t';
执行结果如下所示:
图7
3. 查看数据库详情
通过describe database [extended]可以查看到数据库的详细属性信息:
hive (default)> describedatabase[extended] test4;
执行结果如下所示:
图8
4. 查看当前数据库
可以使用如下命令查看正在使用的是哪个数据库:
hive (default)> selectcurrent_database();
执行结果如下所示:
图9
5. 查看创库详细语句
我们可以使用 show create database 语句查看创建数据库的详细语句:
hive (default)> showcreatedatabasetest4;
执行结果如下所示:
图10
从上图可以看出,Hive为每一个数据库创建一个目录,默认的存储地址为 /user/hive/warehouse/db_name.db,这个数据库中的表将会以子目录的形式放在这个数据库目录下。
- 掌握修改数据库属性的相关命令
- 知晓如何切换数据库
- 掌握删除数据库的命令
任务清单
- 任务1:修改数据库
- 任务2:切换数据库
- 任务3:删除数据库
修改数据库
1.1 语法结构
# 修改数据库属性ALTER(DATABASE|SCHEMA) database_name SETDBPROPERTIES('property_name'= 'property_value',...);
# 修改数据库的用户或角色ALTER(DATABASE|SCHEMA) database_name SETOWNER [USER| ROLE] user_or_role;
# 修改数据的存储位置ALTER(DATABASE|SCHEMA) database_name SETLOCATION hdfs_path; #(注:Hive 2.2.1,2.4.0 及更高版本)
database 和 schema 的使用是可以互换的,它们的意思相同。
alter database ... set location 语句不会将数据库当前目录的内容移动到新指定的位置。它不会更改与指定数据库下的任何表/分区关联的位置。它只更改为该数据库添加新表的默认父目录。这种行为类似于更改表目录不会将现有分区移动到其他位置。
关于数据库的其他元数据不能更改,包括数据库名和数据库所在的目录位置(本Hive版本2.3.4)。
1.2 修改语句
1. 为库增添属性
用户可以使用 alter database 命令为某个数据库的 dbproperties 设置键值对属性值,来描述这个数据库的属性信息。
首先,我们创建一个普通数据库,创库语句如下所示:
hive (default)> createdatabasetest;
执行结果如下所示:
图1
之后,我们为 test 数据库增添 'createtime'='2020-05-14' 的键值对属性:
hive (default)> alterdatabasetestsetdbproperties('createtime'='2020-05-14');
执行结果如下所示:
图2
最后,通过describe database extended查看到数据库的详细属性信息:
hive (default)> describedatabaseextendedtest;
执行结果如下所示:
图3
2. 为库修改属性
我们可以为数据库增添属性,同样也可以修改现有的属性值,现在我们将数据库 test 的 'createtime' 属性的值修改为'2020-5-20':
hive (default)> alterdatabasetestsetdbproperties('createtime'='2020-05-20');
查看修改之后的属性值:
hive (default)> describedatabaseextendedtest;
执行结果如下所示:
图4
3. 修改用户或角色
因为当前我们使用root用户登录的 Hive,所以 test 数据库默认的拥有者是 root,我们可以使用alter database 命令将 test 数据库的用户或者角色修改为 hongya:
hive (default)> alterdatabasetestsetowner userhongya; # 修改用户hive (default)> alterdatabasetestsetowner rolehongya; # 修改角色
通过describe database可以查看到数据库的详细信息:
hive (default)> describedatabasetest;
执行结果如下所示:
图5
切换数据库
默认使用的 default 数据库,我们可以使用 use 命令切换到任意已经存在的数据库中:
hive (default)> usetest;
执行结果如下所示:
图6
删除数据库
3.1 语法结构
DROP(DATABASE|SCHEMA) [IFEXISTS] database_name [RESTRICT | CASCADE];
默认行为是 restrict,如果数据库不为空,drop database 将失败。
要想删除不为空的数据库,需要使用 drop database ... cascade。
3.2 删除语句
1. 删除空数据库
我们可以使用drop database删除空数据库 test:
hive (default)> dropdatabasetest;
执行结果如下所示:
图7
2. 删除库时检查是否存在
避免删除数据库时发生数据库不存在的错误,我们可以增加 if exists 判断。仅当名为 test 的数据库存在时才删除:
hive (default)> dropdatabaseifexiststest;
执行结果如下所示:
图8
3. 删除非空数据库
默认情况下,Hive 不允许删除包含表的数据库,有两种解决办法:
(1)手动删除库下所有表,然后删除库;
(2)使用 cascade 关键字。
hive (default)> dropdatabaseifexiststestcascade;
执行结果如下所示:
图9
从上图可以看出,我们在删除数据库 test 时,提醒 “Database test is not empty”,此时只需要加上cascade 关键字即可将非空数据库成功删除。