Hive中的复杂数据类型使用方法

背景:Hive中复杂的数据类型主要有map、struct、named_struct、array和create_union五种,其中前四种用的比较多。
5在这里插入图片描述
一、四种常用的复杂数据类型

1.map
map中保存的是k-v对的数据,map名[key值] = 对应的value值
select map(“aa”,1,1,“bb”) > {“aa”:“1”,“1”:“bb”}
select map(“aa”,1,1,“bb”)[“aa”] > 1

2.struct
struct中保存的是value值,相当于对象,stuct名.col1 = value1
select struct(1,2,3) > {“col1”:1,“col2”:2,“col3”:3}
select struct(1,2,3).col1 > 1

3.named_struct
stuct中保存的是key-value对的数据,相当于对象,struct.key值 = value值,由于key值可以自定义,所以比struct好用。
select named_struct(“name”,“ch”,“age”,18) > {“name”:“ch”,“age”:18}
select named_struct(“name”,“ch”,“age”,18).name > ch

4.array
array中保存的是value值,array名[index值] = 对应位置的value值(index从0开始)
select array(1,2,3) > [1,2,3]
select array(1,2,3)[0] > 1

二、map和named_struct的区别及该如何选择?
区别:
map和struct中都保存的k-v对,但是map中k-v对数量和类型是不确定的,而struct中k-v对数量和类型都是确定的。

选择:
如果某列的k-v对数量和类型都是确定且一样的,使用struct。例如某列保存的是用户的个人信息,包含user_id,age、gender。(named_stuct(“user_id”,“age”,“gender”)),相当于定义了一个模板,一个类。数据:named_stuct(“user_id”:“001”,“age”:18,“gender”:“M”),是这个类的对象,查询user_id属性,使用.user_id。

如果某列的k-v对数量和类型不完全一样,使用map。例如只能确定每列是key:String,value:Int类型的数据。该列某行数据是{“name”:“jack”,“age”:18},另一行数据是{“name”:“mart”,“age”:28,“gender”:“M”},则该列只能使用map不能用struct。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值