Мне нужно передать массив в подготовленный оператор, определенный в AWS Redshift, чтобы отфильтровать мой запрос.Так как это не поддерживается в Redshift, я пытался обойти использование Python UDF.Что-то вроде:
-- 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')
Но когда я хочу определить функцию, я получаю сообщение об ошибке, говорящее, что массив целых чисел не является поддерживаемым типом возвращаемого значения UDF plpythonu.
Есть ли другой способ передать список целых чисел (или символов) в подготовленный оператор Redshift?