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 ....