Redshift Python UDF Varchar 限制
Redshift Python UDFs Varchar limits
我已经成功创建了一个 Python UDF,它接受来自 table 的 varchar 值并根据正则表达式提取该值的子字符串。
DDL 中该 varchar 列的最大大小设置为 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]
-----------------------------------------------
是否将 UDF 输入变量的最大 varchar 限制设置为 256 字节?如果是,这是我可以在我的代码中更改的内容吗?
谢谢,
您使用的是 Text 还是 nvarchar? Redshift 内部不支持这些数据类型并将它们转换为 varchar(256)。
可以找到更多详细信息here
事实证明,如果长度超过 256,则必须在函数的参数中指定长度,这是默认值。所以我使用类似于 :
的方法解决了这个问题
CREATE OR REPLACE FUNCTION f_xxxxxx(val VARCHAR(20000)) RETURNS VARCHAR(20000)
IMMUTABLE AS $$
<python function here>
$$ LANGUAGE plpythonu;
我已经成功创建了一个 Python UDF,它接受来自 table 的 varchar 值并根据正则表达式提取该值的子字符串。
DDL 中该 varchar 列的最大大小设置为 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]
-----------------------------------------------
是否将 UDF 输入变量的最大 varchar 限制设置为 256 字节?如果是,这是我可以在我的代码中更改的内容吗?
谢谢,
您使用的是 Text 还是 nvarchar? Redshift 内部不支持这些数据类型并将它们转换为 varchar(256)。
可以找到更多详细信息here
事实证明,如果长度超过 256,则必须在函数的参数中指定长度,这是默认值。所以我使用类似于 :
的方法解决了这个问题CREATE OR REPLACE FUNCTION f_xxxxxx(val VARCHAR(20000)) RETURNS VARCHAR(20000)
IMMUTABLE AS $$
<python function here>
$$ LANGUAGE plpythonu;