执行表中的SQL语句,并返回Snowflake中的结果记录集



我需要一个实用场景的帮助。我在Snowflake中有一个名为CONFIG_TBL的表。此表包含SQL语句,每行1条。我的目标是使用Snowflake存储过程或SnowflakeUDF,或两者的组合,并返回执行该语句后将获得的结果集。

这些语句是简单的选择语句;从ABC中选择*。

我本可以在SQL server中非常容易地做到这一点,因为过程可以返回表值。然而,我不知道如何在Snowflake中做到这一点。

任何帮助都将不胜感激。

提前谢谢。

这里至少有一些东西可以让你开始。过程使用javascript(SQL存储过程即将推出(,但它们可以用于运行您想要的动态查询。

你可以通过几种方式得到结果。通过返回变量对象或在调用过程后使用result_scan。

此示例只运行一个查询,因此最终解决方案会有所不同,具体取决于您希望输出的样子。

CREATE OR REPLACE PROCEDURE SCHEMA.PROCEDURE_NAME()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS $$
retrieve_queries_sql = "select top 1 query from CONFIG_TBL";
retrieve_queries_result_set = snowflake.execute({sqlText: retrieve_queries_sql });
query_to_run = retrieve_queries_result_set.next().getColumnValue(1);
rs = snowflake.execute({sqlText: query_to_run})
var return_value = "";
if (rs.next())  {
return_value += rs.getColumnValue(1);
return_value += ", " + rs.getColumnValue(2);
}
while (rs.next())  {
return_value += "n";
return_value += rs.getColumnValue(1);
return_value += ", " + rs.getColumnValue(2);
}
}
return return_value;
$$
CALL SCHEMA.PROCEDURE_NAME()
SELECT *
FROM table(result_scan(last_query_id()))

编辑:修复了让示例正确返回一个结果,然后可以由result_scan使用的问题。示例取自此处。还有很多从过程中获取结果的例子,包括使用JSON输出。

我们可以使用SQL语言并将值返回到表,表可以返回表值。

CREATE OR REPLACE PROCEDURE DDL_TEST_SQL()
RETURNS TABLE(CARRIERFILEID integer, BLOBPATH varchar)
LANGUAGE SQL
EXECUTE AS OWNER
AS
$$
DECLARE
QUERY STRING;
res resultset;
BEGIN
QUERY := 'SELECT TOP 10 CARRIERFILEID,BLOBPATH from CONFIG.CARRIERFILE';
res := (EXECUTE IMMEDIATE :QUERY);
return table(res);
END;
$$;

CALL DDL_TEST_SQL()

最新更新