在 Snowflake 存储过程中创建 FOR 循环以从表执行 SLQ 查询列表

Create FOR loop inside Snowflake store procedure to execute SLQ query list from table

提问人:Big_Data_engineer 提问时间:11/9/2023 最后编辑:Big_Data_engineer 更新时间:11/15/2023 访问量:67

问:

我正在尝试在 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);

查询表

SQL 存储过程 snowflake-cloud-data-platform

评论

0赞 NickW 11/9/2023
您的过程没有输入参数
0赞 Big_Data_engineer 11/9/2023
@NickW即使使用参数 WHERE groupquery=1001 查询也不起作用。如果我删除行“ LET res RESULTSET := (EXECUTE IMMEDIATE :text1);”,则返回null

答:

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');

我回来了:

enter image description here

评论

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 格式的输出导出到本地。