李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
08.Hive数据类型
Leefs
2021-12-03 PM
2065℃
0条
[TOC] ### 前言 Hive数据类型和Java数据类型有许多相似之处,本篇来将对比Java数据类型来学习一下Hive中的数据类型,以及如何在Hive SQL中去处理这些数据类型。 Hive的数据类型可以分为两大类:**基本数据类型**和**集合数据类型**。 ### 一、基本数据类型 | Hive数据类型 | Java数据类型 | 大小 | 范围 | 示例 | | ------------ | ------------ | ---------------------------------------------------- | -------------- | ----------------------- | | TINYINT | byte | 1byte 有符号整数 | -128 ~ 127 | 1Y(后缀Y) | | SMALINT | short | 2byte 有符号整数 | -32768 ~ 32767 | 10S(后缀S) | | INT | int | 4byte 有符号整数 | 2^32~ 2^32-1 | 100 | | BIGINT | long | 8byte 有符号整数 | -2^64~ 2^64-1 | 1000L(后缀L) | | BOOLEAN | boolean | 布尔类型,true或者false | 布尔型 | true、false | | FLOAT | float | 4byte | 单精度浮点数 | 3.14 | | DOUBLE | double | 8byte | 双精度浮点数 | 3.14159 | | STRING | string | 字符系列。可以指定字符集。可以使用单引号或者双引号。 | | 'LLCBlog',"LLCBlog" | | DATE | | 时间类型(yyyy-MM-dd) | | 2021-10-04 | | TIMESTAMP | | 时间类型(`yyyy-MM-dd HH:mm:ss.fffffffff`) | | 2021-10-04 12:36:25.111 | | BINARY | | 字节数组 | | | + 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。 + DATE类型只支持`yyyy-MM-dd`格式的数据,其余格式都是错误的,会变为NULL + TIMESTAMPS表示UTC时间,格式为`yyyy-MM-dd HH:mm:ss.fffffffff`,即最多支持纳秒级,如果长度超出,则会变成NULL ### 二、集合数据类型 | 数据类型 | 描述 | 示例说明 | 语法示例 | | -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------------- | | `STRUCT` | 封装一组有名字的字段(`named filed`),和 c 语言中的struct 类似,都可以通过“点”符号访问元素内容。 | 如果某个列的数据类型是 `STRUCT{first STRING, last STRING}`,那么第1个元素可以通过字段.first 来引用。 | struct() 例 如 :`struct
` | | `MAP` | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。 | 如果某个列的数据类型是 MAP,其中键 ->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | map() 例如:`map
` | | `ARRAY` | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。 | 数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 | Array() 例如:`array
` | Hive有三种复杂数据类型ARRAY、MAP和STRUCT。 ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。 ### 三、案例实操 #### 3.1基础数据类型练习 **创建表:** ```sql create table if not exists basics_type_test1(id int,age TINYINT,numberId BIGINT,isMale BOOLEAN,height DOUBLE,birth DATE) row format delimited fields terminated by ','; ``` **字段释义:** + `row format delimited fields terminated by ','`:列分隔符 **数据:** ```basic 1,20,3434343434545,true,173.89,1990-11-10 2,22,2903434845903,false,162.89,1992-11-10 3,21,1234345454534,false,173.89,1993-11-10 4,24,7766434235423,true,173.89,1994-11-10 5,25,3434343434545,true,173.89,1995-11-10 ``` **导入数据:** ``` load data local inpath '/home/datas/hive_test01.txt' into table basics_type_test1; ``` **查看数据:** ```sql select * from basics_type_test1; ```  #### 3.2 字符串类型练习 **创建表:** ```bash create table if not exists string_type_test2(id int,`name` STRING,`address` char(20),hobby varchar(20)) row format delimited fields terminated by ','; ``` **字段释义:** + `row format delimited fields terminated by ','`:列分隔符 **数据:** ```basic 1,Leffs,北京朝阳,打篮球、羽毛球 2,zhengfei,上海浦东,台球、高尔夫 3,tingxun,河南郑州,乒乓球、网球 4,yantian,北京海淀,足球、保龄球 5,lifeng,北京丰台,排球、跳绳 ``` **导入数据和查询:** ```sql load data local inpath '/home/datas/hive_test02.txt' into table string_type_test2; -- 查询命令 select * from string_type_test2; ```  #### 3.3 集合数据类型练习 **创建表:** ```sql create table gather_type_test03( id int, name string, friends array
, -- ARRAY类型 children map
, -- MAP类型 address struct
-- STRUCT类型 ) row format delimited fields terminated by ',' collection items terminated by '_' map keys terminated by ':' lines terminated by '\n'; ``` **字段释义:** + `row format delimited fields terminated by ','`:列分隔符 + `collection items terminated by '_'` :MAP STRUCT 和 ARRAY 的分隔符(数据分割符号) + `map keys terminated by ':'` : MAP中的key与value的分隔符 + `lines terminated by '\n';` :行分隔符 **数据:** ```basic 1,liubei,zhangfei_guangyu,liu shan:18_liu feng:20,shu guo_hanzhongcheng 2,guanyu,liubei_zhangfei,guan ping:20_guan xing:18_guan feng:16,shu guo_jingzhou 3,sunquan,zhouyu_lusu,sun deng:24_sun lv:20_sun he:18,wu guo_yangzhou JSON格式: { "id":1 "name": "liubei", "friends": ["zhangfei" , "guangyu"] , //列表Array, "children": { //键值Map, "liu shan": 18 , "liu feng": 20 } "address": { //结构Struct, "street": "shu guo" , "city": "hanzhongcheng" } } ``` **导入数据和查询:** ```basic load data local inpath '/home/datas/hive_test03.txt' into table gather_type_test03; -- 查询命令 select * from gather_type_test03; ```  **其他方式查询** + 对于Array类型,可以通过下标进行访问,下标从0开始 ```sql select id, name, friends[0] as friend1, friends[1] as friend2 from gather_type_test03; ``` **运行结果** ```basic 1 liubei zhangfei guangyu 2 guanyu liubei zhangfei 3 sunquan zhouyu lusu ``` + 对于Map类型,可以通过['key']来访问不同key的内容 ``` select id, name, children['liu shan'] as age1, children['guan feng'] as age2, children['sun he'] as age3 from gather_type_test03; ``` **运行结果** ```basic 1 liubei 18 NULL NULL 2 guanyu NULL 16 NULL 3 sunquan NULL NULL 18 ``` + 对于`struct`类型,可以通过"."来访问不同的内容 ```sql select id, name, address.street as street, address.city as city from gather_type_test03; ``` **运行结果** ```basic 1 liubei shu guo hanzhongcheng 2 guanyu shu guo jingzhou 3 sunquan wu guo yangzhou ``` *附:* *[参考文章链接](https://blog.csdn.net/abcdefg90876/article/details/107133044?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-4-107133044.pc_agg_new_rank&utm_term=hive%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&spm=1000.2123.3001.4430)*
标签:
Hadoop
,
Hive
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1708.html
上一篇
07.Hive常用交互命令和属性配置
下一篇
09.Hive类型转换
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
35
其它
25
GO
48
NLP
8
标签云
Flume
Filter
线程池
随笔
Kibana
稀疏数组
排序
高并发
MyBatisX
Flink
机器学习
Spark Core
栈
JavaScript
队列
字符串
二叉树
Sentinel
Beego
算法
BurpSuite
pytorch
MyBatis-Plus
Java编程思想
工具
Thymeleaf
Typora
哈希表
nginx
Spark Streaming
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞