hive数据类型

一、概述

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
mp MAP
stru struct)

直接查询语句

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

你可能感兴趣的:(知识总结,hive,数据仓库,大数据)