【问题标题】:How to use DDL statements inside java script UDTF in snowflake如何在雪花中的 java 脚本 UDTF 中使用 DDL 语句
【发布时间】:2021-05-06 05:10:00
【问题描述】:

我正在尝试使用 DDL 语句,例如从 java 脚本 UDTF 中的表中选择列。 我能够在普通 UDTF 中实现如下

create function returntable()
    returns table(COL1 varchar(100),COL2 VARCHAR(100),COL3 NUMBER(10,0))
    as
    $$
        select COL1,COL2,COL3 from PUBLIC.MYTABLE
    $$;

从表中选择 *(returntable()); - 现在这会返回一个表格作为输出。

但是因为我需要执行一些功能,例如条件 if、case 语句、变量、动态创建临时表以及各种典型的业务需求,这就是我想编写 javascript UDTF 的原因。我能够完成所有这些功能,但无法在其中编写 final select * from table,以便在经过一些转换后将我的表作为输出返回。

所以,为了简单起见,我正在尝试实现这样的目标

    create or replace function RETURN_TABLE()
    returns table (COL1 varchar(100),COL2 VARCHAR(100),COL3 NUMBER(10,0))
    language javascript
    as
    $$
    {
      processRow: function (row, rowWriter, context){

      /** SOME TRANSORMATIONS USING VARIABLES, TEMP TABLES, IF COMES HERE **/

      rowWriter.writeRow({COL1: ColumnValesfromSelectQuery,COL2: ColumnValesfromSelectQuery,COL3: ColumnValesfromSelectQuery});
      //select COL1,COL2,COL3 from PUBLIC.MYTABLE    
              
        }
        }
    $$;

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你可以使用存储过程来代替 UDF,docs.snowflake.com/en/sql-reference/…
  • 感谢@FelipeHoffa 的回复,我正在尝试将表格作为输出,但我没有看到使用过程的选项(我什至不需要逗号分隔值,正是我需要一个表作为输出,就像在 sql server 中一样,我们可以在过程中使用 select * from table 并返回一个表作为输出)

标签: javascript snowflake-cloud-data-platform table-functions


【解决方案1】:

根据 Snowflake 文档,UDF 不应该有任何 DDL 语句,当你用 JavaScript 编写它时,它不会在编译时验证,而是在运行时验证。

【讨论】:

  • 确实!文档是这样说的Although the body of a UDF can contain a complete SELECT statement, it cannot contain DDL statements or any DML statement other than SELECT.docs.snowflake.com/en/sql-reference/udf-sql.html。同时 JS 过程中允许使用 DDL 语句。
  • UDTF 也是这种情况吗?实际上,我可以轻松地使用程序,但我不能从程序中返回一个表,所以我关闭了这个选项。
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2018-11-12
  • 2020-10-07
  • 1970-01-01
相关资源
最近更新 更多