maxcompute 2.0复杂数据类型之array

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. 含义

类似于Java中的array。有序、可重复。

2. 场景

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

2.1 标签类的数据

为什么说标签类数据适合使用array类型呢?
(1)标签一般是一个只有key、没有value的结构;
(2)标签的数量(枚举值个数)会非常多;
(3)标签的变化会比较频繁;
(4)标签会过期;
因此,比起“创建多个字段”、“使用指定分隔符分隔的字符串”、“使用map”等方法,使用array是更合适的。

2.2 对象列表

对象有多种固定的属性,简单的key-value格式无法满足,可以使用array嵌套struct的方式定义。减少了维护数据字典的工作量。

3. 玩转array

3.1 数组字段拆成多行

3.1.1 explode

select explode(t.arr) from (select array('a','b','c') as arr) t;
col
a
b
c
select t1.id,t2.arr from (select 'xxx' as id,array('a','b','c') as arr) t1 lateral view explode(t1.arr) t2 as arr ;
idarr
xxxa
xxxb
xxxc

3.1.2 posexplode

select posexplode(t.arr) from (select array('a','b','c') as arr) t;
posval
0a
1b
2c
select t1.id,t2.serialno,t2.arr from (select 'xxx' as id,array('a','b','c') as arr) t1 lateral view posexplode(t1.arr) t2 as serialno,arr ;
idserialnoarr
xxx0a
xxx1b
xxx2c

3.2 多行合并成数组

3.2.1 不去重

select collect_list(t.c1) as arr from ( select 'a' as c1 union all select 'a' as c1 union all select 'b' as c1) t;
arr
["a","a","b"]

3.2.2 去重

select collect_set(t.c1) as arr from ( select 'a' as c1 union all select 'a' as c1 union all select 'b' as c1) t;
arr
["a","b"]

3.3 数组拼成字符串

select concat_ws(',',t.arr) from (select array('a','b','c') as arr) t;
_c0
a,b,c

3.4 字符串转成数组

select split('a,b,c',',');
_c0
["a","b","c"]

3.5 构造数组

select array('aa','bb','cc');
_c0
["aa","bb","cc"]

3.6 数组元素排序

select sort_array(array('b','c','e','a','d'));
_c0
["a","b","c","d","e"]
select sort_array(array(1,10,100,2,3));
_c0
[1,2,3,10,100]

3.7 数组中增加一项

select split(concat('d,',concat_ws(',',t.arr)),',') as arr from (select array('a','b','c') as arr) t;
arr
["d","a","b","c"]

4. 常见用法

4.1 代替无法使用的with cube

例如现在有张下单记录流水表,记录着每一条下单记录,包含字段“订单ID”、“下单人ID”、“下单渠道(网站/app)”。
现在要统计“各渠道的下单人数和订单数”,渠道维度包含“不限”、“网站”、“APP”三项。
一般做这些包含“不限”的维度的聚合计算时,都使用group by xxx with cube关键字。但是maxcompute中暂时还不支持这个关键字,所以我们换另一种方法来实现。

SELECT tt.`下单渠道`, COUNT(1) AS `下单人数`, SUM(tt.`下单量`) AS `下单量`
FROM (SELECT t1.`下单人ID`, t2.`下单渠道`, SUM(t1.`下单量`) AS `下单量`FROM (SELECT t.`下单人ID`, t.`下单渠道`, SUM(t.`下单量`) AS `下单量`FROM (SELECT `订单ID`, `下单人ID`, `下单渠道`, 1 AS `下单量`FROM `下单记录流水表`) tGROUP BY t.`下单人ID`, t.`下单渠道`) t1LATERAL VIEW EXPLODE(array(t1.`下单渠道`, '不限')) t2 AS `下单渠道`GROUP BY t1.`下单人ID`, t2.`下单渠道`
) tt
GROUP BY tt.`下单渠道`

4.2 数组是否相等

数组的相等或不等,无法通过“=”来判断,因此要尝试一些其他的方法。最常用的办法,就是转成字符串再比较。

4.2.1 考虑顺序是否一致

直接转成字符串后,比较是否相等

4.2.2 不考虑顺序是否一致

先排序,再转成字符串,然后比较是否相等

原文链接

转载于:https://my.oschina.net/u/1464083/blog/3019854

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

权限组件(6):权限分配的角色管理

效果图: 为了方便开发,先把中间件注释掉,要不还要在角色-权限表中添加对应关系。又因为二级菜单和面包屑导航需要中间件的变量,所以要在layout.html里面把这两个也注释掉。setting.py# rbac.middlewares.rbac.RbacMiddleware layo…

02-Django基础知识

一、内容回顾 1、web应用程序 2、HTTP协议 a、http协议特性 b、http请求格式 c、http响应格式 3、wsgiref模块 4、Django下载与简单应用 a、Django简介(MTV) b、下载django命令 c、创建项目命令 d、创建app应用 e、启动项目   二、今日概要 1、路由层&…

java解析上的jar包里的pom_Maven引入本地Jar包并打包进War包中的方法

1.概述在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来。2. 拷贝至项目根目录项目根目录即pom.xml文件所在的同级目录,可以在项目根目录下创建文件夹lib,如下…

java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)

简单工厂的构成包括三个角色:1)抽象产品类2)具体产品类(继承抽闲产品类)3)工厂类(生产具体产品)具体代码实现1、抽象产品类/*** 抽象类*/public abstract class Car {/*** 产品抽象方法,将会由具体产品类实现*/public abstract void driving();}2、具体产…

Kibana中的Coordinate Map地图报索引错误的问题

今天做地图定位展示,展示的是ApacheWeb服务器的访问日志文件中的来源IP。但是中间出现了报错环节,说是索引不能匹配到geo_point类型,实在是不懂这是在说什么,后来在网站找了方法就解决了。主要报错如下: 报错信息&…

windows软链接的建立及删除

2019独角兽企业重金招聘Python工程师标准>>> 1.建立举例 # 建立d:develop链接目录,指向远程的目标服务器上的e盘的对应目录。 mklink /d d:\develop \\138.20.1.141\e$\develop# 建立d:develop链接目录,指向远程的目标服务器上的e盘的对应目录…

php原生类,反序列化之PHP原生类的利用

正文文章围绕着一个问题,如果在代码审计中有反序列化点,但是在原本的代码中找不到pop链该如何?N1CTF有一个无pop链的反序列化的题目,其中就是找到php内置类来进行反序列化。基础知识首先还是来回顾一下序列化中的魔术方法,下面也…

Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[贪婪算法选特征]

目录 概括Sparse PCA Formulation非常普遍的问题Optimality ConditionsEigenvalue Bounds算法代码概括 这篇论文,不像以往的那些论文,构造优化问题,然后再求解这个问题(一般都是凸化)。而是,直接选择某些特…

TikTok与环保:短视频如何引领可持续生活方式?

在数字时代,社交媒体平台扮演着塑造文化和价值观的关键角色。而TikTok,作为一款全球短视频平台,不仅塑造着用户的娱乐方式,还在悄然地引领着可持续生活方式的潮流。本文将深入探讨TikTok与环保之间的关系,分析短视频如…

Spring源码分析---Bean 的生命周期 03

来源:Spring 3. Bean 的生命周期 自定义一个 SpringBoot 的主启动类: SpringBootApplication public class A03Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(A03Applicatio…

选择免费的SSL证书,还是付费的?

作为一个互联网文章作者,我会根据具体的使用场景和需求来选择SSL证书。通常情况下,如果是用于个人网站或者小型项目,我会倾向于选择免费的SSL证书,比如 JoySSL提供的免费证书。这样可以在不增加额外费用的情况下为网站提供安全的加…

静态HTTP与CDN:如何优化内容分发

大家好,今天我们来聊聊静态HTTP和CDN这对“黄金搭档”。没错,就是那个让你的网站内容像闪电一样传遍全球的CDN! 首先,我们来了解一下静态HTTP。它就像是那个老实可靠的邮差,每次都按时按点地把你的内容送到用户手中。…

第二十一章博客

计算机应用实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。编写网络应用程序前,首先必须明确所要使用的网络协议…

C++ boost planner_cond_.wait(lock) 报错1225

1.如下程序段 boost unique_lock doesn’t own the mutex: Operation not permitted 问题: 其中makePlan是一个线程。这里的unlock导致错误这个报错 boost unique_lock doesn’t own the mutex: Operation not permitted bool navigation::makePlan(){ //cv::named…

MySQL中如何快速定位占用CPU过高的SQL

作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。 技术人人都可以磨炼,但处理问题的思…

华为OD机试 - 多段线数据压缩(Java JS Python C)

在线OJ刷题 题目详情 - 多段线数据压缩 - Hydro 题目描述 下图中,每个方块代表一个像素,每个像素用其行号和列号表示。 为简化处理,多线段的走向只能是水平、竖直、斜向45度。 上图中的多线段可以用下面的坐标串表示:(2,8),(3,7),(3,6),(3,5),(4,4),(5,3),(6,2),(7,3),(…

042、序列模型

之——从时序中获取信息 目录 之——从时序中获取信息 杂谈 正文 1.建模 2.方案A-马尔科夫假设 3.方案B-潜变量模型 4.简单实现 杂谈 很多连续的数据都是有前后的时间相关性的,并不是每一个单独的数据是随机出现的。在时序中会蕴含一些空间结构的变化信息、…

【数据科学】一文彻底理清数据、数据类型、数据结构的概念

一、什么是数据? 入门数据学科,首先第一步要认识数据什么,可能大多数人都无法对数据做一个准确的定义,在我们印象中,提到数据首先头脑浮现的是数据表格,是一堆堆数字,那么数据就是数字吗&#x…

SpringBoot 2.0 中默认 HikariCP 数据库连接池原理解析

作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池。按照发展历程,业界知名的数据库连接池有以下几种:c3p0、DBCP、Tomcat JDBC Connection Pool、Druid 等&am…

阿里云服务器记录

阿里云服务器记录 CentOS 8.4 64位 SCC版 CentOS 7.9 64位 SCC版 CentOS 7.9 64位 CentOS 7.9 64位 UEFI版 Alibaba Cloud Linux Anolis OS CentOS Windows Server Ubuntu Debian Fedora OpenSUSE Rocky Linux CentOS Stream AlmaLinux 阿里云服务器有个scc版,这个…