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

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

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

3.1 基本数据类型

数据类型 长度 例子
TINYINT 1byte 20
SMALINT 2byte 20
INT 4byte 20
BIGINT 8byte 20
BOOLEAN true 或者 false TRUE
FLOAT 单精度浮点数 3.14159
DOUBLE 双精度浮点数 3.14159
STRING 4byte 20
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’)
MAP MAP是一组键-值对元组集合,使用数组表示法(例如[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值。

猜你喜欢

转载自blog.csdn.net/weixin_43387060/article/details/86650788
今日推荐