You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中基于JSON字符串创建可查询的数组变量?

在Snowflake中创建可复用的查询数组变量

Snowflake的SET命令不允许将parse_json这类非常量表达式的结果直接赋值给会话变量,你可以通过以下几种方式实现数组的复用,分为会话级和全局级两种场景:

会话级复用(仅当前会话有效)

先将JSON字符串存入会话变量,查询时再解析并展开数组:

-- 存储JSON字符串到会话变量
set my_arr_str = '["Hello", "world"]';

-- 查询时解析并使用数组
select
    *
from
    my_tbl
where
    word in (select value from table(flatten(input => parse_json($my_arr_str))));

这种方式无需额外存储对象,仅在当前会话内有效,适合临时复用数组的场景。

全局级复用(所有会话均可使用)

如果需要跨会话复用数组,推荐以下两种方案:

方案1:用专用表存储数组

创建一张单记录表存储数组数据,后续查询直接关联该表使用:

-- 1. 创建全局存储表(仅需执行一次)
create or replace table global_arrays (
    array_name varchar(100) primary key,
    array_data variant
);

-- 2. 插入或更新数组数据
insert into global_arrays (array_name, array_data)
values ('my_arr', parse_json('["Hello", "world"]'))
on duplicate key update array_data = parse_json('["Hello", "world"]');

-- 3. 查询时引用数组
select t.*
from my_tbl t
join global_arrays ga 
  on ga.array_name = 'my_arr'
where t.word in (select value from table(flatten(input => ga.array_data)));

优势:数组数据可随时更新,无需修改查询逻辑,适合数组内容频繁变化的场景。

方案2:用SQL UDF返回数组

创建一个全局UDF直接返回目标数组,查询时调用UDF即可:

-- 1. 创建全局UDF(仅需执行一次)
create or replace function get_my_arr()
returns variant
language sql
as $$
    parse_json('["Hello", "world"]')
$$;

-- 2. 查询时使用数组
select
    *
from
    my_tbl
where
    word in (select value from table(flatten(input => get_my_arr())));

优势:语法简洁,适合数组内容相对固定的场景,修改数组只需更新UDF定义。

内容的提问来源于stack exchange,提问作者Coldchain9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:52:57