Ограничения Varchar для пользовательских функций Redshift Python

Я успешно создал UDF Python, который принимает значение varchar из таблицы и извлекает подстроку этого значения на основе регулярного выражения.

Максимальный размер этого столбца varchar в DDL установлен равным 20000 байт, и в некоторых случаях UDF выводит ошибку, когда я пытаюсь его вызвать:

ERROR: Value too long for character type

Detail: 
  -----------------------------------------------
  error:  Value too long for character type
  code:      8001
  context:   Value too long for type character varying(256)
  query:     1127608
  location:  funcs_string.hpp:390
  process:   query0_73 [pid=25345]
  -----------------------------------------------

Дело в том, что максимальный предел varchar для входной переменной UDF установлен на 256 байтов? Если да, могу ли я изменить это в своем коде?

Спасибо,


person and_apo    schedule 09.11.2015    source источник


Ответы (2)


Оказывается, вы должны указать длину в параметре вашей функции, если она больше 256, что является значением по умолчанию. Поэтому я исправил это, используя что-то похожее на:

CREATE OR REPLACE FUNCTION f_xxxxxx(val VARCHAR(20000)) RETURNS VARCHAR(20000) 
IMMUTABLE AS $$
<python function here>
$$ LANGUAGE plpythonu;
person and_apo    schedule 11.11.2015
comment
К вашему сведению: вы можете использовать VARCHAR(MAX), если ваша функция принимает максимально возможную строку. Вы также хотите убедиться, что вы используете RETURNS VARCHAR(MAX), если это так, потому что, по-видимому, VARCHAR == VARCHAR(256) в Redshift. - person ZiggyTheHamster; 02.08.2017
comment
этот ответ правильный, можно сослаться на официальный ответ aws - person Vanjor; 31.05.2018

Вы используете текст или nvarchar? Redshift внутри не поддерживает эти типы данных и преобразует их в varchar(256).

Более подробную информацию можно найти здесь

person Paladin    schedule 10.11.2015