本文中介绍了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
create table bigdata(name char(10))
Misc
- boolean
- binary
Hive复杂数据类型
- 数据array
Syntax: ARRAY<data_type>
代码语言:javascript复制Array("hadoop", "hive", "spark")
array[1]="hive"
- 映射map
Syntax: MAP<primitive_type, data_type>
代码语言:javascript复制Map(1:"hadoop", 2:"hive")
map[1]="hadoop"
- 结构体struct
Syntax: STRUCT<col_name : data_type [COMMENT col_comment], …>
代码语言:javascript复制Struct(a:5, b:"hive")
struct.a=5
- 联合体uniontype
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
create table complex(
col1 array<int>,
col2 map<string,int>,
col3 struct<a:string,b:int>,
col4 uniontype<string,int>
)
隐式类型转换
hive
中的数据类型转换也分为隐式类型转换和显式类型转换
第一行的名称为对应第一列的名称缩写
- 布尔型只能转换成自身类型
- tinyint 不能转成布尔、时间类型和二进制类型
- 任何类型都可以转成比自己范围更广的类型
- 所有的整数类型、
float、string
都可以隐式转成double
类型
显式类型转换
- 显式类型转换是通过cast函数来实现的,语法为:
cast(value as type)
代码语言:javascript复制# demo
SELECT name,salary
FROM employee
WHERE cast(salary as float) < 100.0;
如果salary
是不能转换成float
,这时``cast将会返回
NULL`
- 几点说明
- 如果将浮点型转换成
int
类型,内部操作是通过round()
或者floor()
函数来实现的,而不是通过cast
cast()
可以进行嵌套操作
SELECT (cast(cast(a as string) as double)) from src; # 先转成string,再转成double
- 对于
Date
类型的数据,只能在Date、Timestamp
以及String
之间进行转换