hive的数据类型有原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。hive是用java开发的,hive里的基本数据类型和java的基本数据类型也是一一对应的,除了string类型。
1.整数类型
Hive有4种带符号的整数类型:TINYINT,SMALLINT,INT,BIGINT,分别对应Java中的byte,short,int,long。字节长度分别为1,2,4,8字节。在使用整数字面量时,默认情况下为INT,如果要声明为其他类型,通过后缀来标识。
2. 小数
浮点类型包括FLOAT和DOUBLE两种,对应到Java的float和double,分别为32位和64位浮点数。DECIMAL用于表示任意精度的小树,类似于Java的BigDecimal,通常在货币当中使用。例如DECIMAL(5,2)用于存储-999.99到999.99的数字,省略掉小数位,DECIAML(5)表示-99999到99999的数字。DECIMAL则等同于DECIMAL(10,0)。小数点左边允许的最大位数为38位。
3. 文本类型
Hive有3种类型用于存储字文本。STRING存储变长的文本,对长度没有限制。理论上将STRING可以存储的大小为2GB,但是存储特别大的对象时效率可能受到影响,可以考虑使用Sqoop提供的大对象支持。VARCHAR与STRING类似,但是长度上只允许在1-65355之间。例如VARCHAR(100).CHAR则用固定长度来存储数据。
4. 布尔及二进制
BOOLEAN表示二元的true或false。
BINARY用于存储变长的二进制数据。
5.时间类型
TIMESTAMP则存储纳秒级别的时间戳,同时Hive提供了一些内置函数用于在TIMESTAMP与Unix时间戳(秒)和字符串之间做转换。
6. 类型转换
Hive的类型层次中,可以根据需要进行隐式的类型转换,例如TINYINT与INT相加,则会将TINYINT转化成INT然后INT做加法。隐式转换的规则大致可以归纳如下:
任意数值类型都可以转换成更宽的数据类型(不会导致精度丢失)或者文本类型。
所有的文本类型都可以隐式地转换成另一种文本类型。也可以被转换成DOUBLE或者DECIMAL,转换失败时抛出异常。
BOOLEAN不能做任何的类型转换。
时间戳和日期可以隐式地转换成文本类型。
也可以使用CAST进行显式的类型转换,例如CAST(‘1’ as INT),如果转换失败,CAST返回NULL。
最后,推荐我们的管理工具给大家。