Hive中复杂数据类型Map常用方法介绍
2019-01-12 20:58
4051 查看
工作中在清洗数据的时候经常遇到一些map类型的数据的清洗、提取等。这边介绍一下我在工作中遇到的问题及相关的解决方法,其实如果知道的话都是挺简单的用法的,但是对于很多不太熟悉Hive Map函数的人来说不知道用法就意味着问题无法得到及时妥善的解决。我也是在Hive聚合函数中查找了好多资料,并且不断地去试才总结出map函数一些用法的。好了废话不多说,我开始介绍吧。
假设有一张表,表名为t,其中字段params的数据类型是map,其map的具体k-v对如下:
[code]{'k0':'abc','k1':'01,02,03','k2':'456'}
1. size(Map)函数:可得map的长度。返回值类型:int
[code]select size(map(t.params)); >> 3
2. map_keys(Map)函数:可得map中所有的key; 返回值类型: array
[code]select map_keys(map(t.params)); >> ["k0","k1","k2"]
3.map_values(Map)函数:可得map中所有的value; 返回值类型: array
[code]select map_value(map(t.params)); >> ["abc","01,02,03","456"]
4.判断map中是否包含某个key值:
[code]select array_contains(map_keys(t.params),'k0'); >> true
5. 在k-v对中,若value有多个值的情况,如 {'k1':'01,02,03'} ,如果要用 'k1' 中 '02'作为过滤条件,则语句如下:
(这里用到split来处理)
[code]select * from t where split(t.params['k1'],',')[1] >> 02
6.如果过滤条件为:k2的值必须为'45'开头,则语句如下:
(这里用到substr方法来处理,这里注明一下,1和2分别表示起始位置和长度)
[code]select * from t where substr(t.params['k2'],1,2) = '45'
相关文章推荐
- [2]姥爷幽默谈Objective-C(getter,setter,init 方法、和类方法以及常用数据类型的介绍)
- 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例
- 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例
- 关于Hive中的复杂数据类型Array,Map,Structs的一些使用案例
- 在asp.net AJAX客户端使用复杂数据类型方法
- SQL常用数据类型介绍
- Redis常用数据类型介绍、使用场景及其操作命令
- 数据字典(选项)管理 的具体使用方法介绍 - 以审批流程类别管理为例(工作流类型管理)
- Javascript 数据类型常用方法
- Java——基本数据类型常用的一些方法
- MFC常用数据类型介绍
- Cxf 复杂数据类型(Map)
- C#常用方法类库:数据类型
- 006 复杂的数据类型&函数(方法)
- Js基本数据类型常用方法扩展(基本数据处理)
- Java 在 Map 中使用复杂数据类型作为 Key
- 数据库中常用数据类型的取值范围介绍(以mysql、SQL Server为准)
- C++常用的数据类型强制转换方法
- Java中几种常用数据类型之间转换的方法
- Hive之数据类型Array,Struct,Map的混用