如何创建一个存储过程,在月底创建表,但表名是根据系统日期自动生成的

问题描述 投票:0回答:1

尝试创建一个在 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

任何提示或技巧都会有帮助,谢谢

sql stored-procedures snowflake-cloud-data-platform scheduled-tasks
1个回答
0
投票

是的,这是可能的,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;
';
© www.soinside.com 2019 - 2024. All rights reserved.