如何将Snowflake表内多个数组按对应位置拆分为多行数据
Snowflake 等长数组按索引对齐拆分为多行实现方案
你可以通过FLATTEN函数拆解任意一个数组得到元素索引,再通过索引匹配另外两个数组的对应位置元素即可实现需求。
假设你的表名为array_test,三个数组字段分别为order_arr、part_arr、price_arr,具体SQL如下:
SELECT f.VALUE AS order_num, part_arr[f.INDEX] AS part_num, price_arr[f.INDEX] AS price FROM array_test, LATERAL FLATTEN(input => order_arr) f
代码说明
LATERAL FLATTEN(input => order_arr) f:将每行的order_arr数组拆分为独立行,返回结果中f.VALUE为当前拆分出的数组元素值,f.INDEX为当前元素在原数组中的索引(从0开始计数)- 由于三个数组长度完全一致,直接用返回的索引
f.INDEX即可取出part_arr和price_arr对应位置的元素,保证每行三个字段来自三个数组的相同位置
如果存在数组长度不一致的场景,可增加过滤条件避免索引越界:
SELECT f.VALUE AS order_num, part_arr[f.INDEX] AS part_num, price_arr[f.INDEX] AS price FROM array_test, LATERAL FLATTEN(input => order_arr) f WHERE f.INDEX < ARRAY_SIZE(part_arr) AND f.INDEX < ARRAY_SIZE(price_arr)
注:如果你的数组字段实际使用
ORDER命名(SQL保留关键字),使用时需要用双引号包裹转义为"ORDER"。
执行以上SQL后即可得到7行结果,每行对应三个数组的同位置元素,与需求完全匹配。
内容的提问来源于stack exchange,提问作者Dror
相关产品推荐
相关产品推荐

