我有一个名册表。
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(仅用于存储结果)
答案 0 :(得分:1)
您需要创建一个Stored Procedure in Amazon Redshift,而不是标量用户定义函数。
但是,鉴于您的用例,不建议这样做。这样会很低效,并且会导致性能下降。
您应该使用JOIN
来获取此类数据,例如:
SELECT
something,
roster.name
FROM other_table
JOIN roster ON (other_table.roster_id = roster.id)
这将高度优化选择。