Hive支持的数据类型
Posted 魏大宾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive支持的数据类型相关的知识,希望对你有一定的参考价值。
Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括array,map,struct,union。
一,原始数据类型
类型名称 | 大小 | 示例 |
---|---|---|
TINYINT | 1字节整数 | 45Y |
SMALLINT | 2字节整数 | 12S |
INT | 4字节整数 | 10 |
BIGINT | 8字节整数 | 244L |
FLOAT | 4字节单精度浮点数 | 1.0 |
DOUBLE | 8字节双精度浮点数 | 1.0 |
DECIMAL | 任意精度带符号小数 | DECIMAL(4, 2)范围:-99.99到99.99 |
BOOLEAN | true/false | TRUE |
STRING | 字符串,长度不定 | “a”, ‘b’ |
VARCHAR | 字符串,长度不定,有上限 | “a”, ‘b’ |
CHAR | 字符串,固定长度 | “a”, ‘b’ |
BINARY | 存储变长的二进制数据 | |
TIMESTAMP | 时间戳,纳秒精度 | 122327493795 |
DATE | 日期 | ‘2016-07-03’ |
说明:
1,关于整数和小数类型,整数默认情况下为INT,如果要声明为其他类型,通过后缀来标识(Y、S、L)。小数默认为DOUBLE类型,DECIMAL小数点左边允许的最大位数为38位,直接写DECIMAL默认等同于DECIMAL(10,0)。同时任意数值类型都可以隐式转换成更宽的数值类型(不丢精度)或者文本类型。
2,关于文本类型,STRING存储变长的文本,对长度没有限制。理论上将STRING可以存储的大小为2GB,但是存储特别大的对象时效率可能受到影响。VARCHAR与STRING类似,但是长度上只允许在1-65355之间,超过最大长度会被截断。CHAR则用固定长度来存储数据,最大255。
3,关于时间和日期类型,Hive提供了一些内置函数用于在TIMESTAMP与Unix时间戳(秒)和字符串之间做转换:
类型转换 | 结果 |
---|---|
cast(date as date) | 相同的日期。 |
cast(timestamp as date) | 基于本地时区确定timestamp的年月日作为值返回。 |
cast(string as date) | 如果字符串的格式为’YYYY-MM-DD’, 则对应的年月日返回。如果字符串不是该格式,则返回NULL。 |
cast(date as timestamp) | 基于本地时区,返回日期对应午夜时间。 |
cast(date as string) | 日期被转换为’YYYY-MM-DD’格式的字符串。 |
二,复杂类型
类型名称 | 大小 | 示例 |
---|---|---|
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, …> |
说明:
关于元素的访问,ARRAY[1]访问第二个元素;
map访问元素格式为map[‘key’];
STRUCT元素的访问使用点号;
UNION类型声明语法为UNIONTYPE< data_type,data_type,…>,每个UNION类型的值都通过一个整数来表示其类型,这个整数就是索引,从0开始。例如:
-
CREATE TABLE union_test(u UNIONTYPE<int, double, array<string>,struct<a:int,b:string>>);
-
SELECT u FROM union_test;
-
0:1
-
1:2.0
-
2:["three","four"]
-
3:"a":5,"b":"five"
-
2:["six","seven"]
-
3:"a":8,"b":"eight"
-
0:9
-
1:10.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在该例子中,union包含四种类型,分别为int、double、array和struct。从查询结果来看,第一个冒号前面的数字代表union中某种数据类型,比如0代表union的第一个数据类型int,1代表第二个数据类型double,以此类推。
以上是关于Hive支持的数据类型的主要内容,如果未能解决你的问题,请参考以下文章