无法在Snowflake中的Javascript UDF中使用查询结果

时间:2018-10-08 05:53:55

标签: javascript snowflake

谢谢您的时间。

我正在研究Snowflake数据库中的问题。我基本上是在尝试创建如下所示的Javascript UDF-

CREATE OR REPLACE FUNCTION getACity()   
RETURNS STRING   
LANGUAGE JAVASCRIPT   
AS 
'function getCity() {
var str;
$$  str = select * from CITY where name="Laflin" //This is the problem 
$$
return str;   
}';

如您所见,我正在尝试使用函数中另一个表中的数据,但是没有发生,并且出现以下错误-

  

JavaScript编译错误:语法错误:意外   getACity中位于'str = select * from CITY的标识符,其中   name =“ Laflin”'位置21

我了解我用于在javascript函数内执行查询的语法不正确,但我甚至不确定在Snowflake中是否可行。

我有以下问题-

  1. 我可以在javascript UDF中执行查询并在正在进行的函数中使用结果吗?
  2. 我可以在另一个Javascript UDF中调用Javascript UDF吗?如果可能的话,它也将对我有用。

我经历过雪花documentation,但找不到针对此案例的任何帮助。

再次感谢您的宝贵时间。非常感谢!

2 个答案:

答案 0 :(得分:2)

要回答您的问题:

  • 雪花JavaScript UDF如今不允许以任何形式在其中执行查询。
  • 您不能在JS UDF中使用JS UDF

您可以为此使用SQL UDF,但这只能产生一列,例如

create or replace function getcityid() 
returns string as '
  select id from CITY where name='Laflin'
';

或使用VIEW,例如

create or replace view cities as select * from CITY where name='Laflin'

如果您准确解释 您要达到的目标,这将会有所帮助。

此外,请注意,SQL中的"Laflin"是指名为Laflin的列,而不是值为Laflin的字符串。为此使用'Laflin'

答案 1 :(得分:0)

雪花JavaScript UDF不支持运行sql,但是您可以使用过程来执行该操作,但是过程将仅返回一个值/不返回表函数结果。

有关雪花的详细信息,请参阅文档

https://docs.snowflake.net/manuals/sql-reference/stored-procedures-overview.html#benefits-of-stored-procedures