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>,structint,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)