以动态 where 子句为参数的雪花 UDTF

时间:2021-03-16 07:44:27

标签: snowflake-cloud-data-platform

我正在尝试创建一个 UDTF,我计划将动态 where 子句作为参数传递给 UDTF

CREATE OR REPLACE FUNCTION FUNCTION_NAME(where_clause VARCHAR)
RETURNS TABLE ()
LANGUAGE JAVASCRIPT
AS
$$ var sql_command=SELECT COL1, COL2 FROM TABLE_1 JOIN TABLE_2 ON .... 
+where_clause+ GROUP BY ...;
var stmt = snowflake.createStatement( {sqlText: sql_command} ); 
var resultSet = stmt.execute(); resultSet.next();
$$

这是可能的吗,我还希望能够在调用函数期间处理参数中的引号

例如如果调用是:

SELECT * FROM TABLE(FUNCTION_NAME('WHERE COL_1='value''));

如何在调用函数期间处理引号。提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我想强调 Felipe 的回答。 JavaScript UDTF 不支持“存储过程 API”。

https://docs.snowflake.com/en/sql-reference/stored-procedures-api.html

因此您无法在 JavaScript UDTF 中创建和运行动态 SQL。它必须具有“processRow”回调函数来处理作为参数传入的值并将它们作为行返回。

https://docs.snowflake.com/en/sql-reference/udf-js-table-functions.html#basic-hello-world-examples

您可以创建一个存储过程来运行动态 SQL 并将结果作为数组/json 返回,但它不会生效。

对于您原来的问题,您只需要通过重复或使用斜杠来转义引号:

call FUNCTION_NAME('WHERE i=''1''');
call FUNCTION_NAME('WHERE i=\'1\'');