创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
建库语句比较简单,SCHEMA 和 DATABASE 是可互换的。COMMENT(可选)指定数据库的注释信息,LOCATION(可选)指定数据库的HDFS存储路径,如果不指定将使用配置项hive.metastore.warehouse.dir指定的路径。
示例
>CREATE DATABASE test;
>CREATE SCHEMA IF NOT EXISTS test1;
示例:指定注释、位置、库属性等信息
>CREATE SCHEMA IF NOT EXISTS test2
COMMENT "create database"
LOCATION "/tmp/"
WITH DBPROPERTIES ('creator'='user','date'='2019-09-01');
可以使用 SHOW CREATE DATABASE 语句可以查看建库DDL:
> show create database test1;
+-------------------------------------------------+
| createdb_stmt |
+-------------------------------------------------+
| CREATE DATABASE `test1` |
| LOCATION |
| 'hdfs://ns001/user/hive/warehouse/test1.db' |
+-------------------------------------------------+
:> show create database test2;
+---------------------------+
| createdb_stmt |
+---------------------------+
| CREATE DATABASE `test2` |
| COMMENT |
| 'create database' |
| LOCATION |
| 'hdfs://ns001/tmp' |
| WITH DBPROPERTIES ( |
| 'creator'='user', |
| 'date'='2019-09-01') |
+---------------------------+
查看数据库
使用SHOW查看数据库
使用SHOW (DATABASES|SCHEMAS) 可以列出所有在metastore定义的数据库。
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
LIKE子句是可选的,可以使用正则表达式筛选数据库的列表。正则表达式中的通配符只能是匹配任意字符的"*“或表示可选的”|"。例如"employees"、“emp*”、“emp*|*ee”,所有这些都会与名为"employees"的数据库相匹配。
示例
> show databases;
+----------------+
| database_name |
+----------------+
| db1 |
| db2 |
| default |
| test |
| test1 |
| test2 |
+----------------+
> show databases like "test*";
+----------------+
| database_name |
+----------------+
| test |
| test1 |
| test2 |
+----------------+
使用DESCRIBE查看数据库
使用DESCRIBE DATABASE 语句可以查看数据库的名称、注释信息(如果有)、文件系统中的存储位置。
DESCRIBE DATABASE [EXTENDED] db_name;
DESCRIBE SCHEMA [EXTENDED] db_name; -- (Hive 1.1.0 及之后)
EXTENDED 会输出数据库的属性,DESCRIBE可以简写为DESC
示例
> DESCRIBE DATABASE test2;
+----------+-----------------------+-------------------+-------------+-------------+-------------+
| db_name | comment | location | owner_name | owner_type | parameters |
+----------+-----------------------+-------------------+-------------+-------------+-------------+
| test2 | create database | location/in/test | hadoop | USER | |
+----------+-----------------------+-------------------+-------------+-------------+-------------+
> DESC DATABASE EXTENDED test2;
+----------+-----------------------+-------------------+-------------+-------------+----------------------------------+
| db_name | comment | location | owner_name | owner_type | parameters |
+----------+-----------------------+-------------------+-------------+-------------+----------------------------------+
| test2 | create database | location/in/test | hadoop | USER | {creator=user, date=2019-09-01} |
+----------+-----------------------+-------------------+-------------+-------------+----------------------------------+
修改数据库
使用ALTER DATABASE语句可以修改数据库,只能修改数据库的DBPROPERTIES、OWNER以及LOCATION
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- ( Hive 2.2.1 之后)
ALTER DATABASE … SET LOCATION 语句并不会将数据库中已经存在的目录移动到新指定的路径下。它不会更改与指定数据库下的任何table/partition关联的位置,只会更改此数据库中新建表的默认父目录。这种行为类似于更改表目录不会将现有分区移动到其他位置。
示例
> ALTER DATABASE test2 SET OWNER user user1;
> ALTER DATABASE test2 SET DBPROPERTIES("creator"="user1");
> ALTER DATABASE test2 SET LOCATION "hdfs://beh001/tmp/hive";
使用数据库
USE database_name;
USE DEFAULT;
示例
> use test2;
可以使用 SELECT current_database() 查看当前使用的是哪个库。
> SELECT current_database();
+--------+
| _c0 |
+--------+
| test2 |
+--------+
删除数据库
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
删除库的默认行为是RESTRICT,也就是如果数据库不空的情况下去删除会失败的。如果使用 CASCADE,那么会在删除库的时候同时将库中的表一起删除,因此使用CASCADE务必要小心。
示例
> DROP DATABASE IF EXISTS test1; --删除数据库test1,如果库中还有表,则删除会失败。
> DROP DATABASE IF EXISTS test1 CASCADE; --会将数据库test1和其中的表全部删除
参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
书籍 Apache Hive Essentials Second Edition (by Dayong Du) Chapter 3