我目前正试图重构雪花中的一些SQL逻辑,以提高可读性,并通过使用UDF来减少重复代码。
下面是我要创建的UDF:
create or replace function myfunc(var1 varchar, var2 varchar)
returns table (result int)
as
$$
select var1 from table1
where var2 = 1
$$;
select * from table(myfunc(column1, column2));我希望var1和var2是table1中的两个列名,但不确定如何在SQL/雪花UDF中这样做。
发布于 2021-08-10 13:50:25
雪花允许使用IDENTIFIER和变量来实现类似的效果:
SET (VAR1, VAR2) = ('my_col1', 'my_col2');
SELECT IDENTIFIER($VAR1)
FROM table_name
WHERE IDENTIFIER($VAR2) = 1;但是,这种语法不能用UDTF包装。要参数化列列表/表名,可以使用动态SQL(存储过程)。
Sidenote:问题中使用的模式:
select * from table(myfunc(column1, column2));称为多态表函数(),并在信息技术.数据库语言. SQL技术报告.第7部分: SQL中的多态表函数中定义。
它允许在运行时形成结果的结构,并提供更大的灵活性。一个例子可以是例外
https://stackoverflow.com/questions/68721495
复制相似问题