如果我在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
;