本篇主要讲的是HQL DDL语言。
DDL数据定义语言主要是针对表的。其重要程度直接关系到表和文件能否映射成功。
主要讲以下几点。
1.建表语句-表存在忽略异常。
--第一次建表
create table t(
id int,
name string,
age int
);
--当再次执行建表语句时就会报错
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. AlreadyExistsException(message:Table t already exists) (state=08S01,code=1)
--如果建表时加上 if not exists则会忽略异常。
2.建表语句数据类型。
- hive除了支持SQL数据类型外还支持java数据类型。
- 除了支持基础数据类型外还支持复合数据类型(array数组和map映射)。
- 在建表时表的字段类型和文件的类型要保持一致,如果不一致,hive会尝试隐式转换,如果转换失败则会显示null。
3.建表时分割符指定语法。
语法格式:
ROW FORMAT DELIMITED | SERDE
ROW FORMAT DELIMITED 表示使用LazySimpleSerDe类进行序列化解析数据
ROW FORMAT SERDE 表示使用其他SerDe类进行序列化解析数据
ROW FORMAT DELIMITED具体的子语法。
row format delimited
[fields terminated by char] #指定字段之间的分隔符
[collection items terminated by char] #指定集合元素之间的分隔符
[map keys terminated by char] #指定map类型kv之间的分隔符
[lines terminated by char] #指定换行符
例如:
create table t(
id int,
name string,
win_rate int,
skin_price map<string,int>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':';