hive数据类型

一、概述

hive数据类型分为简单数据类型和复合数据类型。

简单数据类型:数值类型、布尔类型、字符类型、时间类型、BINARY类型。

复合数据类型:arrays、maps、structs、union。

二、简单数据类型

分类类型描述开始支持版本取值范围示例
数值TINYINT 一个字节(8位)有符号整数-128~1271Y,1y
SMALLINT2字节(16位)有符号整数-32768~327671S,1s
INT(INTEGER)4字节(32位)有符号整数INTEGER is introduced as a synonym for INT in Hive 2.2.0-2^31~2^31-11
BIGINT8字节(64位)有符号整数-2^63~2^63-11L,1l
LONG8字节(64位)有符号整数-2^63~2^63-11L,1l
FLOAT4字节(32位)单精度浮点数1.1F,1.1f
DOUBLE8字节(64位)双精度浮点数1.1,1.1D,1.1d
DECIMAL高精度浮点数(小数),默认decimal(10,0)正负38位整数1.1
NUMERIC 同DECIMALHive 3.0.0正负38位整数1.1
布尔BOOLEAN一个字节(8位)true/false
字符STRING变长字符串'abc'
VARCHAR变长字符串Hive 0.12.01~65535'abc'
CHAR定长字符串Hive 0.13.01~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.01 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)
UNIONUNION则类似于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

Hive数据类型_·惊鸿的博客-CSDN博客_hive数据类型

大数据学习——hive数据类型 - o_0的园子 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值