李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
08.Hive数据类型
Leefs
2021-12-03 PM
1511℃
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; ``` ![08.Hive数据类型01.jpg](https://lilinchao.com/usr/uploads/2021/12/2794596236.jpg) #### 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; ``` ![08.Hive数据类型02.jpg](https://lilinchao.com/usr/uploads/2021/12/3924142599.jpg) #### 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; ``` ![08.Hive数据类型03.jpg](https://lilinchao.com/usr/uploads/2021/12/3202196439.jpg) **其他方式查询** + 对于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://lilinchao.com/archives/1708.html
上一篇
07.Hive常用交互命令和属性配置
下一篇
09.Hive类型转换
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Kibana
Flink
数据结构
Typora
栈
散列
GET和POST
持有对象
JavaWEB项目搭建
Eclipse
Stream流
Quartz
稀疏数组
Spring
队列
Java阻塞队列
Golang
Spark Core
NIO
Spark
Hadoop
设计模式
JavaWeb
Linux
Hbase
Jquery
MyBatisX
Yarn
Shiro
Java
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭