雪花-将查询的一部分存储在变量或UDF中

时间:2020-03-27 14:03:58

标签: sql snowflake-cloud-data-platform

假设我有一个很大的where子句,需要在多视图中使用它。因此,我认为可以将整个代码保存在变量,UDF函数或Somewhere中,而不是在多个位置编写where子句。完成后,我要做的就是在视图上调用那个Variable / UDF。基本上减少了样板代码。

例如

Where
'_ALL' in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
or
COLNAME in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
)

这只是我在此处添加的1个条件,我必须在10个这样的列上写类似的条件。我需要在20个不同的地方使用同一段代码。

所以我正在查看的输出是:

where $variable
     or 
where UDF()

如何使它看起来不太复杂?

1 个答案:

答案 0 :(得分:0)

您不能以这种方式使用UDF。如果所有视图都引用相同的基表,可能会起作用的是使用初始where子句从视图创建这些视图。像这样:

create or replace view base_view as 
select * from base_table
Where
'_ALL' in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
or
COLNAME in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
)

然后,您可以在此基本视图之上创建视图:

create or replace view new_view
as
select * from base_view where ....