Hive SQL 之 数据库

1、 Hive 中的数据库本质是一个目录,通常数据库保存在hive.metastore.warehouse.dir所指定的目录下,以.db为后缀,例如testDB.db,该数据库中的表以这个数据库目录的子目录存在。

注:default这个数据库是hive默认的数据库,若不指定数据库,这默认使用该数据库。该数据库没有自己的目录,该数据库中定义的表以hive.metastore.warehouse.dir指定目录的子目录形式存在。

2、 数据库相关的操作

  • 创建数据库
hive> CREATE DATABASE testdb;
# 若testdb数据库已经存在,则会抛出错误信息
# hive> CREATE DATABASE testdb;
# FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database test already exists

# 可以使用`IF NOT EXISTS`语句避免这种情况
hive> CREATE DATABASE IF NOT EXISTS testdb;

  • 查看所有的数据库,可以使用正则表达式匹配
hive> SHOW DATABASES;

# 显示所有以my开头的数据库
hive> SHOW DATABASES LIKE 'my.*'
  • 修改数据库存储路径
    默认是hive.metastore.warehouse.dir指定的目录,可以通过LOCATION关键字来修改。
hive> CREATE DATABASE testdb2 
    > LOCATION '/test/mydbs';
  • 添加以及查看数据库的描述信息
hive> CREATE DATABASE test01
    > COMMENT 'Holds all test tables';
OK
Time taken: 0.132 seconds
hive> DESCRIBE DATABASE test01;
OK
test01	Holds all test tables	hdfs://bigdata111:9000/user/hive/warehouse/test01.db	root	USER	
  • 添加/查看键-值对属性信息
hive> CREATE DATABASE test02
    > WITH DBPROPERTIES(
    > 'creator' = 'biglau',
    > 'date' = '2019-05-29');


hive> DESCRIBE DATABASE EXTENDED test02;
OK
test02		hdfs://bigdata111:9000/user/hive/warehouse/test02.db	root	USER	{date=2019-05-29, creator=biglau}

  • 将某个数据库设置为用户当前工作数据库
hive> USE test01;

在Hive中没有嵌套数据库的概念,所以可以重复使用USE ...命名

所以可以通过设置一个属性值来在显示当前所在数据库
hive.cli.print.current.db=true,(Hive v0.8.0 版本才支持)

hive> set hive.cli.print.current.db=true;
hive (test01)> 
  • 删除数据库
hive (test01)> DROP DATABASEIF EXISTS test01;
Moved: 'hdfs://bigdata111:9000/user/hive/warehouse/test01.db' to trash at: hdfs://bigdata111:9000/user/root/.Trash/Current

ID EXISTS子句是可选的,加了这个语句可以避免因数据库不存在而抛出警告信息。

默认情况下,Hive不允许删除一个包含有表的数据库。这种情况要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后加上CASCADE,这样可以使Hive自行删除数据库的表。数据库删除了,其对应的目录也会被删除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章