尝试创建一个在 Snowflake 上每月更新的存储过程:
第一步:创建程序
Create or replace procedure test_table()
Returns VARCHAR(16777216)
LANGUAGE SQL
AS '
BEGIN
CREATE OR REPLACE TABLE TEST_DATA_MARCH_2024 AS
SELECT * FROM TEST_VIEW;
RETURN ''Test snapshot for March'';
end;
';
第2步:从上面的过程中,我设置了每月刷新的任务。
create or replace task Test_Task
warehouse = XYZ
SCHEDULE = 'using cron 0 7 1 * *'
as CALL test_table()
alter task Test_task resume
此逻辑将在每月第一天上午 7 点创建表, 现在我想自动更新表的名称,而不是覆盖 TABLE TEST_DATA_MARCH_2024 我希望过程创建其中包含相应月份和年份名称的表名称。
因此,对于 2024 年 4 月,创建的表应该是 TEST_DATA_APRIL_2024 而不是 TEST_DATA_MARCH_2024。
任何提示或技巧都会有帮助,谢谢
是的,这是可能的,Snowflake 有
MONTHNAME
函数返回 3 个字母的月份名称。您可以在存储过程的开头设置一个变量并在表名称中使用
set dt = to_date('2024-04-01'); --replace with current_date()
set table_suffix = (select MONTHNAME($dt-1) || '_' || YEAR($dt-1));
select UPPER($table_suffix) will give you the value
将代码添加到您的 SP
Create or replace procedure test_table()
Returns VARCHAR(16777216)
LANGUAGE SQL
AS '
BEGIN
set dt = to_date('2024-04-01'); --replace with current_date()
set table_suffix = (select MONTHNAME($dt-1) || '_' || YEAR($dt-1));
CREATE OR REPLACE TABLE TEST_DATA_UPPER($table_suffix) AS
SELECT * FROM TEST_VIEW;
RETURN ''Test snapshot for March'';
end;
';