Snowflake cloud data platform 部署存储过程时使用会话变量雪花

Snowflake cloud data platform 部署存储过程时使用会话变量雪花,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我的情况是将存储过程DDL推入git存储库。这些代码有一些特定于环境的代码,比如我有dev、qa和prd,而每次部署时我都需要替换它们 我想要的是能够使用变量,这些变量可以在部署时替换。像这样的 var env= 'dev'; create or replace procedure test returns varchar language javascript as $$ insert into raw_$env.employee values(1); $$; 当我运行这段代码时,我希望像

我的情况是将存储过程DDL推入git存储库。这些代码有一些特定于环境的代码,比如我有dev、qa和prd,而每次部署时我都需要替换它们

我想要的是能够使用变量,这些变量可以在部署时替换。像这样的

var env= 'dev';

create or replace procedure test
returns varchar
language javascript
as
$$
insert into raw_$env.employee values(1);
$$;
当我运行这段代码时,我希望像这样部署代码

create or replace procedure test
returns varchar
language javascript
as
$$
insert into raw_raw.employee values(1);
$$;

要指定动态架构名称,可以使用IDENTIFIER()。然后使用javascript存储过程API执行

create or replace procedure test()
returns text
language javascript
execute as caller
as
$$
  snowflake.createStatement({ sqlText: `set t = 'raw_' || $env || '.employee'` }).execute()
  snowflake.createStatement({ sqlText: `insert into identifier($t) values(1)` }).execute()
  return 'SUCCESS'
$$;

set env= 'dev';

call test();
您可能还需要指定数据库


更新--静态解决方案,硬编码'env'参数

在SNOWSQL中运行

!define env=dev;

create or replace procedure test()
returns text
language javascript
execute as caller
as
$$
  snowflake.createStatement({ sqlText: `insert into raw_&env.employee values(1)` }).execute()  return 'SUCCESS'
$$;
要验证子状态是否为静态,请执行以下操作:

select get_ddl('procedure','test()')

env参数也可以在配置文件或命令行中定义。

我不想在存储过程中使用变量,我想使用变量部署代码。与运行DDL时一样,它应该将变量替换为实际值,而SQL CLI可以为您做到这一点。我加了一个例子。您也可以使用Python或其他语言与Snowflake API配合使用。我认为这是最接近的方法。如果您想要纯Snowflake SQL解决方案,您可以使用Snowflake过程TEST\u CREATE()来创建TEST()过程。TEST_CREATE将TEST()的模板存储在javascript字符串中,将$env的内容读入javascript变量,进行字符串替换,然后执行该模板。使用snowsql方法时,该变量在过程中没有被替换