当前位置: 首页 > news >正文

hive中map相关函数总结

目录

  • hive官方函数解释
  • 示例
  • 实战

hive官方函数解释

hive官网函数大全地址: hive官网函数大全地址

Return TypeNameDescription
mapmap(key1, value1, key2, value2, …)Creates a map with the given key/value pairs.
arraymap_values(Map<K.V>)Returns an unordered array containing the values of the input map.
arraymap_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,Tvalueexplode(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官网函数大全地址&#xff1a; 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.…...

最大通关数

洛洛和晶晶计划一起挑战峡谷深渊&#xff0c;峡谷左右有不同数量的关卡&#xff0c;每个关卡需要不同的紫水晶通关&#xff0c;用给定的紫水晶依次通过最多的关卡。 (笔记模板由python脚本于2023年12月23日 12:16:50创建&#xff0c;本篇笔记适合熟悉贪心算法的coder翻阅) 【学…...

MySQL中EXPLAIN关键字解释

什么是MySQL的索引 索引是帮助MySQL高效获取数据的数据结构 MySQL再存储数据之外&#xff0c;数据库系统中还维护者满足特定查找算法的数据结构&#xff0c;这些数据结构以某种引用表中的数据&#xff0c;这样我们就可以通过数据结构上实现的高级查找算法来快速…...

初始JavaScript详解【精选】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍初始JavaScript以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可以在评论区留言 目录 ⭐…...

计数排序,基数排序及排序总结

稳定性&#xff1a;当要排序的数组有相同数据时&#xff0c;排序后相同数据的相对位置不变&#xff0c;则称该排序算法稳定&#xff0c;否则即为不稳定. 在这里我在说说计数排序吧&#xff0c;计数排序就是将给定数组中的数进行计数&#xff0c;在从小到大依次输出即可。简单过…...

【LeetCode】459. 重复的子字符串(KMP2.0)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;459. 重复的子字符串 代码随想录题解地址&#xff1a;代码随想录 题目简介 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 看到题目的第一想法(可以贴代码&#xff09; 1.…...

CSS(五) -- 动效实现(立体盒子旋转-四方体+正六边)

一. 四面立体旋转 正方形旋转 小程序中 wxss中 <!-- 背景 --><view class"dragon"><!--旋转物体位置--><view class"dragon-position"><!--旋转 加透视 有立体的感觉--><view class"d-parent"><view …...

Win10使用OpenSSL生成证书的详细步骤(NodeJS Https服务器源码)

远程开启硬件权限&#xff0c;会用到SSL证书。 以下是Win10系统下用OpenSSL生成测试用证书的步骤。 Step 1. 下载OpenSSL,一般选择64位的MSI Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 一路点下来&#xff0c;如果后续请你捐款&#xff…...

sql_lab之sqli中的堆叠型注入(less-38)

堆叠注入&#xff08;less-38&#xff09; 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】&#xff1a;什么是局部变量&#xff1f; 答&#xff1a;定义在局部位置的变量就是局部变量。 【问题2】&#xff1a;什么是局部位置&#xff1f; 答&#xff1a;方法的形参位置、方法体的内部。 【位置关系图】&#xff1a; class Xxx { //成员位…...

IP应用场景的规划

IP地址作为互联网通信的基石&#xff0c;在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展&#xff0c;探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…...

27 redis 的 sentinel 集群

前言 redis 的哨兵的相关业务功能的实现 哨兵的主要作用是 检测 redis 主从集群中的 master 是否挂掉, 单个哨兵节点识别 master 下线为主管下线, 超过 quorum 个 哨兵节点 认为 master 挂掉, 识别为 客观下线 然后做 failover 的相关处理, 重新选举 master 节点 我们这里…...

计算机网络 网络安全技术

网络安全基本要素 机密性 不泄密完整性 信息不会被破坏可用性 授权用户 正常有效使用可控性 被控制可审查性 网络安全的结构层次 物理安全 物理介质安全控制 计算机操作系统安全服务 应用层次 被动攻击 :截获信息 主动攻击 : 中断信息,篡改,伪造 篡改 …...

WebAssembly 的魅力:高效、安全、跨平台(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

二维码智慧门牌管理系统升级:确保公安机关数据安全无忧

文章目录 前言一、多重安全防护措施二、安全措施综述与展望 前言 数据安全挑战与重要性 在数字化社会&#xff0c;数据安全对公共管理机构&#xff0c;尤其是公安机关而言&#xff0c;至关重要。随着二维码技术在门牌管理系统中的广泛应用&#xff0c;管理变得更智能、更便捷。…...

Golang leetcode59 螺旋矩阵

螺旋矩阵 leetcode59 初次尝试&#xff0c;从中心向外 func main() {n : 3fmt.Println(generateMatrix(n)) }// 初版&#xff0c;我们从中心点开始 func generateMatrix(n int) [][]int {//1.nXn矩阵table : make([][]int, n)for i : 0; i < n; i {table[i] make([]int, …...

深度学习(Deep Learning) 简介

深度学习&#xff08;Deep Learning&#xff09; 深度学习在海量数据情况下的效果要比机器学习更为出色。 多层神经网络模型 神经网络 有监督机器学习模型 输入层隐藏层 (黑盒)输出层 概念: 神经元 Neuron A^(n1)网络权重 Weights W^n偏移 bias b^n 激活函数: ReLUtan…...

服务器raid中磁盘损坏或下线造成阵列降级更换新硬盘重建方法

可能引起磁盘阵列硬盘下线或故障的情况&#xff1a; 硬件故障&#xff1a; 硬盘物理损坏&#xff1a;包括但不限于坏道、电路板故障、磁头损坏、盘片划伤、电机故障等。连接问题&#xff1a;如接口损坏、数据线或电源线故障、SATA/SAS控制器问题等。热插拔错误&#xff1a;在不…...

Ubuntu 常用命令之 exit 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 exit命令在Ubuntu系统下用于结束一个终端会话。它可以用于退出当前的shell&#xff0c;结束当前的脚本执行&#xff0c;或者结束一个ssh会话。 exit命令的参数是一个可选的整数&#xff0c;用于指定退出状态。如果没有指定&#…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...