select explode(t.arr) from (select array('a','b','c') as arr) t;
col
a
b
c
select t1.id,t2.arrfrom (select 'xxx'as id,array('a','b','c') as arr) t1 lateral view explode(t1.arr) t2 as arr ;
id
arr
xxx
a
xxx
b
xxx
c
3.1.2 posexplode
select posexplode(t.arr) from (select array('a','b','c') as arr) t;
pos
val
0
a
1
b
2
c
select t1.id,t2.serialno,t2.arrfrom (select 'xxx'as id,array('a','b','c') as arr) t1 lateral view posexplode(t1.arr) t2 as serialno,arr ;
id
serialno
arr
xxx
0
a
xxx
1
b
xxx
2
c
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中暂时还不支持这个关键字,所以我们换另一种方法来实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?