问题描述
我正在尝试使用 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
$$;
select * from table(returntable()); - 现在这会返回一个表作为输出。
但是因为我需要执行一些功能,例如条件 if、case 语句、变量、动态创建临时表以及各种典型的业务需求,这就是我想编写 javascript UDTF 的原因。我能够完成所有这些功能,但无法在其中写入最终的 select * from table,因此它在一些转换后将我的表作为输出返回。
所以,为了简单起见,我正在尝试实现这样的目标
create or replace function RETURN_TABLE()
returns table (COL1 varchar(100),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,COL3 from PUBLIC.MYTABLE
}
}
$$;
有人可以帮助我吗。
解决方法
根据 Snowflake 文档,UDF 不应该有任何 DDL 语句,当您用 JavaScript 编写它时,它不会在编译时验证,而是在运行时验证。