1. Hive SQL 数据定义语言(DDL) 概述
1.1 DDL语法的作用
数据定义语言
(Data Definition Language, DDL
),是 SQL 语言集中对数据库内部的对象结构进行创建,删除,修改
等的操作语言, 这些数据库对象包括database( schema)、 table、 view、 index 等。核心语法由 CREATE
、 ALTER
与 DROP
三个所组成。 DDL 并不涉及表内部数据的操作 。
在某些上下文中,该术语也称为数据描述语言,因为它描述了数据库表中的字段和记录。
1.2 Hive 中DDL的使用
Hive SQL(HQL)与SQL的语法大同小异,基本上是相通的。只不过在学习HQL语法的时候,特别要注意Hive自己特有的语法知识点,比如partition相关的DDL操作。
基于Hive的设计、使用特点,HQL中create语法(尤其create table)将是学习掌握DDL语法的重中之重
。可以说建表是否成功直接影响数据文件是否映射成功,从而影响后续是否可以基于SQL分析数据。
2. Hive DDL建表基础
2.1 完整建表语法树
蓝色字体
是建表语法的关键字,用于指定某些功能。
[]
中括号的语法表示可选。
|
表示使用的时候,左右语法二选一。
建表语句中的语法顺序要和上述语法规则保持一致。
2.2 Hive数据类型详解
2.2.1 整体概述
Hive中的数据类型指的是Hive表中的列字段类型。Hive数据类型整体分为两个类别:原生数据类型
(primitive data type)和复杂数据类型
(complex data type)。
原生数据类型包括:数值类型、时间类型、字符串类型、杂项数据类型;
复杂数据类型包括:array数组、map映射、struct结构、union联合体。
关于Hive的数据类型,需要注意:
英文字母大小写不敏感
;
除SQL数据类型外,还支持Java数据类型
,比如:string;
int
和string
是使用最多的,大多数函数都支持;
复杂数据类型的使用通常需要和分隔符指定语法配合使用。
如果定义的数据类型和文件不一致,hive会尝试隐式转换,但是不保证成功。
2.2.2 原生数据类型
Hive支持的原生数据类型如下图所示:
2.2.3 复杂数据类型
2.2.4 数据类型隐式、显式转换
与SQL类似,HQL支持隐式和显式类型转换。
原生类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。
下表描述了类型之间允许的隐式转换:
显式类型转换使用CAST函数。
cast (数据字段 as 新类型)
例如,CAST('100’as INT)会将100字符串转换为100整数值。 如果强制转换失败,例如CAST('INT’as INT),该函数返回NULL。
3. Hive DDL其他语法
3.1 Database|schema(数据库) DDL操作
3.1.1 Create database
Hive中DATABASE的概念和RDBMS中类似,我们称之为数据库。在Hive中, DATABASE和SCHEMA是可互换的
,使用DATABASE或SCHEMA都可以。
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
COMMENT:数据库的注释说明语句。
LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse 。
WITH DBPROPERTIES:用于指定一些数据库的属性配置。
下面创建一个数据库tb_1:
create database