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命令的参数是一个可选的整数,用于指定退出状态。如果没有指定&#…...
嵌入式数据流解析与LED动画驱动:从协议设计到nRF52840实战
1. 项目概述:从数据流到动画精灵的眼睛在嵌入式硬件开发里,尤其是像可穿戴设备、互动艺术装置这类项目,我们常常面临一个核心矛盾:设备需要处理来自外部(比如蓝牙、串口)源源不断的指令数据,同时…...
【开源】电商运营场景的 Agent :EcomPilot经营诊断神器 附github
github地址 https://github.com/baibai-awd/ecommerce-ops-agent一个面向电商运营场景的 Agent 项目:EcomPilot 电商经营诊断 Agent。这个项目不是简单的聊天机器人,而是围绕真实业务流程设计的智能分析系统。它可以自动读取电商运营数据,分析…...
local-claw:轻量级容器化开发环境工具的设计与实战
1. 项目概述:一个为本地开发量身定制的“瑞士军刀”如果你和我一样,长期在本地环境进行软件开发、数据分析和自动化脚本编写,那你一定对“环境隔离”和“依赖管理”这两个词深有感触。每次启动一个新项目,或者在不同项目间切换&am…...
告别城通网盘限速:三步获取高速直连地址的终极方案
告别城通网盘限速:三步获取高速直连地址的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载时的漫长等待和龟速下载而烦恼吗?每次打开分享链接&#x…...
BLDC电机场景化创新:从性能参数到系统解决方案的转型路径
1. 项目概述:在红海中寻找蓝海最近几年,BLDC(无刷直流电机)赛道可以说是热闹非凡。从家里的扫地机器人、空气循环扇,到办公室的静音风扇、电动升降桌,再到路上的两轮电动车、新能源汽车,几乎无处…...
30+文档平台一键下载解决方案:告别繁琐操作,高效获取学习资源
30文档平台一键下载解决方案:告别繁琐操作,高效获取学习资源 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档࿰…...
Cadence 17.4 实战指南:从零到一构建高速PCB设计流程
1. 初识Cadence 17.4:高速PCB设计的起点 第一次打开Cadence 17.4时,那个蓝底白字的启动界面让我想起了刚入行时的场景。作为电子设计自动化(EDA)领域的标杆工具,Cadence Allegro系列一直是高速PCB设计的首选。不同于其…...
开源灵巧爪项目OpenClaw-Ligong-Feng:从硬件选型到控制算法的完整实践指南
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“OpenClaw-Ligong-Feng”。光看这个名字,可能有点摸不着头脑,但如果你对机器人、机械臂控制或者开源硬件有点兴趣,那这个项目绝对值得你花时间研究一下。简单来说&…...
Semtech GS2972-IBE3:解锁专业级3G-SDI视频传输的设计奥秘
1. 揭秘GS2972-IBE3:专业视频传输的"瑞士军刀" 第一次拿到Semtech的GS2972-IBE3芯片时,我正为一个4K转播车的项目头疼。客户要求在不增加设备体积的情况下,实现8路3G-SDI信号的稳定传输。这块指甲盖大小的芯片,最终成了…...
别再只会用threshold了!Halcon Region形状变换(shape_trans)的5种高级玩法与避坑指南
别再只会用threshold了!Halcon Region形状变换(shape_trans)的5种高级玩法与避坑指南 在工业视觉检测中,Region处理是核心环节之一。许多开发者习惯性地依赖threshold进行简单分割,却忽略了Halcon提供的强大形状变换工…...
