Использование Array_contruct для сортировки столбца массивов с хранимой процедурой после его создания

Я наткнулся на поток для сортировки, когда пытался найти решение для сортировки моего столбца массива.

Я попробовал ответить, и у меня возникли проблемы с установкой переменной для хранения массива.

Это не работает:

SET b = ['asdfk', 'sdfdd'];

Вот что я пробовал:

CREATE OR REPLACE FUNCTION sort_func(a array)
  RETURNS string
  LANGUAGE JAVASCRIPT
AS
$$
  return A.reverse()
$$
;

 SELECT sort_func('foo');

Где SELECT sort_func ('foo');

Это ошибка:

SQL compilation error: error line 1 at position 7 Invalid argument types for function 'SORT_FUNC': (VARCHAR(3))

Могу ли я помочь лучше понять, как Snowflake видит «массивы». Спасибо!


person Rachel McGuigan    schedule 17.12.2019    source источник


Ответы (1)


Здесь есть несколько вопросов:

  1. Функция ожидает массив и возвращает строку, но ничего в функции не выполняет этого преобразования.
  2. Выбор функции осуществляется строкой, а не массивом, поэтому функция ожидает массив и получает строку.

Попробуйте что-то вроде этого, чтобы имитировать JS-функцию reverse ():

CREATE OR REPLACE FUNCTION SORT_FUNC(V array)
  RETURNS array
  LANGUAGE JAVASCRIPT
AS
$$
   if (V !== null) {
        return V.reverse();
      }
$$;

SELECT sort_func( array_construct('foo','bar') );
person Mike Walton    schedule 17.12.2019
comment
Имеет смысл, что передача строки не сработает, спасибо, я изменил ее, чтобы также включать в себя приведение arraycy_construct к данным. - person Rachel McGuigan; 18.12.2019