如何在Amazon Athena中同时拆分多列嵌套列表为行?
在Amazon Athena中高效拆分多列嵌套列表
核心高效方法:单次unnest处理多列
不需要重复执行三次拆分操作,你可以在同一个unnest子句里同时指定所有需要展开的数组列,通过一次cross join完成多列的行转列,性能比多次拆分更优。
场景1:待拆分的数组列长度一致
如果要拆分的几列(比如COL4、COL5、COL6)每行中的数组元素数量相同,直接用以下代码即可:
select t.COL1, t.COL2, t.COL3, u.COL4, u.COL5, u.COL6 from t cross join unnest(t.COL4, t.COL5, t.COL6) as u(COL4, COL5, COL6)
场景2:待拆分的数组列长度不一致
如果不同数组列的元素数量不匹配,可以用with ordinality获取每个元素的位置索引,再通过位置关联展开,缺失的元素会显示为null:
select t.COL1, t.COL2, t.COL3, col4_val, col5_val, col6_val from t cross join unnest(t.COL4) with ordinality as c4(col4_val, pos) left join unnest(t.COL5) with ordinality as c5(col5_val, pos) using(pos) left join unnest(t.COL6) with ordinality as c6(col6_val, pos) using(pos)
内容的提问来源于stack exchange,提问作者Alejandra
相关产品推荐
相关产品推荐

