Hive之Map常用方法

这篇具有很好参考价值的文章主要介绍了Hive之Map常用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

实际工作中,有时会出现map复杂数据类型,字段field1形式如:{‘k0’:‘abc’,‘k1’:‘01,02,03’,‘k2’:‘456’},如果是string形式,我们可以适用get_json_object 函数,取出对应的value值,具体如:get_json_object(field,‘$.k0’),即可取出值abc,如果是map数据类型,这个值该怎么取呢?
可以适用field[‘k0’]这种形式取出abc,顺便把map数据类型的常用方法做个总结;

Map常用方法

params为字段名,数据类型为MAP类型;

  1. size(Map)函数:可得map的长度。返回值类型:int
select size(t.params);
>> 3
  1. 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
  1. 在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'

Map数据类型转String类型

with test_map_1 as (
select 1 as uid, map("key1", "value1","key2", "value2") as map1 union all 
select 2 as uid, map("key3", "value3","key4", "value4") as map1
)
--hive> select * from test_map_1;
--OK
--test_map_1.uid	test_map_1.map1
--1	{"key1":"value1","key2":"value2"}
--2	{"key3":"value3","key4":"value4"}

select 
    uid,
    concat('{"', regexp_replace(concat_ws(',', collect_list(concat_ws('":"', k,v) ) ),'\\,','\\"\\,\\"'), '"}') as string1
from test_map_1
lateral view outer explode(map1) kv as k,v
group by uid
;
 select * from test_map_1_to_string;
OK
test_map_1_to_string.uid	test_map_1_to_string.string1
1	{"key1":"value1","key2":"value2"}
2	{"key3":"value3","key4":"value4"}
--如果大括号不需要,可以去掉最外层concat()函数;
--如果不需要双引号"",则可以将concat_ws('":"', k,v)改为concat_ws(':', k,v)

实战

有时一段复杂的sql,不仅会用到field[‘k0’]形式,还会用到get_json_object(field,‘ . k 0 ′ ),甚至会用到 g e t j s o n o b j e c t ( f i e l d [ ′ k 0 ′ ] , ′ .k0'),甚至会用到 get_json_object(field['k0'],' .k0),甚至会用到getjsonobjectfield[k0],.kk’),待补充;文章来源地址https://www.toymoban.com/news/detail-423124.html

到了这里,关于Hive之Map常用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用的map转bean互转方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这个很常用,还支持将蛇形转成驼,如:apply_time 会赋值到applyTime上 这个也很常用,也支持将蛇型转成驼峰, 如: apply_time 会赋值到 applyTime 上 嵌套型map,转换会有问题,且 不支持蛇型转成驼峰 这个也

    2024年02月16日
    浏览(31)
  • Flutter中Map、List数组的常用方法

    Dart语言是Flutter开发的必备语言,官方地址如下:Dart:https://dart.cn/ 使用dart工具来运行这些常用的方法,工具:https://dartpad.cn 在Dart中,Map用来存储对像类型的数据,List与Set用来存储数组类型的数据。 Map的创建实例如下: 创建有一个有初始值的Map,代码如下: 根据List数据来

    2024年02月08日
    浏览(48)
  • JavaScript 之 常用迭代方法forEach、filter()、map()、reduce()

    代码如下: 如下: 代码简洁很多,如下: 简介 : filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。 语法 : 参数、返回值 描述 参考官网: 官网——Array.prototype.filter(). 代码如下: 代码如下: 下例使用 filter() 根据搜索条件来过滤数

    2024年02月09日
    浏览(44)
  • 进阶JAVA篇- Map 系列集合的遍历方法与常用API

    目录         1.0 Map 集合的说明         1.1 Map 集合的常用方法         1.2 Map 系列集合的特点         2.0 Map 系列集合的遍历方法(三种方法)          2.1 使用 keySet() 方法遍历         2.2 使用 entrySet() 方法遍历         2.3 使用 forEach() 方法遍历(Java 8+)  

    2024年02月08日
    浏览(51)
  • Python 自动化指南(繁琐工作自动化)第二版:零、前言

    Al Sweigart 是一名软件开发人员和技术书籍作者。Python 是他最喜欢的编程语言,他是该语言的几个开源模块的开发者。他的其他书籍可以在他的网站上根据知识共享许可免费获得。他的猫现在重 11 磅。 Philip James 从事 Python 工作已经超过十年,是 Python 社区的常客。他的演讲主

    2023年04月08日
    浏览(66)
  • Hive中生成自增序列的常用方法

    在日常业务开发过程中,通常遇到需要hive数据表中生成一列唯一ID,当然连续递增的更好。 最近在结算业务中,需要在hive表中生成一列连续且唯一的账单ID,于是就了解生成唯一ID的方法 语法:row_number() over(order by step)+start_num step表示每次递增多少 start_num表示从哪个值开始递

    2024年02月08日
    浏览(25)
  • vue3【侦测|过滤|数组方法】数据变化侦测&&信息筛选过滤&&常用数组方法.filter() .map() .forEach(). find()

    内容回顾 点击快速复习v-for👏👏👏。本期内容主要是 数据变化的检测 和 信息的过滤筛选 以及 常用的数组方法 👇 ( .filter() 、 .map() 、 .forEach() 、 .find() 、 .findIndex() 、 .some() 、 .every() 、 .fill() )。 延展一下 :👏👏👏 关于数据的变化——比如,对表格数据进行的搜索,

    2024年02月10日
    浏览(36)
  • ChatGPT 实际上是如何工作的?

    添加图片注释,不超过 140 字(可选) ChatGPT 操作的两个主要阶段 我们再用谷歌来打个比方。当你要求谷歌查找某些内容时,你可能知道它不会——在你提出要求的那一刻——出去搜索整个网络来寻找答案。相反,谷歌会在其数据库中搜索与该请求匹配的页面。Google 实际上有

    2024年02月05日
    浏览(46)
  • 深入解析SDRAM:从工作原理到实际应用

    在众多内存技术中,同步动态随机访问存储器(SDRAM)因其出色的性能和广泛的应用而备受关注。本文将从SDRAM的工作原理入手,探讨其性能优化策略和在现代电子设备中的应用。 SDRAM利用同步技术提高数据处理效率,其独特之处在于能够与系统的时钟信号同步,从而优化数据

    2024年02月22日
    浏览(50)
  • 【git】实际应用中可能会出现的问题

    问题: 方法一:git stash命令暂存。 git stash命令,先将本地的所有修改就都被暂时存储起来,其中stash@{0}就是刚才保存的标记。后续可以通过此标记访问。 git pull命令,拉取代码 git stash pop stash@{0},还原暂存内容。从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。

    2024年02月11日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包