Невозможно использовать результаты запроса внутри Javascript UDF в Snowflake - PullRequest
0 голосов
/ 08 октября 2018

Спасибо за ваше время.

Я работаю над проблемой в базе данных 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: Uncaught SyntaxError: Неожиданный идентификатор в getACity в позиции 'str = select * from CITY, где name = "Laflin" 21

Я понимаю синтаксисиспользование для выполнения запроса внутри функции javascript некорректно, но я даже не уверен, возможно ли это в Snowflake.

У меня есть следующие вопросы -

  1. Могу ли я выполнитьзапросить внутри UDF JavaScript и использовать результаты в текущей функции?
  2. Могу ли я вызвать UDF Javascript внутри другой UDF Javascript?Если это возможно, это будет работать и для меня.

Я прошел Снежинку Документация , но не смог найти никакой помощи, специфичной для этого случая.

Еще раз спасибо за ваше время.Очень ценится!

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Snowflake JavaScript UDF не поддерживает запуск sql, однако вы можете использовать процедуру для этого, однако процедура будет возвращать только одно значение / не результат табличной функции.

Для получения подробной информации о Snowflake, пожалуйста, обратитесь к документации

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

0 голосов
/ 11 октября 2018

Чтобы ответить на ваши вопросы:

  • UDF JavaScript типа Snowflake не позволяют выполнять запросы внутри них в любой форме сегодня.
  • вы не можете использовать UDF JS в своих UDF JS

Вы МОЖЕТЕ использовать для этого UDF-функции SQL, но при этом можно создать только один столбец, например,

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'

Если вы объясните точно то, что вы пытаетесь достичь, должно помочь.

Также обратите внимание, что "Laflin" в SQL относится к столбцу с именем Laflin, а не к строке со значением Laflin.Для этого используйте 'Laflin'.

...