Hive学习—数据类型和文件格式

第3章 数据类型和文件格式

Hive 所支持的基本数据类型。

3.1 基本数据类型

数据类型长度例子
TINYINT1byte20
SMALINT2byte20
INT4byte20
BIGINT8byte20
BOOLEANtrue 或者 falseTRUE
FLOAT单精度浮点数3.14159
DOUBLE双精度浮点数3.14159
STRING4byte20
TIMESTRAMP整数,浮点数或者字符串13278823 13278823.123432 ‘2012-02-03 12:34:45
BINARY字节数组

TIMESTRAMPS 表示的是UTC时间。Hive本身提供了不同时区互相转换的内置函数,(to_utc_timestamp函数和from_utc_timestamp函数)
字符串类型的列转换为数值:
s是一个字符串类型,其值为数值
…cast( s AS INT )…

3.2 集合数据类型

Hive 中的列支持使用struct,map和array集合数据类型。

数据类型描述字面语法示例
STRUCT和C语言中的stuct或者“对象”类似,都可以通过“点”符号访问元素内容。例如某个列数据类型是STRUCT{first STRING,last STRING},那第一个元素可以通过 字段名.first来引用struct(‘John’,‘Doe’)
MAPMAP是一组键-值对元组集合,使用数组表示法(例如[key])可以访问元素。例如某个列的数据类型是MAP,其中键->值对是’first’->‘John’和’last’->‘Doe’,那么可以通过字段名*[last]*获取最后一个元素map(‘first’,‘John’,‘last’,‘Doe’)
ARRAY数组是一组具有相同类型和名称的变量的集合。例如,数组值为[‘John’,‘Doe’],那么第2个元素可以通过*数组名[1]*进行引用Array(‘John’,‘Doe’)
CREATE TABLE employee (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,state:STRING>)

其中 name 是一个简单的字符串;salary 使用float浮点数类型;subordinates (下属员工)列表是一个字符串值数组。在该数组中,我们可以认为name是“主键”,因此subordinates中每一个元素都将引用这张表中的另一条记录。对于没有下属的雇员,这个字段对应的值也就是空。
字段 deductions 是一个由键-值对构成的map,记录了每一个扣款项目的扣除额。在传统数据模型中,这个扣除额项目的名称(map的键)可能存在于不同的表中。这些表在存放特定扣除额数值的同时,还有一个外键指向对应的雇员记录。
最后,每名雇员的佳通住址使用struct数据类型存储,其中每个域都作了命名并且具有一个特定的类型。

3.3 文本文件数据编码

逗号分隔值(CSV)或者制表符分隔值(TSV)。
Hive 中默认的记录和字段分隔符

分隔符描述
\n对于文本文件来说,每行都是一条记录,因此换行符可以分隔记录
^A用于分隔字段(列)\001
^B用于分隔ARRAY或者STRUCT中的元素,或者MAP中键-值对之间的分隔 \002
^C用于MAP中键和值之间的分隔 \003

3.4 读时模式

Hive 对于底层存储没有控制,对于Hive要查询的数据,有很多方式对其进行创建、修改,甚至损坏。因此,Hive不会在数据加载时进行验证,而是在查询时进行,也就是读时模式(schema on read)。
那么如果模式和文件内容不匹配时,因为H可以读取这些数据,如果每行记录中的字段少于对应的模式中定义的字段个数的话,那么用户将会看到查询结果中很多的null值。
如果某些字段是数值型的,但是Hive在读取时发现存在非数值型的字符串值的话,将会返回null值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值