maxcompute 2.0复杂数据类型之map

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 1. 含义和Java中的Map一样,多个Key-Value的组合。2. 场景什么样的数据,适合使用map类型来存储呢?这里列举了几个我在开发中实际用到的场景。2.1 数量不固定的多个KeyValue这类,本身就是Map类型的数据。

1. 含义

和Java中的Map一样,多个Key-Value的组合。

2. 场景

什么样的数据,适合使用map类型来存储呢?这里列举了几个我在开发中实际用到的场景。

2.1 数量不固定的多个KeyValue

这类,本身就是Map类型的数据。例如:用户购买不同类目的商品个数、商家销往不同城市的商品个数等等。可能用户昨天之前没买过数码类商品、而今天就买了;也可能商家昨天之前没把东西卖到过深圳、而今天就有深圳的买家买了。所以KV对的个数是不固定的,无法用常规的字段固化下来,更合适采用Map来存储这类动态的数据。

2.2 标签类的数据

之前说过,标签类的数据适合用array存储,绝大部分情况下是合适的。
但是有些场景,例如数据分析展示到BI报表中,一般我们需要直接把标签展示成中文。而一般情况下,我们的标签都是通过“数字ID”或者“字母”来存储的。如果这类数据需要展示成中文,又要再额外关联一次字典表取得中文,每个统计任务都关联一次,就有点儿麻烦了。
所以这里建议,直接在基础数据表中,就把ID对应的中文保存起来。Map的key是“标签ID”、value是“标签中文”。用空间,换效率。

2.3 嵌套struct

之前说过,对象有多种固定的属性,简单的key-value格式无法满足,可以使用array嵌套struct的方式定义。
但是这类的array如果想解析,只能先全部展开,再拿到我们需要的部分。如果我们可以事先知道常用的检索条件,并且该字段唯一、不重复,就可以用map代替array。map的key就是我们常用的检索条件字段,value则是一个struct对象。

3. 玩转map

3.1 构造map

3.1.1 直接拼

SELECT map('k1','v1','k2','v2','k3','v3') AS c;
c
{"k3":"v3","k1":"v1","k2":"v2"}

这种直接拼成map的方法,需要开发自己去保证所有的key的类型一致、所有的value的类型一致,否则会报错。
但实际应用过程中,key和value一般都直接用string类型,简单粗暴。用的时候现去做类型转换。

3.1.2 将一定格式的字符串转为map

实际应用中,这种构造方法最为常见。默认,每个KV对之间的分隔符为英文逗号,K和V之间的分隔符为等号。

SELECT str_to_map('k1=v1,k2=v2,k3=v3') AS c;
c
{"k3":"v3","k1":"v1","k2":"v2"}

如果实际的分隔符不是逗号与等号,就需要传入实际的分隔符作为参数。

SELECT str_to_map('k1:v1;k2:v2;k3:v3',';',':') AS c;
c
{"k3":"v3","k1":"v1","k2":"v2"}

第二个参数为“每个KV对之间的分隔符”,第三个参数为“K和V之间的分隔符”。

3.2 查元素个数

SELECT size(str_to_map('k1=v1,k2=v2,k3=v3')) AS c;
c
3

3.3 取出所有Key

SELECT map_keys(str_to_map('k1=v1,k2=v2,k3=v3')) AS c;
c
["k1","k2","k3"]

3.4 取出所有Value

SELECT map_values(str_to_map('k1=v1,k2=v2,k3=v3')) AS c;
c
["v1","v2","v3"]

3.5 根据Key值取Value

SELECT str_to_map('k1=v1,k2=v2,k3=v3')['k3'] AS c;
c
v3

3.6 展开

主要有两种展开方式。一种是“只展开map”,即select后边只有展开后的map。

SELECT explode(str_to_map('k1=v1,k2=v2,k3=v3')) AS (c1,c2);
c1 c2
k1 v1
k2 v2
k3 v3

另一种是展开map的同时,还要带上其他字段。即select后边除了展开后的map之外,还有其他字段。

SELECT t1.id,t2.k,t2.v 
FROM (
SELECT 666 AS id,
str_to_map('k1=v1,k2=v2,k3=v3') AS c
) t1 
LATERAL VIEW EXPLODE(t1.c) t2 AS k,v;
id k v
666 k1 v1
666 k2 v2
666 k3 v3

4. 常见用法

  1. 使用map的时候,不要去过分纠结“字段类型”、“键值对的顺序”这类没有意义或者意义不大的问题。完全可以key和value都弄成字符串类型,顺序等到最后再去排;
  2. 列转行。常见的思路是,先把待转的列拼成一个map,再用explode展开;
  3. map类型不止用在数据存储上,还可以用在复杂SQL的中间过程中。主要和explode联用,做行列转化;
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
存储 SQL 大数据
大数据技术之Clickhouse---入门篇---数据类型、表引擎
大数据技术之Clickhouse---入门篇---数据类型、表引擎
|
存储 分布式计算 大数据
MaxCompute数据类型映射
MaxCompute数据类型映射
|
SQL NoSQL Java
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
|
2月前
|
存储 SQL 分布式计算
大数据-135 - ClickHouse 集群 - 数据类型 实际测试
大数据-135 - ClickHouse 集群 - 数据类型 实际测试
40 0
|
4月前
|
存储 分布式计算 关系型数据库
实时数仓 Hologres产品使用合集之创建外部表时提示不支持ODPS的datetime数据类型,该怎么解决
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
5月前
|
SQL 分布式计算 资源调度
MaxCompute操作报错合集之执行SQL Union All操作时,数据类型产生报错,该怎么解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
138 1
|
6月前
|
存储 分布式计算 DataWorks
MaxCompute产品使用合集之要存储用户的下单所有产品,然后查询时要进行产品分组的,一般这种字段要使用ARRAY还是MAP
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
存储 SQL HIVE
数据仓库的Hive的数据类型的复杂数据类型的map
在数据仓库领域,Hive是一个常用的工具。它提供了一种简单的方式来查询和分析大量数据。
181 0
|
7月前
|
SQL 分布式计算 DataWorks
MaxCompute数据之禁止数据流出如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
122 0

相关产品

  • 云原生大数据计算服务 MaxCompute