【发布时间】:2022-11-22 08:03:46
【问题描述】:
如果我在 Snowflake 中有一个包含 ARRAY 的变体列,我可以通过使用 flatten 将其转换为表来对每个元素进行操作:
SELECT value FROM LATERAL FLATTEN(arr)
这对我来说似乎有点笨拙。有没有更简洁的方法来做到这一点?
【问题讨论】:
标签: sql arrays snowflake-cloud-data-platform
如果我在 Snowflake 中有一个包含 ARRAY 的变体列,我可以通过使用 flatten 将其转换为表来对每个元素进行操作:
SELECT value FROM LATERAL FLATTEN(arr)
这对我来说似乎有点笨拙。有没有更简洁的方法来做到这一点?
【问题讨论】:
标签: sql arrays snowflake-cloud-data-platform
操作是一个广义术语,但是,可以在不展平数组的情况下对数组执行许多操作。
第一种方法是使用一个内置的数组函数。它们都以 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
;
【讨论】: