Hive 删除包含表的数据库

默认情况下是不允许直接删除一个有表的数据库,那该如何删除呢?

当删除一个hive 数据库时,若该 数据库时包含表,则会提示不能删除。

hive> drop  database bigdata;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
InvalidOperationException(message:Database bigdata is not empty. One or more tables exist.)

用户要么先删除数据库中的表,要么再删除数据库;要么在删除命令的最后面加上关键字CASCADE ,这样可以使hive自行先删除数据库中的表;

hive> DROP DATABASE bigdata CASCADE;
OK
Time taken: 2.499 seconds
hive> show databases;
OK
default
Time taken: 0.025 seconds, Fetched: 2 row(s)

加上cascade以后可以了,会删除带表的权限。

 

常用的shell命令

1、显示当前数据库名称

如果在一个数据库很多的环境下工作,需要 在不同的库之间切来切去(手动敲查询的时候全使用dbName.table可不是什么好主意…),可能一不小心就忘记自己当前在哪个数据库下了,可以通过设置一个属性改变当前的命令提示符,更专业的说法是prompt(用过CLI界面的应该对这个概念很熟悉),通过设置hive.cli.print.current.db属性可以在hive cli中显示当前数据库的名称,比如当前的数据库名称是foo:

set hive.cli.print.current.db=true

image

创建数据库

create database foo;

create database if not exists foo;

create database foo location '/db/foo';

显示数据库

show databases ;

show databases like 'foo.*';

 

显示创建数据库详细信息

show create database foo ;

image

hive为每一个数据库创建一个目录,这个数据库中的表将会以子目录的形式放在这个数据库目录下

有一个例外就是default数据库中的表,default数据库没有自己的目录,所以是直接放在/user/hive/warehouse下面的:

Hive 删除包含表的数据库_第1张图片

同样的,当创建数据库如果没有指定存储位置,默认就是在/user/hive/warehouse/下的:

Hive 删除包含表的数据库_第2张图片

数据库描述信息

在创建数据库时可以指定描述性信息:

create database foo comment 'this is foo database';

通过describe database可以查看到数据库的详细信息:

describe database foo;

Hive 删除包含表的数据库_第3张图片

数据库键值对信息

数据库可以有一些描述性的键值对信息,在创建时添加:

create database foo with dbproperties ('own'='cc''day'='20180120');

查看数据库的键值对信息:

describe database extended foo;

image

要修改数据库的键值对信息:

alter database foo set dbproperties ('k1'='v1''k2'='v2');

image

删除数据库

drop database if exists foo;

见最上方!

 

你可能感兴趣的:(大数据,Hive)