更改跟踪表的Snowflake Snowsql MERGE语句-如果与目标/源不匹配,则不允许 [英] Snowflake snowsql merge statement for change tracking table - when not matched by target/source not allowed
本文介绍了更改跟踪表的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屋!
查看全文