文章目录

  • 01 引言
  • 02 hive数据类型
    • 2.1 基础类型
      • 2.1.1 整型
      • 2.1.2 浮点型
      • 2.1.3 文本型
      • 2.1.4 布尔及二进制
      • 2.1.5 时间类型
    • 2.2 复杂类型
      • 2.2.1 STRUCT
      • 2.2.2 ARRAY
      • 2.2.3 MAP
      • 2.2.4 UNION
    • 2.3 类型转换
      • 2.3.1 隐式转换
      • 2.3.1 显式转换
  • 03 文末

01 引言

在前面的教程,已经初步了解了Hive的数据模型,有兴趣的同学可以参阅:

  • 《Hive教程(01)- 初识Hive》
  • 《Hive教程(02)- Hive安装》
  • 《Hive教程(03)- Hive数据模型》

上一节写了hive数据模型,其实就是告诉我们使用hive可以把数据存放到hdfs的哪几种目录(表、分区、桶)。

既然知道了存储的目的地,那么我们总得知道要存的数据有什么特性,就是本文要将的hive数据类型。

02 hive数据类型

2.1 基础类型

HQL 的基本类型和 Java 的基本类型很接近,分类如下:

类型 描述 示例
BOOLEN true/false TRUE
TINYINT 1字节的有符号整数,范围:-128~127 1Y
SMALLINT 2字节的有符号整数,范围:-32768~32767 1S
INT 4字节的带符号整数 1
BIGINT 8字节带符号整数 1L
FLOAT 4字节单精度浮点数1.0
DOUBLE 8字节单精度浮点数 1
DEICIMAL 任意精度的带符号小数 1
STRING 字符串,变长 “a”
VARCHAR 变长字符串 “a”
CHAR 固定长度字符串 “a”
BINARY 字节数组
TIMESTAMP 时间戳,纳秒精读 1.22327E+11
DATE 日期 ‘2022-02-21’

2.1.1 整型

在使用整数字面量时,默认情况下为 INT,如果要声明为其他类型,通过后缀来标识。

2.1.2 浮点型

2.1.3 文本型

STRING存储变长的文本,对长度没有限制,理论上为2GB。

2.1.4 布尔及二进制

  • BOOLEAN:表示二元的truefalse
  • BINARY:用于存储变长的二进制数据。

2.1.5 时间类型

TIMESTAMP 存储纳秒级别的时间戳,同时Hive提供了一些内置函数用于在 TIMESTAMPUnix时间戳(秒)和字符串之间做转换,如下:

cast(date as date)
cast(timestamp as date)
cast(string as date)
cast(date as string)

2.2 复杂类型

类型 描述 示例
ARRAY 有序的同类型集合 array(1,2)
MAP key-value,key必须为原始类型,value可以为任意类型 map(‘a’,‘1’,‘b’)
STRUCT 字段集合,类型可以不同 struct(‘a’,1,1.0),name_stract(‘col1’,‘1’,‘col2’,1.0)
UNION 在有限值范围内的一个值 create_union(1,‘a’,63)

2.2.1 STRUCT

文件里的数据分隔符要和建表指定的一致,举例:

① 创建表:

CREATE TABLE IF NOT EXISTS person_1 (id int,info struct<name:string,country:string>)  ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':' STORED AS TEXTFILE;

② 创建一个文本文件test_struct.txt:

1,'dd':'jp'
2,'ee':'cn'
3,'gg':'jp'
4,'ff':'cn'
5,'tt':'jp'

③ 导入数据:

LOAD DATA LOCAL INPATH '/data/test_struct.txt' OVERWRITE INTO TABLE person_1;

④ 查询数据:

hive> select * from person_1;
OK
1   {"name":"'dd'","country":"'jp'"}
2   {"name":"'ee'","country":"'cn'"}
3   {"name":"'gg'","country":"'jp'"}
4   {"name":"'ff'","country":"'cn'"}
5   {"name":"'tt'","country":"'jp'"}
Time taken: 0.046 seconds, Fetched: 5 row(s)
hive> select id,info.name,info.country from person_1 where info.name='dd';
OK
1   dd  jp
Time taken: 1.166 seconds, Fetched: 1 row(s)

2.2.2 ARRAY

ARRAY 表示一组相同数据类型的集合,下标从零开始,可以用下标访问:

CREATE TABLE IF NOT EXISTS array_1 (id int,name array<STRING>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'
STORED AS TEXTFILE;//导入数据
LOAD DATA LOCAL INPATH '/data/test_array.txt' OVERWRITE INTO TABLE array_1;//查询数据
hive> select * from array_1;
OK
1   ["dd","jp"]
2   ["ee","cn"]
3   ["gg","jp"]
4   ["ff","cn"]
5   ["tt","jp"]
Time taken: 0.041 seconds, Fetched: 5 row(s)
hive> select id,name[0],name[1] from array_1 where name[1]='cn';
OK
2   ee  cn
4   ff  cn
Time taken: 1.124 seconds, Fetched: 2 row(s)

2.2.3 MAP

MAP 是一组键值对的组合,可以通过KEY 访问 VALUE,键值之间同样要在创建表时指定分隔符:

CREATE TABLE IF NOT EXISTS map_1 (id int,name map<STRING,STRING>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ':'
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE;//加载数据
LOAD DATA LOCAL INPATH '/data/test_map.txt' OVERWRITE INTO TABLE map_1;//查询数据
hive> select * from map_1;
OK
1   {"name":"dd","country":"jp"}
2   {"name":"ee","country":"cn"}
3   {"name":"gg","country":"jp"}
4   {"name":"ff","country":"cn"}
5   {"name":"tt","country":"jp"}
Time taken: 0.038 seconds, Fetched: 5 row(s)
select id,info['name'],info['country'] from map_1 where info['country']='cn';
OK
2   ee  cn
4   ff  cn
Time taken: 1.088 seconds, Fetched: 2 row(s)

2.2.4 UNION

Hive 除了支持 STRUCTARRAYMAP 这些原生集合类型,还支持集合的组合,不支持集合里再组合多个集合。

举例:MAP 嵌套 ARRAY,手动设置集合格式的数据非常麻烦,建议采用INSERT INTO SELECT形式构造数据再插入UNION

//创建DUAL表,插入一条记录,用于生成数据
create table dual(d string);
insert into dual values('X');//创建UNION表
CREATE TABLE IF NOT EXISTS uniontype_1
(
id int,
info map<STRING,array<STRING>>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE;//插入数据
insert overwrite table uniontype_1
select 1 as id,map('english',array(99,21,33)) as info from dual
union all
select 2 as id,map('english',array(44,33,76)) as info from dual
union all
select 3 as id,map('english',array(76,88,66)) as info from dual;//查询数据
hive> select * from uniontype_1;
OK
3   {"german":[76,88,66]}
2   {"chinese":[44,33,76]}
1   {"english":[99,21,33]}
Time taken: 0.033 seconds, Fetched: 3 row(s)
hive> select * from uniontype_1 where info['english'][2]>30;
OK
1   {"english":[99,21,33]}
Time taken: 1.08 seconds, Fetched: 1 row(s)

2.3 类型转换

2.3.1 隐式转换

Hive的类型层次中,可以根据需要进行隐式的类型转换,例如 TINYINTINT相加,则会将TINYINT 转化成INT 然后INT做加法。隐式转换的规则大致可以归纳如下:

  • 任意数值类型都可以转换成更宽的数据类型(不会导致精度丢失)或者文本类型;
  • 所有的文本类型都可以隐式地转换成另一种文本类型。也可以被转换成 DOUBLE 或者 DECIMAL,转换失败时抛出异常;
  • BOOLEAN 不能做任何的类型转换;
  • 时间戳和日期可以隐式地转换成文本类型。

2.3.1 显式转换

同时,可以使用 CAST 进行显式的类型转换,例如:

CAST('1' as INT)

如果转换失败,CAST返回NULL

03 文末

本文主要讲的是hive的数据类型,结合上一篇博客 《Hive教程(03)- Hive数据模型》,就是存放数据到数据库中共有几种类型,本文完!

Hive教程(04)- Hive数据类型相关推荐

  1. Hive(二)——数据类型与文件格式

    Hive(二)--数据类型与文件格式 数据 基本数据类型 集合数据类型 分隔符 # 数据: John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Ta ...

  2. Hive:命令行界面、数据类型、DDL数据定义(数据库及表操作/分区分桶)、DML数据操作(数据导入导出)

    目录 1.Hive命令行界面 1.1.选项列表 1.2.变量和属性 1.2.1.Hive中变量和属性命名空间 1.2.2.用户自定义变量 1.2.3..hiverc文件 1.3.一次使用的命令 1.4 ...

  3. 《Hive系列》Hive详细入门教程

    目录 1 Hive基本概念 1.1 什么是Hive Hive简介 Hive:由FaceBook开源用于解决海量结构化日志的数据统计工具 Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据 ...

  4. 转 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例

    https://blog.csdn.net/gamer_gyt/article/details/52169441 写在前边的话: 同样是在做豆瓣电影数据分析的小课题的时候遇到的一个问题:hive表中的 ...

  5. 大数据之Hive教程

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...

  6. Hive教程(一)---hive入门

    目录 1.1什么是Hive 1.2 Hive的优缺点 1.3 Hive架构原理 1.4 Hive和数据库比较 1.5 Meta store数据库分析 1.1什么是Hive Hive:由Facebook ...

  7. 将服务器文件加载至hive表中,Hive入门到剖析(四)

    10 Hive体系架构 10.1概念 用户接口:用户访问Hive的入口 元数据:Hive的用户信息与表的MetaData 解释器:分析翻译HQL的组件 编译器:编译HQL的组件 优化器:优化HQL的组 ...

  8. 认识Hive,以及Hive的数据定义与数据操作,hive的数据查询和hive函数

    认识Hive 为什么要出现hive 前面知识我们讲到mapreudce计算框架,各位需要通过java编码的形式来实现设计运算过程,这对各位的编程能力提出了更高的要求,难道没有门槛更低的方式来实现运算的 ...

  9. Centos Linux 单机安装 Hive 、使用 Hive

    Centos Linux 单机安装 Hive .使用 Hive 视频教程链接:https://www.bilibili.com/video/BV1Rv4y117NR/ 1. Hive 简介 hive ...

最新文章

  1. 癌症治疗新曙光:AI助力科学家更好地观察人类活体细胞
  2. OSPF全国网络互联实施方案
  3. 控制工程matlab实验报告小结,控制工程MATLAB实验报告.doc
  4. C#之foreach语句
  5. 如何将一个文件分割成多个小文件
  6. 手机利用python访问电脑文件_黑客教程,一行python命令让手机读取电脑文件!
  7. 防止html转义字符,如何防止我的HTML标签被转义?
  8. 一文读懂 .NET 中的高性能队列 Channel
  9. 带你换个角度理解图卷积网络
  10. HTML5网页设计的基本知识-几个概念
  11. Python美股量化交易填坑记录——13a.Vegas隧道交易机器人
  12. MySQL实现跨库join查询
  13. 推荐一本书:清华出版的《Modbus软件开发实战指南》
  14. 丹佛机场行李处理系统
  15. 设计模式之 策略模式
  16. java中fido_一文读懂华为FIDO2指纹/3D 面容登录技术
  17. android游戏备份农场,真实农场模拟
  18. 时间触发嵌入式系统设计模式 读书笔记
  19. 《Linux C编程从入门到精通》——1.3 Shell的使用基础
  20. STM32学习之新建工程模板

热门文章

  1. 线性反向传播(机器学习)
  2. 成都学院计算机科学与技术怎么样,四川师范大学成都学院计算机科学与技术(本科)教育概况...
  3. 坐地铁飞机数秒进站,关于3D人脸识别闸机你知道的有多少?
  4. Python + Selenium: 使用webdriver判断浏览器是否关闭
  5. Accumulo 简介
  6. 大环境不好的情况下 我们改如何做
  7. VS Code 运行App.js文件
  8. Mysql动态生成列
  9. 出身清华姚班,斯坦福博士毕业,她的毕业论文成了「爆款」
  10. ES6扩展运算符用法