我们可以在 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 参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

Netezza Java UDTF 自定义函数

hive_UDTF函数

Hive UDTF开发指南

使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多Java

使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多Java

使用Spark的foreach算子及UDTF函数实现MySQL数据的一对多Java