maxcompute 2.0复杂数据类型之map

简介: 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联用,做行列转化;
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
6月前
|
存储 SQL 大数据
大数据技术之Clickhouse---入门篇---数据类型、表引擎
大数据技术之Clickhouse---入门篇---数据类型、表引擎
|
6月前
|
存储 分布式计算 大数据
MaxCompute数据类型映射
MaxCompute数据类型映射
|
6月前
|
SQL NoSQL Java
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
|
2月前
|
SQL 分布式计算 DataWorks
MaxCompute数据之禁止数据流出如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
32 0
|
4月前
|
机器学习/深度学习 分布式计算 算法
【大数据技术】Spark MLlib机器学习库、数据类型详解(图文解释)
【大数据技术】Spark MLlib机器学习库、数据类型详解(图文解释)
47 0
|
10月前
|
存储 搜索推荐 大数据
大数据数据存储的搜索引擎Elasticsearch的数据类型的复杂类型
在使用搜索引擎Elasticsearch存储大数据时,了解其数据类型是非常重要的。除了基础数据类型之外,Elasticsearch还支持多种复杂数据类型,这些数据类型通常用于存储结构化数据和关联数据。在本文中,我们将会介绍Elasticsearch的复杂数据类型。
64 0
|
10月前
|
存储 自然语言处理 搜索推荐
大数据数据存储的搜索引擎Elasticsearch的数据类型的基础类型
在使用搜索引擎Elasticsearch存储大数据时,了解其数据类型是非常重要的。Elasticsearch支持多种数据类型,包括基础类型和复合类型。在本文中,我们将会介绍Elasticsearch的基础数据类型。
95 0
|
11月前
|
数据采集 存储 机器学习/深度学习
大数据数据采集的数据类型的非结构化数据
在大数据领域中,数据采集是一个至关重要的环节。除了结构化数据外,非结构化数据也是大数据采集的重要组成部分之一。本文将介绍大数据数据采集中的非结构化数据类型,以及如何对这些数据进行有效的采集和处理。
402 0
|
11月前
|
数据采集 存储 XML
大数据数据采集的数据类型的半结构化数据
在大数据采集中,我们会遇到各种类型的数据,其中半结构化数据是一种常见的数据类型。本文将介绍什么是半结构化数据以及如何有效地采集和处理该类型的数据。
254 0
|
11月前
|
存储 数据采集 SQL
大数据数据采集的数据类型的结构化数据
在大数据领域,数据采集是一个非常重要的环节,数据类型的结构化程度直接影响到后续的数据分析和挖掘工作。本文将介绍大数据数据采集中的结构化数据类型,以及如何对这些数据进行有效的采集和处理。
305 0

相关产品

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