SQL数组常用函数记录(Map篇)

devtools/2024/12/25 13:47:13/

MAP又被称为字典,格式如{key1:value1,key2:value2,…}形式,一般以k:v成对出现。

1、map构造

map('7',coalesce(trade_info.7d_order,0),'14',coalesce(trade_info.14d_totalt,0),'28',coalesce(trade_info.28d_total,0),
) AS last_nday_total,-- 建表时的字段类型
`last_nday_total`      map<string,bigint> COMMENT '近N天单量(N可取7,14,28)' , 

输出实例

{"14": 7,"28": 11,"7": 3
}

2、获取map获取map字段的所有key值,或者所有value值

map_keys(map字段) – 返回map字段里所有的key值,输出为数组
–> 输出示例:[“14”,“28”,“180”,“365”,“7”,“90”,“60”,“30”]
map_values(map字段) – 返回map字段里左右的value值,输出为数组
–> 输出示例:[7,11,34,116,3,20,18,11]

3、获取map字段中其中一个value值

last_nday_total[‘28’] --> map字段[‘对应的key’]
–> 输出 11

4、将字符串转换为map格式

str_to_map(字符串字段str) – 注意:字符串转换为map格式时,默认以英文逗号为分隔,key与value成对出现
– 示例
str_to_map(‘“SH”:1000,“SZ”:980’)
–> {“SH”:1000,“SZ”:980}

str_to_map(regexp_replace(concat_ws(‘,’,collect_set(if(decisionids <> ‘’,concat(cast(sceneid as string),‘:’,regexp_replace(decisionids,‘\,’,‘\;’)),null))),‘\"|\{|\}’,‘’)) – 行合并,并且生成一个map字段

5、将json转换为map格式

str_to_map(‘{“SH”:1000,“SZ”:980}’)
–> {“SH”:1000,“SZ”:980}

6、求map字段的长度或元素个数

size(map字段)

7、将map字段中空值或无效值过滤掉

map_filter(map字段, (k, v) -> v IS NOT NULL) – 将map字段中的value值为NULL的过滤掉
map_filter(map字段, (k, v) -> v <> ‘’) – 将map字段中的value值为空字符串的过滤掉,以此类推
map_filter(map字段, (k, v) -> k <> ‘’) – 将map字段中的key值为空字符串的过滤掉,以此类推

8、在map字段中新插入元素

– 已知已有一个map字段score {“Chinese”:“98”},请在里面再插入一个新元素,key为"Math",value为"99"
– 方式1:
先将原有map字段拆开,再添加新元素。对原map字段元素多不好操作,且后续有变化难维护
map(‘Chinese’,‘98’,
‘Math’,‘99’
)
– 方式2:
待补充

9、已知两个数组array分别是map的key值与value值,其中k/v数组元素顺序保持映射不变,将其还原为map格式字段

– 已知map key数组与map value数组分别为:
map key数组:[‘Chinese’,‘Math’]
map value数组:[‘98’,‘99’]
– 将其合并为一个map字段,输出为 {“Chinese”:“98”,“Math”:“99”}
– 方式1:
将数组全部拆开为单元素,进行k/v交替映射,输出map字段。对于多元素难操作
map(key[0],value[0],
key[1],value[1]

10、将多个map字段合并,例如在多行合并时存在map字段

– 方式1:
先将map字段转换为json,。使用udf:to_json将map转换为json字符串,再利用行合并函数collect_set(),最终再将string转换为map
ADD jar hive-udf-tojson.jar;
CREATE TEMPORARY FUNCTION to_json as ‘com.meituan.hive.udf.generic.GenericUDFToJson’;
select str_to_map(regexp_replace(concat_ws(‘,’,collect_set(to_json(factor_context))),‘\{|\}|\"’,‘’)) as factor_context;
– 方式2:
待补充,可参考https://www.saoniuhuo.com/question/detail-2046136.html

参考:

hive:将两个Map合并到一列中_大数据知识库

https://www.zhihu.com/question/384904689/answer/1126084222


http://www.ppmy.cn/devtools/145274.html

相关文章

GO语言基础面试题

一、字符串和整型怎么相互转换 1、使用 strconv 包中的函数 FormatInt 、ParseInt 等进行转换 2、转换10进制的整形时&#xff0c;可以使用 strconv.Atoi、strconv.Itoa&#xff1a; Atoi是ParseInt(s, 10, 0) 的简写 Itoa是FormatInt(i, 10) 的简写 3、整形转为字符型时&#…

linux升级git版本

步骤&#xff1a; 1&#xff09;删除旧的版本 、 2&#xff09;安装新的版本 具体操作&#xff1a; 1、删除旧的git版本 1&#xff09;查看git版本 [rootlocalhost gitea]# git --version git version 1.18.0 2&#xff09;卸载旧版本&#xff08;不卸载的话再安装新的会…

Debian 12 安装配置 fail2ban 保护 SSH 访问

背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…

前端监控之sourcemap精准定位和还原错误源码

一、概述 在前端开发中&#xff0c;监控和错误追踪是确保应用稳定性和用户体验的重要环节。 随着前端应用的复杂性增加&#xff0c;JavaScript错误监控变得尤为重要。在生产环境中&#xff0c;为了优化加载速度和性能&#xff0c;前端代码通常会被压缩和混淆。这虽然提升了性…

力扣-图论-18【算法学习day.68】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

14_HTML5 input类型 --[HTML5 API 学习之旅]

HTML5 引入了许多新的 <input> 类型&#xff0c;这些类型提供了更专业的数据输入控件&#xff0c;并且可以在支持的浏览器中提供更好的用户体验和输入验证。以下是一些 HTML5 中引入的 <input> 类型&#xff1a; 1.color: 打开颜色选择器&#xff0c;允许用户选择…

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“

相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…

APHAL平台 一二三章

1.类和对象的关系是 抽象和 具体 的关系。类是创建对象的具体&#xff0c;对象是类的实例。 2.Java应用程序的主类必须是public类。 错&#xff0c;文件名是public类如 public class HAPPY{ } 那么文件名为HAPPY.java 3.一个文件可以有多个类&#xff0c;但是值可以有一个…