使用 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
我正在使用 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