Hive 数据类型

太过爱你忘了你带给我的痛 2022-10-14 12:54 287阅读 0赞

本文目录

  • 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 有三种复杂数据类型 ARRAYMAPSTRUCT。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,在 Java 中就相当于一个 JavaBean 对象,可以在 STRUCT 中定义 很多个类型,里面的内容都是键值对像是,一个是属性名,一个是属性值。

  这三种集合类型,都支持嵌套。比如:MAP 中的 key 为 STRING,value 可以为 ARRAY 或者 STRUCT.

2.1 集合类型示例

  基本数据类型比较简单,就不在过多介绍,来个示例介绍一下集合类型的使用

数据结构如下:

  1. {
  2. "name": "扛麻袋的少年",
  3. "friends": ["James", "Paul"], // 列表 Array
  4. "children": { // 键值对 Map
  5. "Lucy": 18,
  6. "Lily": 19,
  7. },
  8. "address": { // 结构 Struct
  9. "street": "DaXing",
  10. "city": "BeiJing"
  11. }
  12. }

数据如下:

扛麻袋的少年,James_Paul,Lucy:18_Lily:19,DaXing_BeiJing
光头强又来砍树了,XiongDa_XiongEr,July:18_Mars:19,Forest_DongBei

注意:MAP,STRUCT 和 ARRAY 里的元素间关系都可以用同一个字符表示,这里用“_”。(就是一个分隔符,将所有的数据分割开来,可以根据个人喜好随便定义,集合:Array,Map,Struct 数据之间的分隔符,必须一致,因为在定义Hive表结构时,只有这一个定义 collection items terminated by ‘_’ 来代表这3种类型集合 )

Hive建表语句:

  1. create table test (
  2. name string,
  3. friends array<string>,
  4. children map<string, int>,
  5. address struct<street:string, city:string>
  6. )
  7. row format delimited
  8. fields terminated by ','
  9. collection items terminated by '_'
  10. map keys terminated by ':'
  11. 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♪(・ω・)ノ

发表评论

表情:
评论列表 (有 0 条评论,287人围观)

还没有评论,来说两句吧...

相关阅读