Snowflake 在循环中调用存储过程 N 次
Snowflake call a stored procedure inside a loop N times
我有一个雪花存储过程,运行一次处理 4 小时的数据并输出第一个小时的条目。
它有 3 个参数,即 start_hour、end_hour 和输出 table 名称。
我想运行循环一整天,我正在尝试编写以下循环过程:
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 会帮助我 window 滑到第 23 个小时。
然而,当我运行这个创建命令时,我得到
Syntax error: unexpected 'abc'. (line 19)
好像无法识别呼叫命令。
有人能帮忙搞定这个 运行ning 吗?
我需要在这里使用snowflake.execute吗?
您的调用没有结束父项和分号,无法识别您的时间
尝试:
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();
我有一个雪花存储过程,运行一次处理 4 小时的数据并输出第一个小时的条目。
它有 3 个参数,即 start_hour、end_hour 和输出 table 名称。
我想运行循环一整天,我正在尝试编写以下循环过程:
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 会帮助我 window 滑到第 23 个小时。
然而,当我运行这个创建命令时,我得到
Syntax error: unexpected 'abc'. (line 19)
好像无法识别呼叫命令。
有人能帮忙搞定这个 运行ning 吗?
我需要在这里使用snowflake.execute吗?
您的调用没有结束父项和分号,无法识别您的时间
尝试:
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();