提问人:Big_Data_engineer 提问时间:11/9/2023 最后编辑:Big_Data_engineer 更新时间:11/15/2023 访问量:67
在 Snowflake 存储过程中创建 FOR 循环以从表执行 SLQ 查询列表
Create FOR loop inside Snowflake store procedure to execute SLQ query list from table
问:
我正在尝试在 snowflake 中创建一个 inside store 过程的循环。我创建了一个表,它有 3 列(groupqueryids、query、orderid)。一个 groupqueryid 可以有多个查询,并由 orderid 短接。用户将输入 groupqueryids 来执行他们想要执行的查询集,最终查询输出将以 csv 格式存储表。
我创建了不起作用的查询。需要帮助。
CREATE OR REPLACE PROCEDURE myprocedure()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
-- Snowflake Scripting code
DECLARE
count1 INTEGER DEFAULT 0;
c1 CURSOR FOR SELECT query FROM qset WHERE groupquery='' ORDER BY orderid;
res1 resultset default(SELECT query FROM qset);
text1 VARCHAR;
BEGIN
FOR record IN c1 DO
text1 := record.query;
LET res RESULTSET := (EXECUTE IMMEDIATE :text1);
-- res1 := res;
END FOR;
RETURN text1;
END;
$$
;
CALL myprocedure(GQID02);
查询表
答:
0赞
Sergiu
11/9/2023
#1
此过程对我有用:
create or replace table t1 (groupquery varchar(10), query string, orderid int);
insert into t1 values ('GDID01', 'select * from citibike_trips limit 1', 1);
insert into t1 values ('GDID02', 'select * from citibike_trips limit 10', 2);
SELECT query FROM t1 WHERE groupquery='GDID02' ORDER BY orderid;
CREATE OR REPLACE PROCEDURE myprocedure(gq varchar)
RETURNS table()
LANGUAGE SQL
AS
$$
-- Snowflake Scripting code
DECLARE
count1 INTEGER DEFAULT 0;
res resultset DEFAULT (SELECT query FROM t1 WHERE groupquery=:gq order by orderid);
c1 CURSOR FOR res;
text1 VARCHAR;
rs resultset;
BEGIN
FOR record IN c1 DO
text1 := record.query;
rs := (EXECUTE IMMEDIATE :text1);
END FOR;
RETURN table(rs);
END;
$$
;
CALL myprocedure('GDID02');
我回来了:
评论
0赞
Big_Data_engineer
11/14/2023
如何执行输出sql查询?
0赞
Sergiu
11/14/2023
@Big_Data_engineer,我已经调整了我的答案,以表明您实际上可以获得在循环中运行 SQL 查询的结果集。希望这就是你要找的。
0赞
Big_Data_engineer
11/14/2023
它工作正常,是我想要的。谢谢
0赞
Sergiu
11/14/2023
很高兴听到这个消息。然后,您可以将答案标记为正确。
0赞
Big_Data_engineer
11/14/2023
如何使用查询将 .csv 格式的输出导出到本地。
评论