Hive:复杂数据类型之Map函数

Map函数

是Hive里面的一种复杂数据类型, 用于存储键值对集合。Map中的键和值可以是基础类型或复合类型,这使得Map在处理需要关联存储信息的数据时非常有用。

定义map时,需声明2个属性: key 和 value , map中是 key + value 组成一个元素
key-value, key必须为原始类型,value可以任意类型

示例

数据准备

建表: 定义map的2个属性, key的数据类型是string, value的数据类型是int , 创建表的hql末尾除了定义行的分隔符,数组元素的分隔符外还需要定义key之间的分隔符(map中一个键值对是一个元素)

把数据从本地上传到HDFS

数据查询

查询map的具体元素时使用key下标, 比如chinese, math

展开数据

求每个人的总成绩: 把数据展开后group by

把动态数据写入map中

拼接数据caoncat>>分组形成数组group by 和 collect_list >>转换成字符串 concat_ws>>转换成map 使用 str_to_map

准备数据


第一步:将科目和成绩组合在一起,concat, 注意拼接分隔符,

使用concat函数, 在oracle中concat只能拼接2个字段, 在Hive中没有这个限制

不适用collect_set函数和collect_list函数是因为collect只能用于单列的

第二步: 将所有属于同一个人的数据组合在一起, collect_list


第三步 : 将数组变成一个字符串 concat_ws

concat_ws

字符串拼接函数,用于将多个字符串使用指定的分隔符连接起来。它的全称是 "concatenate with separator",即带分隔符的字符串连接。 concat_ws 函数的第一个参数是分隔符,后面的参数是要连接的字符串。如果分隔符为 NULL,则返回 NULL。值为 NULL 的字符串将被跳过。

SEP分隔符自定义,可以不必是数组里的分隔符

第四步:将字符串转成map 使用函数str_to_map(text, delimiter1, delimiter2)

str_to_map(text, delimiter1, delimiter2)

text :是字符串
delimiter1 :多个键值对之间的分隔符
delimiter2 : key 和 value 之间的分隔符

相关推荐
二十六画生的博客11 小时前
每个subtask都提交一份快照到hdfs,会把10个小的快照合并成一个大的吗?谁来合并?
大数据·hadoop·hdfs·flink
juniperhan11 小时前
Flink 系列第24篇:Flink SQL 集成维度表指南:存储选型、参数调优与实战避坑
大数据·数据仓库·sql·flink
隐于花海,等待花开11 小时前
41.ABS / POW / SQRT 函数深度解析
大数据·hive
千月落13 小时前
HDFS数据迁移
大数据·hadoop·hdfs
RestCloud1 天前
ETL数据质量保障:如何通过优化提升数据准确性?
数据仓库·etl·数据处理·数据传输·数据同步·数据集成平台
隐于花海,等待花开1 天前
40.RAND 函数深度解析
hive·hadoop
2501_927283582 天前
荣联汇智助力天津艺虹打造“软硬一体”智慧工厂,全流程自动化引领印刷包装行业数智变革
大数据·运维·数据仓库·人工智能·低代码·自动化
孤雪心殇2 天前
快速上手数仓基础知识
数据仓库·hive·spark
渣渣盟2 天前
数据仓库 vs 数据湖 vs 湖仓一体:架构演进与选型
数据仓库·架构
隐于花海,等待花开3 天前
39.ROUND / FLOOR / CEIL 函数深度解析
hive·hadoop