snowflake中不同表合并方法的sql性能

iyfjxgzm  于 2021-08-13  发布在  Java
关注(0)|答案(0)|浏览(342)

表a有id、状态;

  1. id status name
  2. 1 cancel test

表b有id、status、metric1、metric2

  1. id status metric1 metric2
  2. 1 home 1 6
  3. 2 home 5 8
  4. 3 home 7 3

我想形成一个表c,每当有
a内部连接a.id=b.id和a.status='cancel',
然后表c将具有从a到b的内部联接结果,在本例中,表b中的id 1与a匹配,我想在c中输出b的行,但状态更改为“cancel”,并插入另一条记录以更新metric1、metric2。表c中的最终结果是:

  1. id status metric1 metric2
  2. 1 cancel 1 6
  3. 1 cancel 0 0

我当前的查询:

  1. select a.id, a.status, b.metric1, b.metric2
  2. from a on a.id = b.id
  3. and a.status='cancel'
  4. union all
  5. select a.id, a.status, 0, 0
  6. from a on a.id = b.id
  7. and a.status='cancel'

我试图找出是否有更好的方法,或者甚至在b上使用merge来代替创建表c。

  1. merge into b
  2. using a on a.id = b.id
  3. when matched then update
  4. set b.status = a.status
  5. when matched then insert
  6. (b.id, a.status, 0, 0)

哪种方法性能更好?还有其他建议吗?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题