HiveQL DDL—数据库

创建数据库

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

发布了57 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/102054585