我有一個雪花存盤程序,一次運行 4 小時的資料,并在第一個小時輸出條目。
它有 3 個引數,即 start_hour、end_hour 和輸出表名。
我想在回圈中運行一整天,我正在嘗試撰寫以下回圈程序:
create procedure abc_daily()
returns varchar
language sql
as
$$
declare
iteration_limit integer default 24;
counter integer default 0;
begin
for i in 0 to iteration_limit do
call abc(
date_trunc('hour', dateadd(hour, counter, convert_timezone('UTC', '2022-05-10 00:00:00.000 0000'))),
date_trunc('hour', dateadd(hour, counter, convert_timezone('UTC', '2022-05-10 04:00:00.000 0000'))),
'output table name'
counter := counter 1;
end for;
end;
$$;
date_add 將幫助我將視窗滑動到第 23 小時。
但是,當我運行這個創建命令時,我得到
Syntax error: unexpected 'abc'. (line 19)
看起來它無法識別呼叫命令。
任何人都可以幫助讓它運行嗎?
我需要在這里使用 snowflake.execute 嗎?
uj5u.com熱心網友回復:
您的呼叫沒有結束父母和分號,并且您的時間無法識別
嘗試:
create procedure abc_daily()
returns varchar
language sql
as
$$
declare
iteration_limit integer default 24;
counter integer default 0;
begin
for i in 0 to iteration_limit do
call abc(
date_trunc('hour', dateadd(hour, counter, convert_timezone('UTC', '2022-05-10 00:00:00.000'))),
date_trunc('hour', dateadd(hour, counter, convert_timezone('UTC', '2022-05-10 04:00:00.000'))),
'output table name');
counter := counter 1;
end for;
end;
$$;
或將時間戳放入變數中,然后重用它:
create procedure abc(f timestamp_ntz, t timestamp_ntz, s text)
returns text
language sql
as
$$
begin
return f::text || t::text || s;
end;
$$;
create or replace procedure abc_daily()
returns varchar
language sql
as
$$
declare
iteration_limit integer default 2;
start_time timestamp_ntz;
begin
start_time := date_trunc('hour', to_timestamp_ntz('2022-05-10 00:00:00.000'));
for i in 0 to iteration_limit do
call abc( dateadd(hour, :i, :start_time), dateadd(hour, :i 4, :start_time), 'output table name');
end for;
end;
$$;
call abc_daily();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473802.html
