如何让我的 Amazon Redshift UDF 接收字符串而不是列表?

Posted

技术标签:

【中文标题】如何让我的 Amazon Redshift UDF 接收字符串而不是列表?【英文标题】:How to make my Amazon Redshift UDF receive a string instead of a list? 【发布时间】:2016-11-25 23:34:34 【问题描述】:

我创建此函数是为了接收listagg() 作为参数并删除重复项。

create or replace function reports.f_listagg_distinct (l varchar(20000))
    returns varchar(20000)
immutable
as $$
aux_list = l.split(',')
nl = []
for i in aux_list:
    if i not in nl:
        nl.append(i)
return nl
$$ language plpythonu;

当我运行下面的代码时,我收到此错误:TypeError: expected string or Unicode object, list found

select reports.f_listagg_distinct('teste,teste,teste');

我做错了什么?

【问题讨论】:

【参考方案1】:

如果您希望返回一个不同的逗号分隔对象列表,请使用remove duplicates from comma separated string (Amazon Redshift) 中的此函数:

CREATE FUNCTION f_uniquify (s text)
  RETURNS text
IMMUTABLE
AS $$
  -- Split string by comma, remove duplicates, convert back to comma-separated
  return ', '.join(set(s.split(',')))
$$ LANGUAGE plpythonu;

测试它:

select f_uniquify('test,teste,tester,teste,test');

返回:

test, teste, tester

【讨论】:

以上是关于如何让我的 Amazon Redshift UDF 接收字符串而不是列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 Python 库 ua-parser 的 Amazon Redshift UDF

如何在 Amazon Redshift 中将整数转换为位字符串?

如何在 Redshift(亚马逊)中更新 UDF?

AWS Redshift UDF 错误

在 redshift UDF 中导入 jellyfish 模块

如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群