我们可以在 UDTF 中使用标识符函数,其参数来自 Snowflake 中的 UDTF 参数吗?
Posted
技术标签:
【中文标题】我们可以在 UDTF 中使用标识符函数,其参数来自 Snowflake 中的 UDTF 参数吗?【英文标题】:Can we use identifier function inside UDTF with its argument coming from the UDTF arguments in Snowflake? 【发布时间】:2020-05-26 22:34:21 【问题描述】:下面是这个 UDTF 的示例:
create function select2 (tname varchar, cname varchar)
returns table (value variant)
as $$
SELECT IDENTIFIER(cname) FROM IDENTIFIER(tname)
$$
当试图部署这个函数时,它会抛出一个语法错误异常,抱怨标识符后面的表达式无效。 有什么想法吗?
【问题讨论】:
【参考方案1】:UDF 并非旨在创建“动态 SQL”。您可以使用标识符函数,但它应该使用文字调用:
create function select2 (tname varchar, cname varchar)
returns table (value varchar)
as $$
SELECT IDENTIFIER('cname') FROM IDENTIFIER('yourtable')
$$
它不会和普通 SQL 不同:
SELECT cname FROM yourtable
如果要生成动态 SQL,则应使用 javascript 存储过程:
https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#label-example-of-dynamic-sql-in-stored-procedure
【讨论】:
知道为什么他们有这么严格的限制吗?以上是关于我们可以在 UDTF 中使用标识符函数,其参数来自 Snowflake 中的 UDTF 参数吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多Java