использование переменных сеанса при развертывании хранимых процедур-снежинки - PullRequest
0 голосов
/ 27 марта 2020

У меня есть ситуация, когда я помещаю свою хранимую процедуру DDL в git хранилище. У этих кодов есть некоторые специфические для среды c коды, например, у меня есть 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);
$$;

1 Ответ

0 голосов
/ 27 марта 2020

Чтобы указать имя схемы Dynami c, вы можете использовать IDENTIFIER (). Затем используйте API хранимых процедур javascript для выполнения.

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();

Вы также можете указать базу данных.


ОБНОВЛЕНИЕ - решение Stati c, жесткое кодирование параметра 'env *

RUN IN SNOW SQL

!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'
$$;

Чтобы убедиться, что подстановка: stati c:

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

Параметр env также можно определить в файле конфигурации или в командной строке SNOW SQL.

...