Возможно ли передать массив в подготовленную инструкцию на Amazon Redshift?

#prepared-statement #amazon-redshift #user-defined-functions

#подготовленная инструкция #amazon-redshift #определяемые пользователем функции

Вопрос:

Мне нужно передать массив в подготовленную инструкцию, определенную на AWS Redshift, чтобы отфильтровать мой запрос. Поскольку это не поддерживается в Redshift, я пытался найти обходной путь, используя UDF на Python. Что-то вроде:

 -- a function to split a comma separated list of values (string is already validated)

CREATE FUNCTION split_str_to_ints (string char) RETURNS int[] IMMUTABLE as $$
    def split_stoi(string):
      ints = [int(item) for item in string.split(',')]
      return ints
$$ LANGUAGE plpythonu;
  
 -- a prepared statement to return orders filtered by company id

PREPARE get_orders (char) as 
SELECT order.id
       order.company_id,
       COUNT(order.id) AS order_count
FROM order
  INNER JOIN company ON (order.company_id = company.company_id)
WHERE company.company_id IN (split_str_to_ints($1))
GROUP BY order.id, order.company_id
ORDER BY order_count DESC;
  
 EXECUTE get_orders('1,2,3,4')
  

Но когда я хочу определить функцию, я получаю сообщение об ошибке, в котором говорится, что массив целых чисел не является поддерживаемым типом возвращаемого значения plpythonu UDF.

Есть ли какой-либо другой способ передать список целых чисел (или символов) в подготовленную инструкцию на Redshift?

Комментарии:

1. Я сомневаюсь, что вы сможете это сделать. Ожидается, что IN инструкция вернет 1 или более строк. Список вряд ли удовлетворит этим требованиям.