使用 Snowflake 脚本在存储过程中为 table/identifier 名称使用变量

Use a variable for table/identifier name in stored procedure with Snowflake Scripting

我正在使用 Snowflake Scripting 创建一个存储过程,我希望输出是一个带有日期戳的 table。在 SQL 我会写成

set creation_date = to_varchar(current_date(), 'YYYYMMDD');

set output_tbl_name = concat('my_database.my_schema.', 'output_', $creation_date);

create or replace table identifier($output_tbl_name) (col1 varchar, col2 varchar);

这将创建一个名为 output_20220216 的 table。

但是,如果我在存储过程中使用 Snowflake Scripting,则无法识别 set 函数。我尝试使用

let creation_date varchar := to_varchar(current_date(), 'YYYYMMDD');

let output_tbl_name varchar := concat('my_database.my_schema.', 'output_', $creation_date);

create or replace table identifier($output_tbl_name) (col1 varchar, col2 varchar);

但由于 $ 符号,我收到错误消息。如果我使用 create or replace table output_tbl_name,它只会创建一个名为 output_tbl_name 的 table。

如何在 Snowflake 脚本中使用标识符?

使用 Snowflake 脚本和 EXECUTE IMMEDIATE 连接查询:

DECLARE
   creation_date   STRING := to_varchar(current_date(), 'YYYYMMDD');
   output_tbl_name STRING := concat('my_database.my_schema.', 'output_', :creation_date);
   QUERY           STRING;
BEGIN

   QUERY:= REPLACE(          
         'create or replace table <output_tbl_name>(col1 varchar, col2 varchar);'
         ,'<output_tbl_name>', :output_tbl_name);         ;    

   EXECUTE IMMEDIATE :QUERY;
   
   RETURN :QUERY;
END;

输出(经典UI):

SELECT * FROM my_database.my_schema.output_20220217;
-- COL1 COL2