Snowflake UDTF /以列名为参数的UDF


create or replace function get_column_values(column1 string, column2 string, table_name string) 
returns table(table_name varchar, row_count number)
as 
'select distinct column1, column2
from table_name
';

Snowflake的文档说他们的函数参数允许输入列名,但是我不能使它工作。输入总是被解释为字符串字面值,因此上面的函数不起作用。

或者,如果上述不可能,我们也可以做同样的事情,但作为一个过程。但是,过程(像上面的函数一样返回一个表)不能与表连接,不是吗?

select *
from table1
inner join
(CALL procedure_returning_table())

没有特定的代码要共享,因为这是概念上的——动态生成可以在另一个查询中使用的表结果。谢谢,很高兴听到你的想法!

可以使用SQL UDTF和"驱动表";

SELECT *
FROM driving_table AS d
JOIN TABLE(get_column_values(d.column1, d.column2, d.table_name)) AS c;

这里的挑战是,在UDTF内部不可能既使用动态SQL也使用TABLE/IDENTIFIER:

create or replace function get_column_values(column1 string,
column2 string,
table_name string) 
returns table(table_name string, column2 string)
as 
'select distinct IDENTIFIER(column1), IDENTIFIER(column2)
from TABLE(table_name)
';

你可以尝试一种方法,这可能对你有用

select *
from table1
inner join ( select distinct column1, column2
from table_name )  table_2  on  ....

相关内容

  • 没有找到相关文章

最新更新