Redshift:如何创建使用查找表的函数

时间:2019-07-09 16:13:20

标签: sql amazon-redshift

我有一个名册表。

custom_apps.checkout

我想创建一个函数fnGetRoster(int),该函数将通过搜索名册表返回名称。

赞:

Id int primary key,
Name varchar(100)

我发现在RedShift中很难做到这一点,因为我不能在from,where等地方使用它。

我该怎么办?我使用功能不正确吗?

===================新添加的信息(1个回答后)==================== < / p>

我看到很多人提到存储过程和联接。谢谢,但是请原谅我没有很好地描述整个问题,因为原始问题有点长,所以我问了一个简单的版本。 我正在迁移旧表并创建新结构。其中一个字段包含这样的内容

create or replace function fnGetRoster(int)
returns varchar(100)
stable
as $$
    select name from Roster where Id = $1
$$ language sql

其中另一个表称为Category

Category
CatA : CatB : CatC : ..... : CatX

不好的是,此表中没有categoryID类的东西,因此我必须分析整个字符串以找出CategoryId。我不能直接使用字符串的最后一部分,因为不能保证名称唯一。 (但可以保证完整的类别名称是唯一的)。我希望编写一个可以进行分析然后带一个ID的函数,但是我发现函数似乎是出于与RedShift不同的目的而设计的 ... 现在,我正在处理这些程序……我正在考虑将此数据迁移任务移出Redshift(仅用于存储结果)

1 个答案:

答案 0 :(得分:1)

您需要创建一个Stored Procedure in Amazon Redshift,而不是标量用户定义函数。

但是,鉴于您的用例,不建议这样做。这样会很低效,并且会导致性能下降。

您应该使用JOIN来获取此类数据,例如:

SELECT
  something,
  roster.name
FROM other_table
JOIN roster ON (other_table.roster_id = roster.id)

这将高度优化选择。