目录

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 之间的分隔符

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
星光璀璨山河无恙2 小时前
【Hadoop】Hadoop3.1.4完全分布式集群搭建
大数据·hadoop·分布式
fridayCodeFly7 小时前
用数组遍历出来的页面,随节点创建的ref存储在数据仓库中,如果数据删除,页面相关节点也会删除,数据仓库中随节点创建的ref会不会也同时删除
数据仓库
Hole_up1 天前
【hadoop】远程调试环境
大数据·hadoop·分布式
atwdy1 天前
【hadoop】hadoop streaming
大数据·hadoop·mr·streaming
埃菲尔铁塔_CV算法1 天前
WPF 与 C# 融合开发:从基础到高级应用(二)
大数据·hadoop·分布式
想要变瘦的小码头2 天前
hive数据仓库
数据仓库·hive·hadoop
Tipray20062 天前
天锐蓝盾终端安全防护——企业终端设备安全管控
数据仓库
小技工丨2 天前
【数据仓库】湖仓一体的核心建模理论
数据仓库
RestCloud2 天前
ETL中数据转换的三种处理方式
数据仓库·etl·数字化转型·数据转换·api管理
昨天今天明天好多天2 天前
【Apache Hive】
hive·hadoop·apache