更改跟踪表的Snowflake Snowsql MERGE语句-如果与目标/源不匹配,则不允许 [英] Snowflake snowsql merge statement for change tracking table - when not matched by target/source not allowed

查看:24
本文介绍了更改跟踪表的Snowflake Snowsql MERGE语句-如果与目标/源不匹配,则不允许的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写查询逻辑以从源捕获所有更改。

合并应该比较源和目标中的键,并相应地处理数据。下面是一个示例,我们如何在SQL Server中实现这一点。

MERGE <target_table> [AS TARGET]
USING <table_source> [AS SOURCE]
ON <search_condition>
[WHEN MATCHED 
   THEN <merge_matched> ]
[WHEN NOT MATCHED [BY TARGET]
   THEN <merge_not_matched> ]
[WHEN NOT MATCHED BY SOURCE
   THEN <merge_matched> ];
在Snowflake中,我在尝试类似操作时遇到了错误, 错误SQL编译错误:位置17处的语法错误行7意外为‘BY’。位置17处的语法错误行%8意外为"By"。

雪花中有没有办法处理"当与目标不匹配时"和"当与源不匹配时"逻辑?

谢谢您。

推荐答案

队友建议的解决方法:

  • 根据完全联接定义MATCHED_BY_SOURCE,并查看a.ol或b.col值是否为空:
merge into TARGET t
using (
    select <COLUMN_LIST>,
    iff(a.COL is null, 'NOT_MATCHED_BY_SOURCE', 'MATCHED_BY_SOURCE') SOURCE_MATCH,
    iff(b.COL is null, 'NOT_MATCHED_BY_TARGET', 'MATCHED_BY_TARGET') TARGET_MATCH
    from SOURCE a
    full join TARGET b
    on a.COL = b.COL
) s
on s.COL = t.COL
when matched and s.SOURCE_MATCH = 'NOT_MATCHED_BY_SOURCE' then
<DO_SOMETHING>
when matched and s.TARGET_MATCH = 'NOT_MATCHED_BY_TARGET' then
<DO_SOMETHING_ELSE>
;

这篇关于更改跟踪表的Snowflake Snowsql MERGE语句-如果与目标/源不匹配,则不允许的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆