大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

<<Hive编程指南>>学习笔记(一)----数据类型和文件格式

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值。