Hive中复杂数据类型Map常用方法介绍

工作中在清洗数据的时候经常遇到一些map类型的数据的清洗、提取等。这边介绍一下我在工作中遇到的问题及相关的解决方法,其实如果知道的话都是挺简单的用法的,但是对于很多不太熟悉Hive Map函数的人来说不知道用法就意味着问题无法得到及时妥善的解决。我也是在Hive聚合函数中查找了好多资料,并且不断地去试才总结出map函数一些用法的。好了废话不多说,我开始介绍吧。

假设有一张表,表名为t,其中字段params的数据类型是map,其map的具体k-v对如下:

{'k0':'abc','k1':'01,02,03','k2':'456'}

1. size(Map)函数:可得map的长度。返回值类型:int

select size(t.params);
>> 3

2. map_keys(Map)函数:可得map中所有的key;  返回值类型: array

select map_keys(t.params);
>> ["k0","k1","k2"]

3.map_values(Map)函数:可得map中所有的value; 返回值类型: array

select map_value(t.params);
>> ["abc","01,02,03","456"]

4.判断map中是否包含某个key值:

select array_contains(map_keys(t.params),'k0');
>> true

5. 在k-v对中,若value有多个值的情况,如 {'k1':'01,02,03'} ,如果要用 'k1' 中 '02'作为过滤条件,则语句如下:

    (这里用到split来处理)

select * 
from t 
where split(t.params['k1'],',')[1]
>> 02

 6.如果过滤条件为:k2的值必须为'45'开头,则语句如下:

  这里用到substr方法来处理,这里注明一下,1和2分别表示起始位置和长度)

select * 
from t 
where substr(t.params['k2'],1,2) = '45'

 

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值