本文中介绍了
- 基本数据类型
- 复杂数据类型
- 隐式类型转换
- 显式类型转换
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
它支持传统的
- DATE
DATE值在年/月/日的格式形式描述
字符
- STRING:用单引号或者双引号括起来的字符串
- VARCHAR:1~65535
- CHAR:固定长度,最长是255
1 | create table bigdata(name char(10)) |
Misc
- boolean
- binary
Hive复杂数据类型
- 数据array
Syntax: ARRAY
1 2 | Array("hadoop", "hive", "spark") array[1]="hive" |
- 映射map
Syntax: MAP
1 2 | Map(1:"hadoop", 2:"hive") map[1]="hadoop" |
- 结构体struct
Syntax: STRUCT
1 2 | Struct(a:5, b:"hive") struct.a=5 |
- 联合体uniontype
1 2 3 4 5 6 7 8 9 | UNIONTYPE<int, double, array<string>, struct<a:int,b:string>> {0:1} {1:2.0} {2:["three","four"]} {3:{"a":4,"b":"five"}} {2:["six","seven"]} {3:{"a":8,"b":"eight"}} {0:8} |
- 复合型demo
1 2 3 4 5 6 | create table complex( col1 array<int>, col2 map<string,int>, col3 struct<a:string,b:int>, col4 uniontype<string,int> ) |
隐式类型转换
第一行的名称为对应第一列的名称缩写
MoYB36.png
- 布尔型只能转换成自身类型
- tinyint 不能转成布尔、时间类型和二进制类型
- 任何类型都可以转成比自己范围更广的类型
- 所有的整数类型、
float、string 都可以隐式转成double 类型
显式类型转换
- 显式类型转换是通过cast函数来实现的,语法为:
1 | cast(value as type) |
1 2 3 4 | # demo SELECT name,salary FROM employee WHERE cast(salary as float) < 100.0; |
如果
- 几点说明
- 如果将浮点型转换成
int 类型,内部操作是通过round() 或者floor() 函数来实现的,而不是通过cast -
cast() 可以进行嵌套操作
1 | SELECT (cast(cast(a as string) as double)) from src; # 先转成string,再转成double |
- 对于
Date 类型的数据,只能在Date、Timestamp 以及String 之间进行转换
MotGGt.png