【问题标题】:Redshift Python UDFs Varchar limitsRedshift Python UDF Varchar 限制
【发布时间】:2016-02-09 23:56:24
【问题描述】:

我已经成功创建了一个 Python UDF,它接受来自表的 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 字节?如果是,这是我可以在我的代码中更改的内容吗?

谢谢,

【问题讨论】:

    标签: python amazon-redshift udf


    【解决方案1】:

    您使用的是 Text 还是 nvarchar? Redshift 内部不支持这些数据类型并将它们转换为 varchar(256)。

    更多详情可以查看here

    【讨论】:

      【解决方案2】:

      事实证明,如果函数参数的长度超过 256(这是默认值),则必须在其中指定长度。所以我使用类似于以下内容的方法解决了这个问题:

      CREATE OR REPLACE FUNCTION f_xxxxxx(val VARCHAR(20000)) RETURNS VARCHAR(20000) 
      IMMUTABLE AS $$
      <python function here>
      $$ LANGUAGE plpythonu;
      

      【讨论】:

      • 仅供参考:如果您的函数接受可能的最大字符串,您可以使用VARCHAR(MAX)。您还需要确保使用 RETURNS VARCHAR(MAX),因为显然,在 Redshift 中,VARCHAR == VARCHAR(256)。
      • 这个答案是对的,可以参考aws official answer
      猜你喜欢
      • 2019-03-07
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2014-08-14
      相关资源
      最近更新 更多