Snowflake UDF - 不支持的子查询类型

问题描述 投票:0回答:1

我正在尝试创建一个函数,该函数将根据查找表中的分数和版本号返回标签

所以我有一个查找表

标签 版本 分钟 最大
1 7 10
医学 1 3 6
1 0 2
2 8 10
医学 2 5 7
2 0 4
create function get_label(score int, version int, vector string)
returns varchar
language sql as
$$
select label
from lookup
where version = coalesce(version, to_number(substr(vector,2,1)))
and score between min and max;
$$

我有各种表,我想设置派生标签的新列。当我运行更新语句时,其中一些有一个版本,另一些有一个包含版本号的向量。

alter table my_table
set derived_label = get_label(score,version,null);

alter table my_table2
set derived_label = get_label(score,null,vector);

我收到以下错误

Unsupported subquery type cannot be evaluated

snowflake-cloud-data-platform user-defined-functions
1个回答
0
投票
alter table my_table2
set derived_label = get_label(score,null,vector);

相同
create or replace my_table2 as
select * exlcude (derived_label),
   get_label(score,null,vector) as derived_label 
form my_table2;

因此,在同意这是一个完整的表重写后,我们可以使用替换形式(您可能需要使用一些其他参数来确保存在连续性权限等)。

所以现在如果创建表作为选择

我们可以参与选择的工作:

select m.* exlcude (derived_label),
   l.lookup as derived_label 
form my_table2 as m
left join lookup as l
    /* the get_label(score,null,vector) version */
    on l.version = coalesce(null, to_number(substr(m.vector,2,1)))
     and m.score between l.min and l.max;
© www.soinside.com 2019 - 2024. All rights reserved.