本文中介绍了hive
中数据类型知识点,包含:
- 基本数据类型
- 复杂数据类型
- 隐式类型转换
- 显式类型转换
Hive基本数据类型
数值型
类型 | 说明 |
---|---|
TINYINT | 1个字节,-128~127 |
SMALLINT | 2个字节,-32768~32767 |
INT/INTEGER | 4个字节 |
BIGINT | 8个字节 |
FLOAT | 4个字节单精度 |
DOUBLE | 8字节双精度 |
DECIMAL | 38位小数精度,支持科学计数法DECIMAL(9,7) DECIMAL(precision, scale) decimal(10,0) |
日期时间
- TIMESTAMP
它支持传统的UNIX
时间戳可选纳秒的精度。它支持的java.sql.Timestamp格式YYYY-MM-DD HH:MM:SS.fffffffff
和格式YYYY-MM-DD HH:MM:ss.ffffffffff
。
- DATE
DATE值在年/月/日的格式形式描述 NaN
字符
- STRING:用单引号或者双引号括起来的字符串
- VARCHAR:1~65535
- CHAR:固定长度,最长是255
1 | create table bigdata(name char(10)) |
Misc
- boolean
- binary
Hive复杂数据类型
- 数据array
Syntax: ARRAY<data_type>
1 | Array("hadoop", "hive", "spark") |
- 映射map
Syntax: MAP<primitive_type, data_type>
1 | Map(1:"hadoop", 2:"hive") |
- 结构体struct
Syntax: STRUCT<col_name : data_type [COMMENT col_comment], …>
1 | Struct(a:5, b:"hive") |
- 联合体uniontype
1 | UNIONTYPE<int, double, array<string>, struct<a:int,b:string>> |
- 复合型demo
1 | create table complex( |
隐式类型转换
hive
中的数据类型转换也分为隐式类型转换和显式类型转换
第一行的名称为对应第一列的名称缩写
- 布尔型只能转换成自身类型
- tinyint 不能转成布尔、时间类型和二进制类型
- 任何类型都可以转成比自己范围更广的类型
- 所有的整数类型、
float、string
都可以隐式转成double
类型
显式类型转换
- 显式类型转换是通过cast函数来实现的,语法为:
1 | cast(value as type) |
1 | # demo |
如果salary
是不能转换成float
,这时``cast将会返回
NULL`
- 几点说明
- 如果将浮点型转换成
int
类型,内部操作是通过round()
或者floor()
函数来实现的,而不是通过cast
cast()
可以进行嵌套操作
1 | SELECT (cast(cast(a as string) as double)) from src; # 先转成string,再转成double |
-
对于
Date
类型的数据,只能在Date、Timestamp
以及String
之间进行转换