Hive · 2021年3月28日 0

Hive DDL 操作

Hive 支持大多数传统的 SQL 命令,通过示例来学习掌握 Hive 最常用的 DDL(数据定义语言) 命令。Hive DDL 操作主要分为两种:数据库(Database)和表(Table)。DDL 命令用户创建数据库、表、修改表的结构、删除数据库和表等。

在开始学习之前,确保先启动 Hadoop 集群,在 Hive 主机使用 hive –service hiveserver2& 命令启动 hiveserver2 服务,在客户端执行 beeline -u jdbc:hive2://localhost:10000 进入 Hive Shell 环境。如下代码:

[root@hive001 ~]# hive --service hiveserver2&
[root@hive001 ~]# beeline -u jdbc:hive2://localhost:10000

一、Hive DDL 数据库命令

1.创建数据库

在 Hive 中,CREATE DATABASE 语句用于创建数据库,该语句带有一个可选子句 IF NOT EXISTS,使用此选项仅在数据库不存在时才创建。

  • 如果数据库已经存在,将得到一个错误提示信息:数据库 db_name 已经存在。
  • 要在创建之前检查数据库是否已经存在,使用 IF NOT EXISTS 子句。
  • 可以使用 LOCATION 子句更改数据库的位置。
CREATE DATABASE IF NOT EXISTS emp;

默认情况下,Hive 将数据库存储 HDFS 上的 /user/hive/warehouse 目录下,可以使用下面的命令更改数据库的位置

CREATE DATABASE temp LOCATION '/project/hive/warehouse'

2.查看数据库

Hive 默认包含一个 default 数据库。使用 SHOW DATABASES; 语句可以获取Hive 中的所有数据库。

0: jdbc:hive2://localhost:10000> SHOW DATABASES;
 +----------------+--+
 | database_name  |
 +----------------+--+
 | default        |
 | emp           |
 +----------------+--+
 2 rows selected (0.582 seconds)

3.切换数据库

使用 USE 命令可以为后续所有 HiveQL 语句设置当前数据库。

0: jdbc:hive2://localhost:10000> USE emp;
 OK
 No rows affected (0.212 seconds)

4.查看数据库结构

0: jdbc:hive2://localhost:10000> DESCRIBE DATABASE emp;
0: jdbc:hive2://localhost:10000> DESCRIBE SCHEMA emp;
0: jdbc:hive2://localhost:10000> DESCRIBE DATABASE EXTENDED emp;
0: jdbc:hive2://localhost:10000> DESCRIBE SCHEMA EXTENDED emp;

这些命令输出如下信息:

INFO  : OK
 +----------+----------+--------------------------------------------------+-------------+-------------+-------------+--+
 | db_name  | comment  |                     location                     | owner_name  | owner_type  | parameters  |
 +----------+----------+--------------------------------------------------+-------------+-------------+-------------+--+
 | temp     |          | hdfs://hive001:9000/user/hive/warehouse/emp.db  | anonymous   | USER        |             |
 +----------+----------+--------------------------------------------------+-------------+-------------+-------------+--+
 1 row selected (0.144 seconds)

5.删除数据库

0: jdbc:hive2://localhost:10000> DROP DATABASE emp;
0: jdbc:hive2://localhost:10000> DROP DATABASE emp RESTRICT;
0: jdbc:hive2://localhost:10000> DROP DATABASE emp CASCADE;
  • RESTRICT: 默认情况下,使用 RESTRICT 删除数据库,前提条件是数据库中不存在表或者数据,如存在则删除数据库失败。
  • CASCADE: 无论数据库中是否存在数据都会删除数据库,慎用。

二、Hive DDL 表命令

1.创建表

Hive 支持多种类型的表,如管理(内部)表外部表、临时表和事务表。为了简化演示示例,将创建一个 Hive 内部表。

Hive 管理的表也称为内部表,Hive 在 HDFS 上拥有并管理元数据和实际表数据或者文件。

CREATE TABLE IF NOT EXISTS emp.employee (
id int,
name string,
age int,
gender string )
COMMENT 'Employee Table'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

2.查看表

使用 SHOW TABLES 命令列出数据库中所有的表:

0: jdbc:hive2://localhost:10000> SHOW TABLES;           # 显示当前数据库中的所有表
0: jdbc:hive2://localhost:10000> SHOW TABLES in emp;    # 显示某个数据库中的所有表

3.查看表结构

使用 DESCRIBE TABLE 命令表的结构:

0: jdbc:hive2://localhost:10000> DESCRIBE employee;
 OK
 +-----------+------------+----------+--+
 | col_name  | data_type  | comment  |
 +-----------+------------+----------+--+
 | id        | int        |          |
 | name      | string     |          |
 | age       | int        |          |
 | gender    | string     |          |
 +-----------+------------+----------+--+
 4 rows selected (0.172 seconds)

想要获取更多信息可以尝试以下命令:

0: jdbc:hive2://localhost:10000> DESCRIBE FORMATTED employee;
0: jdbc:hive2://localhost:10000> DESCRIBE EXTENDED employee;

4.清空表

TRUNCATE TABLE 用于截断表,这意味着它删除表的所有内容和表的结构:

0: jdbc:hive2://localhost:10000> TRUNCATE TABLE employee;

5.修改表

使用 ALTER TABLE 命令对表进行重命名:

0: jdbc:hive2://localhost:10000> ALTER TABLE employee RENAME TO employee2;

6.删除表

Drop TABLE 用于从 Hive 数据库中删除表:

0: jdbc:hive2://localhost:10000> DROP TABLE employee2;
0: jdbc:hive2://localhost:10000> DROP TABLE emp.employee2;
0: jdbc:hive2://localhost:10000> DROP TABLE IF EXISTS employee2 PURGE;