DDL 语句:数据库模型定义语言,用于定义数据库、表的结构。
DDL 语句不仅可以操作数据库,也可以操作数据表。
DDL 库操作
创建数据库
注意一定要加上 if not exists
,避免报错。
1 | create database if not exists db_hive ; |
创建数据库,并指定 HDFS 的存储路径
1 | create database if not exists db_hive2 location '/db_hive2.db'; |
查询数据库
1 | hive (default)> show databases; |
模糊查询库
1
2
3
4
5
6 hive (default)> show databases like 'db_hive*';
OK
database_name
db_hive
db_hive2
Time taken: 0.01 seconds, Fetched: 2 row(s)
查看数据库详情
1 | hive (default)> desc database db_hive; |
修改数据库
可以使用 ALTER DATABASE 没了为某个数据库设置键值对属性(dbpeoperties),来描述这个数据库的属性信息。
数据库的其他元数据信息都是不可更改的,包括数据吗名和数据库所在目录位置。
1 | hive (default)> alter database db_hive set dbproperties('createtime'='20191230'); |
extended 可以查看附加值
1
2
3
4
5 hive (default)> desc database extended db_hive;
OK
db_name comment location owner_name owner_type parameters
db_hive hdfs://hadoop02:9000/user/hive/warehouse/db_hive.db root USER {createtime=20191230}
Time taken: 0.013 seconds, Fetched: 1 row(s
删除数据库
1 | hive (default)> drop database is not exists db_hive; |
强制删除数据库
如果数据库中有数据,可以使用 CASCADE
命令强制删除。
1 | hive (default)> drop database is not exists db_hive2 cascade; |
DDL 表操作
建表语法
1 | CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name |
建表语法解释
CREATE TABLE
创建一个指定名字的表,如果表名称已存在,则会出现异常;可以通过 IF NOT EXISTS
来规避。
EXTERNAL
可以让用户创建一个 外部表
,在建表的同时指定一个指向实际数据的路径。
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何更改。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据。
COMMENT
为表和列添加注释
PARTITIONED BY
创建分区表
CLUSTERED BY
创建分桶表,按照列进行分区
SORTED BY
排序规则,不常用,按照列进行分桶
ROW FORMAT
行格式化规则
包括:DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
SERDE serde_name [WITH SERDEPROPERTIES](peoperty_name=property_value, ...)
在建表时可以自定义 serDe(Serialize、Deserialize 的简称,目的是用于序列化、反序列化),或者使用自带的 serDe。
如果没有指定 ROW FORMAT 或 ROW FORMAT DELIMITED,将会使用自带的 serDe。
在建表时,还需要为表指定列,在指定表的列的同事也会指定自定义的 serDe,Hive 通过 serDe 确定表的具体的列的数据
STORED AS
指定存储文件类型。常用类型为: SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)。
如果是纯文本数据,可以使用 STORED AS TEXTFILE
。如果数据需要压缩,可以使用 STORED AS SEQUENCEFILE
LOCATION
指定表再 HDFS 上的存储位置
LIKE
允许用户复制现有的表结构,但是不复制数据
查看表信息
以之前的 peopel
表为例。
1 | hive (default)> show create table people; |
可以看到,除了建表时手动写的一些语句外,还增加了 STORED AS
、LOCATIONM
、TBLPROPERTIES
等。