Hive支持关系型数据库中的大多数基本数据类型,同时也支持关系型数据库中很少出现的3种集合数据类型。
一、数据类型
以下截图内容来自Hive官方文档
1.1 数值类型
Hive数值类型1.2 日期/时间类型
Hive日期/时间类型1.3字符串类型
Hive字符串类型1.4其他类型
Hive其他类型1.5 复杂类型
Hive复杂类型二、文本文件数据编码
2.1 Hive默认的分隔符
Hive默认分隔符2.2 用户自定义分隔符
由于默认的分隔符可读性并不好,所以可以在创建表的时候指定自定义的分隔符(但是行与行之间的分隔符只能是'\n',不能改变)。
Hive自定义分隔符比如可以使用'\t'作为字段的分割,使用','作为集合项的分割,使用':'作为map的key和value之间的分割。后面会给出例子。
三、集合数据类型实战
3.1 创建表
create table employees(
name string,
salary float,
subordinates array<string>,
deductions map<string,float>,
address struct<street:string, city:string, state:string, zip:int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
其中,name是一个简单字符串;salary(薪水)是浮点数;subordinates(下属员工)列表是一个字符串值数组;字段deduction(扣除)是map类型;address(家庭地址)使用struct数据类型存储。
3.2 创建测试数据
john 100000.0 mary,alice Federal Taxes: .2, State Taxes: .05 1 Michigan Ave,Chicago,IL,60600
tracy 100000.0 yram,ecila Federal Taxes: .3, State Taxes: .08 2 Michigan Eva,Bhicago,IL,70700
注:每个字段之间用制表符分割,复制到简书上格式可能有错误。
3.3将数据加载到Hive中
load data local inpath '/home/hadoop/zhb/employees.txt' overwrite into table employees;
结果如下:
插入结果.png
成功插入到Hive表中。
四、读时模式
传统的数据库时写时模式(schema on write),即数据在写入数据库时对模式进行检查。
Hive对底层存储并没有这样的控制,所以,对于Hive查询的数据,有很多方式对其进行创建、修改、甚至损坏。因此Hive会在查询时进行验证,也就是读时模式(schema on read)。例如:如果每行记录中的字段个数少于对应的模式中定义的字段个数的话,那么用户将会看到查询结果中有很多的null值。
网友评论