一、概述
hive数据类型分为简单数据类型和复合数据类型。
简单数据类型:数值类型、布尔类型、字符类型、时间类型、BINARY类型。
复合数据类型:arrays、maps、structs、union。
二、简单数据类型
分类 | 类型 | 描述 | 开始支持版本 | 取值范围 | 示例 |
数值 | TINYINT | 一个字节(8位)有符号整数 | -128~127 | 1Y,1y | |
SMALLINT | 2字节(16位)有符号整数 | -32768~32767 | 1S,1s | ||
INT(INTEGER) | 4字节(32位)有符号整数 | INTEGER is introduced as a synonym for INT in Hive 2.2.0 | -2^31~2^31-1 | 1 | |
BIGINT | 8字节(64位)有符号整数 | -2^63~2^63-1 | 1L,1l | ||
LONG | 8字节(64位)有符号整数 | -2^63~2^63-1 | 1L,1l | ||
FLOAT | 4字节(32位)单精度浮点数 | 1.1F,1.1f | |||
DOUBLE | 8字节(64位)双精度浮点数 | 1.1,1.1D,1.1d | |||
DECIMAL | 高精度浮点数(小数),默认decimal(10,0) | 正负38位整数 | 1.1 | ||
NUMERIC | 同DECIMAL | Hive 3.0.0 | 正负38位整数 | 1.1 | |
布尔 | BOOLEAN | 一个字节(8位) | true/false | ||
字符 | STRING | 变长字符串 | 'abc' | ||
VARCHAR | 变长字符串 | Hive 0.12.0 | 1~65535 | 'abc' | |
CHAR | 定长字符串 | Hive 0.13.0 | 1~255 | 'abc' | |
时间 | TIMESTAMP | 时间戳,毫秒精度 | Hive 0.8.0 | '2022-10-01 23:59:59.999' | |
DATE | 日期类型,年月日:'yyyy-mm-dd' | Hive 0.12.0 | '2022-10-01' | ||
INTERVAL | 时间单位,年、月、日、时、分、秒,不能作为字段类型 | Hive 1.2.0 | 1 day | ||
字节 | BINARY | 字节序列 | Hive 0.8.0 |
使用上述类型作为字段类型创建表,建表语句如下:
CREATE TABLE `default`.`t_simple_data_type` (
`tinyint_data` TINYINT,
`smallint_data` SMALLINT,
`int_data` INT,
`bigint_data` BIGINT,
`long_data` LONG, -- 建表后,变为BIGINT
`float_data` FLOAT,
`double_data` DOUBLE,
`decimal_data` DECIMAL(10,3), -- 不指定长度时,默认(10,3)
`numeric_data` NUMERIC(10,3), -- 建表后,变为decimal(10,3)
`boolean_data` BOOLEAN,
`string_data` STRING,
`varchar_data` VARCHAR(10), -- 建表后,变为STRING
`char_data` CHAR(10), -- 建表后,变为STRING
`timestamp_data` TIMESTAMP,
`date_data` DATE,
--`interval_data` INTERVAL, -- 不可以用作字段类型
`binary_data` BINARY)
2.1、整数类型示例
select 1y as tdata,
typeof(1y) as tdata_type,
1s as sdata,
typeof(1s) as sdata_type,
1 as idata,
typeof(1) as idata_type,
1l as ldata,
typeof(1l) as ldata_type,
cast(1 as long) as bdata,
typeof(cast(1 as long)) as bdata_type
执行结果:
2.2、浮点类型示例
select cast(1.1 as float) as fdata,
typeof(cast(1.1 as float)) as tdata_type,
1.1d as ddata,
typeof(1.1d) as ddata_type,
1.1 as dcdata,
typeof(1.1) as dcdata_type,
cast(1.1 as numeric(3,1)) as mdata,
typeof(cast(1.1 as numeric(3,1))) as mdata_type
执行结果:
注意:float、double可能丢失精度;decimal、numeric计算时可能为null值。
2.3、布尔类型示例
select true,
typeof(true),
false,
typeof(false)
执行结果:
2.4、时间类型
select now(),
typeof(now()),
date(now()),
typeof(date(now())),
interval 1 day,
typeof(interval 1 day)
执行结果:
2.5、interval应用示例
select interval 1 year,
interval 1 month,
interval 1 day,
interval 1 hour,
interval 1 minute,
interval 1 second,
interval '1-2' year to month
执行结果:
三、复合数据类型
类型 | 描述 | 示例 |
ARRAY | 有序的的同类型的集合 | array(1,2) |
MAP | 一组无序的键值对,键的类型必须是原始数据类型,他的值可以是任何类型,同一个映射的键的类型必须相同,值得类型也必须相同 | map(1,'zjx',2,'wly') |
STRUCT | 一组命名的字段,字段类型可以不同 | struct('name', 'wly', 'age', 17) |
UNION | UNION则类似于C语言中的UNION结构,在给定的任何一个时间点,UNION类型可以保存指定数据类型中的任意一种 | union(2, 10, 10.0, '10.1') |
使用上述类型作为字段类型创建表,建表语句如下:
create table t_complex_data_type
(arr array<string>,
mp MAP<INT, string>,
stru struct<name:string, age:int>)
直接查询语句
select array(1,2), map(1,'zjx',2,'wly'), struct('name', 'wly', 'age', 17), named_struct('name', 'wly', 'age', 17)
执行结果:
3.1、ARRAY类型
(1) 先创建一张表
create table t_array(id int,name string,hobby array<string>) row format delimited fields terminated by ',' collection items terminated by '-';
(2) 准备数据文件 array.txt
1,zhangsan,唱歌-跳舞-游泳 2,lisi,打游戏-篮球
(3) 加载数据文件到t_array表中
load data local inpath '/root/array.txt' into table t_array;
(4) 查询数据
select id ,name,hobby[0],hobby[1] from t_array;
注意:array的访问元素和java中是一样的,这里通过索引来访问。
3.2、MAP类型
(1) 先创建一张表
create table t_map(id int,name string,hobby map<string,string>) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' ;
(2) 准备数据文件 map.txt
1,zhangsan,唱歌:非常喜欢-跳舞:喜欢-游泳:一般般 2,lisi,打游戏:非常喜欢-篮球:不喜欢
(3) 加载数据文件到t_map表中
load data local inpath '/root/map.txt' into table t_map;
(4) 查询数据
select id,name,hobby['唱歌'] from t_map;
注意:map的访问元素中的value和java中是一样的,这里通过key来访问。
3.3、STRUCT类型
(1) 先创建一张表
create table t_struct(id int,name string,address struct<country:string,city:string>) row format delimited fields terminated by ',' collection items terminated by '-';
(2) 准备数据文件 struct.txt
1,zhangsan,china-beijing 2,lisi,USA-newyork
(3) 加载数据文件到t_struct表中
load data local inpath '/root/struct.txt' into table t_struct;
(4) 查询数据
select id,name,address.country,address.city from t_struct;
总结:struct访问元素的方式是通过.符号。
说明:本文仅供作学习交流,如有侵权请联系删除。
参考资料:
LanguageManual Types - Apache Hive - Apache Software Foundation