Hive中的复杂数据类型 - array、map、struct

水善利万物而不争,处众人之所恶,故几于道💦

一、简单数据类型(复习)

官方数据类型详情页

数据类型描述范围
tinyint1byte有符号整数from -128 to 127
smallint2byte有符号整数from -32,768 to 32,767
int4byte有符号整数from -2,147,483,648 to 2,147,483,647
bigint8byte有符号整数 from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float4byte单精度浮点数\
double8byte双精度浮点数\
decimal高精度数值类型decimal(10,0)默认值,表示最多有10位数,其中0位小数
boolean布尔类型true或者false
string字符串用的最多
date日期类型YYYY-­MM-­DD
timestamp时间戳类型\

二、复杂数据类型

array(数组)

定义数组:array<int>
构建数组:array(1,3,5,6)
访问数组:字段名[0]

map(集合)

定义集合:map<string,int>
构建集合:map(“age”,11,“weight”,99)
访问集合:字段名[“weight”]

struct(结构体)

定义结构体:struct<name:string,age:int>
构建结构体:named_struct(“name”,“Asrid”,“age”,99)
访问结构体:字段名.name


看完上面可能一脸懵,有点懂,又有点迷,下面用一个例子解释下。

数据类型无非就是创建表的时候指定数据类型,然后向表中插入数据的时候要按照相应的数据类型构建出相应格式类型的数据才能插入,最终在查询的时候如何访问到数据。

上面说的分别就对应数据类型的定义、构建、访问。

比如,想创建一张data_type表,字段的数据类型分别用array、map、struct,那如何写呢?

create table data_type(
	name string,
	age int,
	address map<string,string>,
	friend struct<name:string,age:int>,
	phone array<bigint>
)

表中最后三个字段的类型就是复杂数据类型的定义,也就是如何声明一个复杂的数据类型。

在这里插入图片描述


表创建好了以后,如何向表中插入数据呢?这就涉及到如何构建一个map、array、struct 了

insert into table data_type
(name,age,address,friend,phone) values
("Bersd",
32,
map("山西","太原","陕西","西安"),
named_struct("name","aaa","age",33),
array(12345678888,18234567777,19243219998))

构建map的时候,直接map()括号里面写上key value 中间用逗号分割开就行
构建struct的时候,使用named_struct()括号里面写属性名,属性值,之间用逗号隔开
构建array的时候,直接array()括号里面写上数组内元素就行了,各个元素之间用逗号隔开

在这里插入图片描述


向表中插入数据之后,那怎样访问到struct、map、array 里面的数据呢?

select name,
         address["山西"] shanxi,
         friend.name friend_name,
         friend.age friend_age,
         phone[0] phone_first
from data_type;

可以看到,访问array和map的时候都是方括号,然后里面写数组下标或者map的key,而访问struct的数据时要.属性名这样子访问

在这里插入图片描述

扩展以上复杂数据类型之间支持嵌套,也就是说struct里面的数据类型可以写map、array,array里面也可以放map、struct…

构建struct还可以直接struct(“name”,“张三”,“age”,89)这样他就会给四个默认的列名,这个一般不用

在这里插入图片描述

  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿年、嗯啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值