hive中map相关函数总结
目录
- hive官方函数解释
- 示例
- 实战
hive官方函数解释
hive官网函数大全地址: hive官网函数大全地址
| Return Type | Name | Description |
|---|---|---|
| map | map(key1, value1, key2, value2, …) | Creates a map with the given key/value pairs. |
| array | map_values(Map<K.V>) | Returns an unordered array containing the values of the input map. |
| array | map_keys(Map<K.V>) | Returns an unordered array containing the keys of the input map. |
| map<string,string> | str_to_map(text[, delimiter1, delimiter2]) | Splits text into key-value pairs using two delimiters. Delimiter1 separates text into K-V pairs, and Delimiter2 splits each K-V pair. Default delimiters are ‘,’ for delimiter1 and ‘:’ for delimiter2. |
| Tkey,Tvalue | explode(MAP<Tkey,Tvalue> m) | Explodes a map to multiple rows. Returns a row-set with a two columns (key,value) , one row for each key-value pair from the input map. (As of Hive 0.8.0.). |
示例
1、map(key1, value1, key2, value2, …)
SELECT map('name', '张三', 'age', 20, 'gender', '男') AS student;
---结果:
student
{"age":"20","gender":"男","name":"张三"}
2、map_values(Map<K.V>)
SELECT map_keys(map('name', '张三', 'age', 20, 'gender', '男')) AS keys;
---结果:
keys
["name","age","gender"]
3、map_values(Map<K.V>)
SELECT map_values(map('name', '张三', 'age', 20, 'gender', '男')) AS values;
---结果:
values
["张三","20","男"]
4、str_to_map(str, delimiter1, delimiter2)
str_to_map 函数用于将一个字符串转换为 Map 对象。具体来说,str_to_map 函数会将一个由键值对组成的字符串解析成一个 Map 对象,其中键和值之间使用指定的分隔符进行分隔。其中,str 是要转换的字符串,delimiter1 是键值对之间的分隔符,delimiter2 是键和值之间的分隔符。默认情况下,delimiter1 的值是 ‘,’,delimiter2 的值是 ‘:’。
SELECT str_to_map('name:张三,age:20,gender:男', ',', ':') AS student;
---结果:
student
{"age":"20","gender":"男","name":"张三"}SELECT str_to_map('name=张三,age=20,gender=男', ',', '=') AS student;
---结果:
student
{"age":"20","gender":"男","name":"张三"}
5、explode (map)
select explode(map('A',10,'B',20,'C',30));
select explode(map('A',10,'B',20,'C',30)) as (key,value);
select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf;
select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf as key,value;
---上述四个结果均为:
key value
A 10
B 20
C 30
实战
给出一组学生数据,有名字,课程,等级,分数等字段,现在求每门课的情况,包含平均成绩,及这门课包含哪些学生及学生的等级
with stud as
( select 'zhang3' as name ,'优' as grade ,'math' as course ,'88' as score union all select 'li4' as name ,'良' as grade ,'math' as course ,'72' as scoreunion all select 'zhao6' as name ,'差' as grade ,'math' as course ,'44' as scoreunion all select 'wang5' as name ,'优' as grade ,'chinese' as course ,'80' as scoreunion all select 'zhao6' as name ,'优' as grade ,'chinese' as course ,'55' as scoreunion all select 'tian7' as name ,'优' as grade ,'chinese' as course ,'75' as score
)--sql1
select course, collect_set(concat(name,':',grade)) as collect , avg(score) from stud group by course;
---结果:
course collect avg(score)
math ["li4:良","zhao6:差","zhang3:优"] 68.0
chinese ["wang5:优","tian7:优","zhao6:优"] 70.0
----sql2
select course, concat_ws(',',collect_set(concat(name,':',grade))) as strings , avg(score) from stud group by course;
---结果:
course strings avg(score)
math li4:良,zhao6:差,zhang3:优 68.0
chinese wang5:优,tian7:优,zhao6:优 70.0
----sql3
select course, str_to_map(concat_ws(',',collect_set(concat(name,':',grade))),',',':') as maps , avg(score) from stud group by course;
---结果:
course maps avg(score)
math {"li4":"良","zhang3":"优","zhao6":"差"} 68.0
chinese {"tian7":"优","wang5":"优","zhao6":"优"} 70.0
注意:
第一种sql,collect 字段的类型是array;第二种sql,strings字段的类型是string;第三种sql,maps字段的类型是map;
问题来了,能否在第二种的基础上,实现第一种和第三种的结果,且字段类型是string;
下面实现第二种转化为第三种,实际上就是map格式转换成json字符串;
with stud as
( select 'zhang3' as name ,'优' as grade ,'math' as course ,'88' as score union all select 'li4' as name ,'良' as grade ,'math' as course ,'72' as scoreunion all select 'zhao6' as name ,'差' as grade ,'math' as course ,'44' as scoreunion all select 'wang5' as name ,'优' as grade ,'chinese' as course ,'80' as scoreunion all select 'zhao6' as name ,'优' as grade ,'chinese' as course ,'55' as scoreunion all select 'tian7' as name ,'优' as grade ,'chinese' as course ,'75' as score
)select
course
,concat('{"',string2,'"}') as string3
from
(select
course
,regexp_replace(string1,'\\,','\\"\\,\\"') as string2
from
(
select course,concat_ws(',', collect_list(concat_ws('":"', k,v) ) ) as string1
from (
select course, str_to_map(concat_ws(',',collect_set(concat(name,':',grade))),',',':') as maps , avg(score)
from stud group by course
)test_map_1
lateral view outer explode(maps) kv as k,v
group by course
) tt
) tm ---结果:
course string3
math {"li4":"良","zhang3":"优","zhao6":"差"}
chinese {"tian7":"优","wang5":"优","zhao6":"优"}
相关文章:
hive中map相关函数总结
目录 hive官方函数解释示例实战 hive官方函数解释 hive官网函数大全地址: hive官网函数大全地址 Return TypeNameDescriptionmapmap(key1, value1, key2, value2, …)Creates a map with the given key/value pairs.arraymap_values(Map<K.V>)Returns an un…...
HttpServletRequestWrapper、HttpServletResponseWrapper结合 过滤器 实现接口的加解密、国际化
目录 一、HttpServletRequestWrapper代码 二、HttpServletRequestWrapper代码 三、加解密过滤器代码 四、国际化过滤器代码 一、HttpServletRequestWrapper代码 package com.vteam.uap.security.httpWrapper;import jakarta.servlet.ReadListener; import jakarta.servlet.…...
最大通关数
洛洛和晶晶计划一起挑战峡谷深渊,峡谷左右有不同数量的关卡,每个关卡需要不同的紫水晶通关,用给定的紫水晶依次通过最多的关卡。 (笔记模板由python脚本于2023年12月23日 12:16:50创建,本篇笔记适合熟悉贪心算法的coder翻阅) 【学…...
MySQL中EXPLAIN关键字解释
什么是MySQL的索引 索引是帮助MySQL高效获取数据的数据结构 MySQL再存储数据之外,数据库系统中还维护者满足特定查找算法的数据结构,这些数据结构以某种引用表中的数据,这样我们就可以通过数据结构上实现的高级查找算法来快速…...
初始JavaScript详解【精选】
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍初始JavaScript以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 目录 ⭐…...
计数排序,基数排序及排序总结
稳定性:当要排序的数组有相同数据时,排序后相同数据的相对位置不变,则称该排序算法稳定,否则即为不稳定. 在这里我在说说计数排序吧,计数排序就是将给定数组中的数进行计数,在从小到大依次输出即可。简单过…...
【LeetCode】459. 重复的子字符串(KMP2.0)
今日学习的文章链接和视频链接 leetcode题目地址:459. 重复的子字符串 代码随想录题解地址:代码随想录 题目简介 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 看到题目的第一想法(可以贴代码) 1.…...
CSS(五) -- 动效实现(立体盒子旋转-四方体+正六边)
一. 四面立体旋转 正方形旋转 小程序中 wxss中 <!-- 背景 --><view class"dragon"><!--旋转物体位置--><view class"dragon-position"><!--旋转 加透视 有立体的感觉--><view class"d-parent"><view …...
Win10使用OpenSSL生成证书的详细步骤(NodeJS Https服务器源码)
远程开启硬件权限,会用到SSL证书。 以下是Win10系统下用OpenSSL生成测试用证书的步骤。 Step 1. 下载OpenSSL,一般选择64位的MSI Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 一路点下来,如果后续请你捐款ÿ…...
sql_lab之sqli中的堆叠型注入(less-38)
堆叠注入(less-38) 1.判断注入类型 http://127.0.0.3/less-38/?id1 and 12 -- s 没有回显 http://127.0.0.3/less-38/?id1 and 11 -- s 有回显 则说明是单字节’注入 2.查询字段数 http://127.0.0.3/less-38/?id1 order by 4 -- s 报错 http:/…...
第5章-第3节-Java中对象的封装性以及局部变量、this、static
1、局部变量 【问题1】:什么是局部变量? 答:定义在局部位置的变量就是局部变量。 【问题2】:什么是局部位置? 答:方法的形参位置、方法体的内部。 【位置关系图】: class Xxx { //成员位…...
IP应用场景的规划
IP地址作为互联网通信的基石,在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展,探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…...
27 redis 的 sentinel 集群
前言 redis 的哨兵的相关业务功能的实现 哨兵的主要作用是 检测 redis 主从集群中的 master 是否挂掉, 单个哨兵节点识别 master 下线为主管下线, 超过 quorum 个 哨兵节点 认为 master 挂掉, 识别为 客观下线 然后做 failover 的相关处理, 重新选举 master 节点 我们这里…...
计算机网络 网络安全技术
网络安全基本要素 机密性 不泄密完整性 信息不会被破坏可用性 授权用户 正常有效使用可控性 被控制可审查性 网络安全的结构层次 物理安全 物理介质安全控制 计算机操作系统安全服务 应用层次 被动攻击 :截获信息 主动攻击 : 中断信息,篡改,伪造 篡改 …...
WebAssembly 的魅力:高效、安全、跨平台(下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
二维码智慧门牌管理系统升级:确保公安机关数据安全无忧
文章目录 前言一、多重安全防护措施二、安全措施综述与展望 前言 数据安全挑战与重要性 在数字化社会,数据安全对公共管理机构,尤其是公安机关而言,至关重要。随着二维码技术在门牌管理系统中的广泛应用,管理变得更智能、更便捷。…...
Golang leetcode59 螺旋矩阵
螺旋矩阵 leetcode59 初次尝试,从中心向外 func main() {n : 3fmt.Println(generateMatrix(n)) }// 初版,我们从中心点开始 func generateMatrix(n int) [][]int {//1.nXn矩阵table : make([][]int, n)for i : 0; i < n; i {table[i] make([]int, …...
深度学习(Deep Learning) 简介
深度学习(Deep Learning) 深度学习在海量数据情况下的效果要比机器学习更为出色。 多层神经网络模型 神经网络 有监督机器学习模型 输入层隐藏层 (黑盒)输出层 概念: 神经元 Neuron A^(n1)网络权重 Weights W^n偏移 bias b^n 激活函数: ReLUtan…...
服务器raid中磁盘损坏或下线造成阵列降级更换新硬盘重建方法
可能引起磁盘阵列硬盘下线或故障的情况: 硬件故障: 硬盘物理损坏:包括但不限于坏道、电路板故障、磁头损坏、盘片划伤、电机故障等。连接问题:如接口损坏、数据线或电源线故障、SATA/SAS控制器问题等。热插拔错误:在不…...
Ubuntu 常用命令之 exit 命令用法介绍
📑Linux/Ubuntu 常用命令归类整理 exit命令在Ubuntu系统下用于结束一个终端会话。它可以用于退出当前的shell,结束当前的脚本执行,或者结束一个ssh会话。 exit命令的参数是一个可选的整数,用于指定退出状态。如果没有指定&#…...
2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++小学组试卷1:带解析)(7月6日试卷)
2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++小学组试卷1:带解析)(7月6日试卷) 选择题: 1、C++中,以下哪个是关键字,不能用作变量名? ( ) A、num B、world C、char D、value2 答案:C 解析:char是C++中的关键字,含义是字符类型。C++中的关键字不…...
自由职业者收入追踪器:从数据模型到可视化分析的全栈实现
1. 项目概述:一个为自由职业者量身定制的收入追踪器如果你是一名自由职业者、独立开发者,或者正在经营自己的副业,那么“收入管理”这件事,大概率会让你感到头疼。项目款什么时候到账?这个月到底赚了多少钱?…...
基于Playwright的插件化浏览器自动化框架:从脚本到工程化实践
1. 项目概述与核心价值最近在折腾一些自动化工作流,发现很多场景下需要与网页进行交互,比如定时抓取特定信息、自动填写表单、或者模拟一些重复性的点击操作。传统的爬虫库在处理动态加载、复杂交互的现代网页时,往往力不从心,要么…...
同态加密加速系统CIPHERMATCH:安全字符串匹配的工程实践
1. 项目概述CIPHERMATCH是一个基于同态加密的安全字符串匹配加速系统,专为隐私保护计算场景设计。在医疗基因组分析、加密数据库搜索等应用中,传统字符串匹配方法需要解密数据后才能执行计算,存在严重的隐私泄露风险。同态加密虽然能解决这一…...
保姆级教程:用GeoServer 2.24发布SRTM3地形图,从下载到配色一站式搞定
从零到一:GeoServer发布SRTM3地形图的完整实践指南 当你第一次看到专业GIS系统中那些色彩斑斓的地形图时,是否好奇过它们是如何从原始数据变成可视化作品的?SRTM3作为全球覆盖的90米分辨率高程数据,是地形分析的基础素材ÿ…...
android c++版opencv截图效果range1 range2
matmat(Range(0,500),Range(0,300));range1就是高度范围 0-500 range2就是宽度范围 0-300 后面的小图片就是切出来的原图片左上角的部分。...
BlenderGIS插件实战:从OSM数据到城市建筑3D模型全流程解析
1. 环境准备与插件安装 第一次接触BlenderGIS时,我也被各种报错折腾得够呛。这里分享一个零失败的安装方案,特别适合Windows系统用户。首先去Blender官网下载最新稳定版(目前是3.6 LTS),建议选便携版(zip)而非安装版&a…...
基于RAG的代码知识库构建:从原理到本地部署实战
1. 项目概述:当代码库成为知识库,我们如何精准“提问”?最近在跟几个做AI应用开发的朋友聊天,大家普遍有个痛点:项目代码越堆越多,文档要么不全要么过时,新来的同事想了解某个模块的逻辑&#x…...
洛雪音乐源下载异常全面修复手册:从排查到根治的完整指南
洛雪音乐源下载异常全面修复手册:从排查到根治的完整指南 【免费下载链接】lx-source lx-music-custom-source 洛雪音乐自定义解析源 项目地址: https://gitcode.com/gh_mirrors/lx/lx-source 洛雪音乐源作为一款优秀的音乐解析服务工具,在实际使…...
瑞德克斯平台:全球金融市场的可靠选择
瑞德克斯平台:全球金融市场的可靠选择在评估金融服务平台时,监管合规、技术能力、客户服务等维度构成了重要的观察方向。瑞德克斯平台作为业内较为活跃的服务机构,其在这些方面的实践具有一定的参考价值。本文将围绕评测视角,对其…...
