一、hive数据类型
1.基础型
数据类型 | 长度大小 | 示例 |
---|---|---|
TINYINT | 1字节有符号整数,范围:-128~127 | 10Y |
SMALLINT | 2字节有符号整数,范围:-32768~32767 | 10S |
INT | 4字节有符号整数 | 10 |
BIGINT | 8字节有符号整数 | 10L |
FLOAT | 4字节单精度浮点数 | 1.0 |
DOUBLE | 8字节双精度浮点数 | 1.0 |
DECIMAL | 任意精度带符号小数,范围:-99.99到99.99 | DECIMAL(20, 2) |
BOOLEAN | true/false | TRUE |
STRING | 字符串,长度不定 | “a”, ‘b’ |
VARCHAR | 字符串,长度不定,有上限 | “a”, ‘b’ |
CHAR | 字符串,固定长度 | “a”, ‘b’ |
BINARY | 存储变长的二进制数据 | |
TIMESTAMP | 时间戳,纳秒精度 | 1650778130 |
DATE | 日期 | '2023-02-27' |
2.复杂型
数据类型 | 描述 | 示例 |
---|---|---|
ARRAY | 存储同类型数据 | ARRAY< data_type> |
MAP | key-value,key必须为原始类型,value可以是任意类型 | MAP< primitive_type, data_type> |
STRUCT | 类型可以不同 | STRUCT< col_name : data_type [COMMENT col_comment], …> |
UNION | 在有限取值范围内的一个值 | UNIONTYPE< data_type, data_type, …> |
Hive
除了支持 STRUCT
、ARRAY
、MAP
这些原生集合类型,还支持集合的组合,不支持集合里再组合多个集合。
举例:MAP
嵌套 ARRAY
,手动设置集合格式的数据非常麻烦,建议采用INSERT INTO SELECT
形式构造数据再插入UNION
表
二、类型转换
1.隐式转换
Hive的类型层次中,可以根据需要进行隐式的类型转换,例如 TINYINT 与 INT相加,则会将TINYINT 转化成INT 然后相加。
隐式转换的规则:
任意数值类型都可以转换成更宽的数据类型(不会导致精度丢失)或者文本类型; 所有的文本类型都可以隐式地转换成另一种文本类型。也可以被转换成 DOUBLE 或者 DECIMAL,转换失败时抛出异常; BOOLEAN 不能做任何的类型转换; 时间戳和日期可以隐式地转换成文本类型。
2.显示转换
用 CAST
函数进行显式的类型转换
示例:
select cast(12345.89 as string);