Hive 数据类型
本文目录
- 1.基本数据类型
- 2.集合类型
- 2.1 集合类型示例
Hive 的数据类型,分为 基本数据类型
和 集合类型
1.基本数据类型
Hive数据类型 | Java数据类型 | 长度 | 示例 |
---|---|---|---|
TINYINT | byte | 1字节 | 6 |
SMALLINT | short | 2字节 | 6 |
INT | int | 4字节 | 6 |
BIGINT | long | 5字节 | 6 |
BOOLEAN | boolean | 布尔类型 true / false | true/false |
FLOAT | float | 单精度浮点数 | 3.1415926 |
DOBULE | double | 双精度浮点数 | 3.1415926 |
STRING | String | 字符串 可以使用单引号或者双引号 | “中华人民共和国” |
TIMESTAMP | 时间类型 | ||
BINARY | 字节数组 |
备注: Hive 中只要字符串是时间格式类型的,比如 2020-05-21,
如果你对该字符串进行日期操作,Hive 是能够自动将内容转换成日期的
。只需要你在写入数据时,将日期自动写成 诸如yyyy-MM-dd
或者其他日期格式的字符串就OK了,Hive 就能够帮你进行转换,所以在 Hive 中 TIMESTAMP 格式也不常用
2.集合类型
数据类型 | 描述 | 语法示例 |
---|---|---|
MAP | MAP 是一组键-值对 元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是 MAP,其中 键->值对是 ’first’->’John’和’last’>’Doe’ ,那么可以通过字段名[‘last’]获取最后一个元素 | map() 例如:map<string, int> |
ARRAY | 数组是一组具有相同类型 和名称 的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从 零开始。例如,数组值为 [‘John’, ‘Doe’] ,那么第 2 个元素可以通过数组名[1]进行引用。 | Array() 例如:array |
STRUCT | 和 c 语言中的 struct 类似,都可以通过“点”符号访 问元素内容。例如,如果某个列的数据类型 是 STRUCT{first STRING, last STRING} ,那么第 1 个元素可以通过字段.first来引用。 | struct() 例如:struct<street:string, city:string> 格式为: 字段名:字段类型 |
Hive 有三种复杂数据类型 ARRAY
、MAP
和 STRUCT
。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似
,在 Java 中就相当于一个 JavaBean 对象,可以在 STRUCT 中定义 很多个类型,里面的内容都是键值对像是,一个是属性名,一个是属性值。
这三种集合类型,都支持嵌套。比如:MAP 中的 key 为 STRING,value 可以为 ARRAY 或者 STRUCT.
2.1 集合类型示例
基本数据类型比较简单,就不在过多介绍,来个示例介绍一下集合类型的使用
数据结构如下:
{
"name": "扛麻袋的少年",
"friends": ["James", "Paul"], // 列表 Array
"children": { // 键值对 Map
"Lucy": 18,
"Lily": 19,
},
"address": { // 结构 Struct
"street": "DaXing",
"city": "BeiJing"
}
}
数据如下:
扛麻袋的少年,James_Paul,Lucy
19,DaXing_BeiJing
光头强又来砍树了,XiongDa_XiongEr,July19,Forest_DongBei
注意:MAP,STRUCT 和 ARRAY 里的元素间关系都可以用同一个字符表示,这里用“_”。(就是一个分隔符,将所有的数据分割开来,可以根据个人喜好随便定义,集合:Array,Map,Struct 数据之间的分隔符,必须一致,因为在定义Hive表结构时,只有这一个定义 collection items terminated by ‘_’ 来代表这3种类型集合 )
Hive建表语句:
create table test (
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
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/Array/Struct)元素与元素之间的分隔符)
map keys terminated by ‘:’(Map 中的 key 与 value 之间的分隔符)
lines terminated by ‘\n’(行分隔符,默认为 \n)
集合数据访问方式
0.读取test表中数据
1.Array数组访问方式
数组的访问,通过角标方式访问,同Java一致
2.Map访问方式
Map的访问,它与Java访问Map的方式就不一致了。它没有 get() 方法,直接通过key 值获取数据即可
3.Struct访问方式
Struct 结构体,Java是通过 get()方法 或 对象.属性名 获取数据,Hive 中 Struct结构体通过 表头.属性名 获取数据
提示: 只有 Map 和 Java 访问方式不一样,Array、Struct 都和 Java 取值方式一致。生产环境中集合类型使用的不多,最常用的还是 Hive 的基本数据类型(最常用的有 INT、BIGINT、DOUBLE、STRING、BOOLEAN)下一篇:Hive DDL数据定义语言
博主写作不易,加个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
我不能保证所写的内容都正确,但是可以保证不复制、不粘贴。保证每一句话、每一行代码都是亲手敲过的,错误也请指出,望轻喷 Thanks♪(・ω・)ノ
还没有评论,来说两句吧...