避免在 case 语句中评估雪花序列无法达到的条件

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

当按照逻辑从表 SOURCE 添加新数据到 TARGET 时,我尝试分配一个

id

  • 如果更新数据,则使用 TARGET 表中的现有
    id
  • 如果是新数据,则使用雪花序列生成新的
    id

代码如下:

select case when ep.id is not null then ep.id else sequence.nextval
...
from SOURCE p left join TARGET ep  on p.otherKey = ep.otherKey;

我的问题是,序列总是被评估,这意味着 id 之间的差距会很大,因为有很多更新,但只有很少的新记录。

问题:如何更改此

id
创建,使其仍使用相同的序列,但避免每次都调用该序列?

还没有尝试过任何事情,因为我不知道在这种情况下会发生什么。

sql snowflake-cloud-data-platform sequence
1个回答
0
投票

一种方法是在调用

sequence.nextval
:

之前拆分数据
select ep.id
...
from SOURCE p 
INNER join TARGET ep  
  on p.otherKey = ep.otherKey
UNION ALL
select  sequence.nextval
...
from SOURCE p 
left join TARGET ep  
  on p.otherKey = ep.otherKey
where ep.OtherKey IS NULL;
© www.soinside.com 2019 - 2024. All rights reserved.