使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。
下面介绍的是基于hive v0.80版本之后的hive支持的数据类型,同关系型数据库一样,hive支持多种不同长度的整型和浮点型数据,同时支持布尔型,不定长度的字符串型。注意,这里的int,float,double等底层实现原理和java中底层实现一样,因为hive基于java开发的,底层是对java接口的实现。
数据类型 | 长度和范围 | 举例 |
tinyint | 1byte 有符号整数,范围同java | -10,10 |
smalint | 2byte有符号整 | -10,10 |
int | 4byte有符号整数 | -10,10 |
bigint | 8byte有符号整数 | -10,10 |
boolean | 布尔类型,和java,数据库一样,true,false | true,fallse |
float | 单精度浮点数 | 2.22222 |
double | 双精度浮点 | 3.33333 |
STRING | 字符串,可以使用单引号或者双引号 | ‘abc’,"helllo" |
timestamp | 时间戳:整数浮点或者字符串 | 13212321,‘2018-05-10 03:22:22.333333’ |
binary | 字节数组 | |
struct | 和C语言里的struct或者java里的对象类似 | struct('hello',‘world’) |
map | 键值对组合和java中类似 | map(1,'aaa',2,'bbb') |
array | 数组:具有相同类型和名称的变量的集合 | array(1,3,5,3) |
注意:1.hive中不同类型之间比较时,也遵循java中的自动类型转换,低-->高,比如int和double类型比较,会都转换成double类型。当然也可以用cast函数,将字符串类型的数字转换成对应的数字型,比如s='123',cast( s as int)
2.虽然hive支持3种集合格式,实际使用很少,hive中没有键的概念,但是可以建立索引