首先按照入门篇(一)环境搭建中的操作启动Hive,本文来介绍Hive中的数据库操作语句。Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。不过老实说,如果你是数据分析师,本文的内容你在工作中可能都用不到,因为没有公司会让数据分析师建库或者删库……
show databases;
执行效果如下:
hive (default)> show databases;
OK
database_name
default
Time taken: 2.789 seconds, Fetched: 1 row(s)
create database 数据库名;
执行效果如下:
hive (default)> create database hive_in_action;
OK
Time taken: 1.602 seconds
hive (default)> show databases;
OK
database_name
default
hive_in_action
Time taken: 0.172 seconds, Fetched: 2 row(s)
hive (default)>
#查询库名以hive开头的所有数据库
show databases like 'hive.*';
执行效果如下:
hive (default)> create database hive_test;
OK
Time taken: 0.225 seconds
hive (default)> show databases;
OK
database_name
default
hive_in_action
hive_test
Time taken: 0.025 seconds, Fetched: 3 row(s)
hive (default)> show databases like 'hive.*';
OK
database_name
hive_in_action
hive_test
Time taken: 0.027 seconds, Fetched: 2 row(s)
如果要创建的数据库名已经存在的话,将会抛出一个错误信息,如下:
hive (default)> create database hive_test;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database hive_test already exists
hive (default)>
使用如下语避免在这种情况下抛出错误信息:
create database if not exists 数据库名;
执行效果如下:
hive (default)> create database if not exists hive_test;
OK
Time taken: 0.113 seconds
hive (default)>
describe database 数据库名;
执行效果如下:
hive (default)> describe database hive_test;
OK
db_name comment location owner_name owner_type parameters
hive_test hdfs://hadoop:9000/usr/hive/warehouse/hive_test.db root USER
Time taken: 0.29 seconds, Fetched: 1 row(s)
desc database 数据库名;
执行效果如下:
hive (default)> desc database hive_test;
OK
db_name comment location owner_name owner_type parameters
hive_test hdfs://hadoop:9000/usr/hive/warehouse/hive_test.db root USER
Time taken: 0.29 seconds, Fetched: 1 row(s)
用户建库时可以为数据库增加一些和其相关的键值对属性信息,键值对内容可完全自定义(爱写啥写啥)。
create database 数据库名
with dbproperties('creator' = 'hzy', 'date=' = '2019-04-12');
查询时使用如下语句:
desc database extended 数据库名;
执行效果如下:
hive (default)> create database hive_hzy
> with dbproperties('creator' = 'hzy', 'date=' = '2019-04-12');
OK
Time taken: 0.37 seconds
hive (default)> desc database extended hive_hzy;
OK
db_name comment location owner_name owner_type parameters
hive_hzy hdfs://hadoop:9000/usr/hive/warehouse/hive_hzy.db root USER {date==2019-04-12, creator=hzy}
Time taken: 0.153 seconds, Fetched: 1 row(s)
hive (default)>
用户建库时可以为数据库增加注释,注释一样爱写啥写啥。
create database 数据库名
comment 'database for test';
执行效果如下:
hive (default)> create database hive_test
> comment 'database for test';
OK
Time taken: 0.343 seconds
hive (default)> describe database hive_test;
OK
db_name comment location owner_name owner_type parameters
hive_test database for test hdfs://hadoop:9000/usr/hive/warehouse/hive_test.db root USER
Time taken: 0.367 seconds, Fetched: 1 row(s)
hive (default)> desc database hive_test;
OK
db_name comment location owner_name owner_type parameters
hive_test database for test hdfs://hadoop:9000/usr/hive/warehouse/hive_test.db root USER
Time taken: 0.029 seconds, Fetched: 1 row(s)
use 数据库名;
执行效果如下:
hive (default)> use hive_in_action;
OK
Time taken: 0.107 seconds
hive (hive_in_action)>
进入HIve后,如果用户没有显式指定数据库,那么将会使用默认的数据库default,且默认情况下是不会显示当前所在数据库的,通过输入如下命令设置hive.cli.print.current.db为true,即可显示,此命令默认为false,即不显示。
set hive.cli.print.current.db=true;
执行效果如下:
hive (default)> set hive.cli.print.current.db=false;
hive> set hive.cli.print.current.db=true;
hive (default)>
正所谓从删库到跑路,此乃终极大招,需谨记,啊哈哈哈。
当数据库中没有表时,可使用如下命令直接删除。
drop database 数据库名;
执行效果如下:
hive (default)> drop database hive_test;
OK
Time taken: 1.201 seconds
hive (default)>
默认情况下,Hive不允许删除一个里面有表存在的数据库,如果想删除数据库,要么先将数据库中的表全部删除,此时可以使用CASCADE关键字,使用该关键字后,Hive会自己将数据库下的表全部删除。慎用慎用。
drop database 数据库名 cascade;
执行效果如下:
hive (default)> use hive_hzy;
OK
Time taken: 1.602 seconds
hive (hive_hzy)> drop database hive_hzy;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database hive_hzy is not empty. One or more tables exist.)
hive (hive_hzy)> drop database hive_hzy cascade;
OK
Time taken: 2.491 seconds
hive (hive_hzy)> show databases;
OK
database_name
default
hive_in_action
hive_test
Time taken: 0.656 seconds, Fetched: 3 row(s)
hive (hive_hzy)>
能看到这里的同学,就右上角点个赞顺便关注我吧,3Q~