hive操作大全

目录

创建和查询数据库

查询数据库

修改数据库

切换数据库

删除数据库


创建和查询数据库

  • 掌握常用的建库语句
  • 掌握查询数据库的常用语句
  • 任务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 关键字即可将非空数据库成功删除。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值