在Snowflake中对数组执行逐成员操作



如果我在Snowflake中有一个包含ARRAY的变体列,我可以通过使用flatten将其转换为表来对每个元素进行操作:

SELECT value FROM LATERAL FLATTEN(arr)

这对我来说似乎有些笨拙。有没有不那么冗长的方法?

操作是一个广义的术语,但是,是的,可以在数组上执行许多操作而不使其扁平化。

第一种方法是使用一个内置数组函数。它们都以array_开头,这里有一个列表:https://docs.snowflake.com/en/sql-reference/functions-all.html

另一个不进行扁平化处理的选择是在JavaScript、Python、Java或Scala中使用过程UDF。下面是一个hello-world级别的例子:

create or replace function SUM_ARRAY(ARR array)
returns float
language javascript
strict immutable
as
$$
let sum = 0;
for (let i=0; i<ARR.length; i++) {
sum += ARR[i];
}
return sum;
$$;
with DATA as
(
select [1,2,3] as ARR
)
select sum_array(ARR) ARRAY_SUM from DATA
;

最新更新