使用Snowflake Stream执行Merge语句时报错:'布尔值无法识别'问题排查
问题分析与修复方案
嘿,我一眼就揪出问题所在了!你的MERGE语句里的UPDATE子句写法有误,这才导致了那个看似奇怪的布尔值错误。
错误根源
在UPDATE的SET子句中,多个字段的赋值操作必须用**逗号(,)**分隔,而你误用了AND来连接。你当前的写法:
SET T.EMPNAME = S.EMPNAME AND T.EMPADD = S.EMPADD AND T.EMPSALARY = S.EMPSALARY
会被Snowflake错误解析成一个布尔逻辑判断——系统会认为你在验证这三个等式是否同时成立,结果是一个布尔值(TRUE/FALSE),但SET子句需要的是列赋值操作,而非布尔表达式,这就直接触发了'Boolean value is not recognized'的报错。
修正后的完整MERGE语句
把UPDATE部分的AND全部替换成逗号即可解决问题,下面是修正后的完整代码:
MERGE INTO "EMP_TEST_MAIN" AS T USING ( select * from ST_EMP_TEST where NOT (METADATA$ACTION ='DELETE' AND METADATA$ISUPDATE = TRUE) ) AS S ON T.EMPID = S.EMPID WHEN MATCHED AND S.METADATA$ACTION = 'INSERT' AND S.METADATA$ISUPDATE THEN UPDATE SET T.EMPNAME = S.EMPNAME, T.EMPADD = S.EMPADD, T.EMPSALARY = S.EMPSALARY WHEN MATCHED AND S.METADATA$ACTION = 'DELETE' THEN DELETE WHEN NOT MATCHED AND S.METADATA$ACTION = 'INSERT' THEN INSERT (T.EMPID, T.EMPNAME, T.EMPADD, T.EMPSALARY) VALUES (S.EMPID, S.EMPNAME, S.EMPADD, S.EMPSALARY);
额外验证提示
执行修正后的语句后,你可以查询EMP_TEST_MAIN表确认数据是否正确同步,也可以通过SELECT * FROM ST_EMP_TEST;查看流的处理状态,确保没有残留未处理的变更记录。
内容的提问来源于stack exchange,提问作者MKS_AWS
相关产品推荐
相关产品推荐

