Snowflake UDF参数化实现:如何将表列名作为UDF输入参数
问题原因
你当前写的是静态SQL UDF,参数var1、var2会被直接当作字符串常量处理,不会被解析为table1的列名,因此无法实现动态指定查询列、过滤列的需求。
解决方案:使用IDENTIFIER()函数改写UDF
Snowflake 提供的内置函数IDENTIFIER()可以将字符串形式的标识符(列名、表名等)解析为实际的数据库对象,直接在UDTF中调用即可满足你的需求,改写后的代码如下:
create or replace function myfunc(var1 varchar, var2 varchar) returns table (result int) as $$ select IDENTIFIER(var1) as result from table1 where IDENTIFIER(var2) = 1 $$;
调用注意事项
调用时需要将列名作为字符串参数传入,需要给列名加单引号:
select * from table(myfunc('column1', 'column2'));
如果你的场景后续需要更复杂的动态SQL拼接逻辑,也可以改用JavaScript UDTF实现,灵活度更高。
内容的提问来源于stack exchange,提问作者Liumx31
相关产品推荐
相关产品推荐

