Hive数据类型---复合类型--map类型

假设有如下数据:

1,zhang,father:zhanglaoge#monther:xiaolaomei#brother:superman,22

则建表语句应该如下:
create table t_person(id int,name string,family_members map<string,string>,age int)

row format delimited fields terminated by ','

collection items terminated by '#'

map keys terminated by ':';

查每个人的father

select id,name,family_members["father"],age from t_person;

查出每个人有哪些亲属关系:

select id,name,map_keys(family_members) as relations,age from t_family;

查出每个亲属的名字:

select id,name,map_values(family_members) as relations,age from t_family;

查出亲属的数量:

select id,name,size(family_members) as relations,age from t_family;

查出所有拥有brother的人:

方案一:

select id,name,age,family_members[brother] from t_family where array_contains(map_keys(family_members),'brother');

方案二:

子查询

select id,name,age

from

(select id name,age,map_keys(family_members) as relations from t_family) tmp where arrays_contains(relations,'brother')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值