如何在 Snowflake 中定义数组变量

Rox*_*ces 9 arrays variables snowflake-cloud-data-platform

如何在雪花工作表中定义数组变量?

set columns =  (SELECT array_agg(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS 
                where table_name='MEMBERS');
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

不支持的功能“来自非常量源表达式的分配”。

Fel*_*ffa 7

2022 年更新:

现在可以使用 Snowflake 脚本来实现:

declare
  tmp_array ARRAY default ARRAY_CONSTRUCT();
  rs_output RESULTSET;
begin
    for i in 1 to 20 do
        tmp_array := array_append(:tmp_array, OBJECT_CONSTRUCT('c1', 'a', 'c2', i));
    end for;
    rs_output := (select value:c1, value:c2 from table(flatten(:tmp_array)));
    return table(rs_output);
end;
Run Code Online (Sandbox Code Playgroud)

之前:

不存储数组,而是聚合在逗号分隔的字符串中:

set x = (SELECT listagg(COLUMN_NAME, ',') FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'TABLE_S%');
Run Code Online (Sandbox Code Playgroud)

但是:根据https://docs.snowflake.com/en/sql-reference/session-variables.html,“字符串或二进制变量的大小限制为 256 字节” 。

这意味着即使您可以将数组存储在变量中,它也可能会超出限制。而是将结果存储在 [temp] 表等中。