使用流进行雪花合并

时间:2021-04-29 15:34:01

标签: snowflake-cloud-data-platform

合并语句抛出:

<块引用>

“无法识别布尔值”

我正在从流中读取所有 varchar 值并写入主表。我在源表或目标表中没有任何布尔值。无法找出我收到的原因:“无法识别布尔值”错误。”

create table "EMP_TEST"  (EMPID integer, EMPNAME VARCHAR(500), EMPADD VARCHAR(500), EMPSALARY INTEGER);
create table "EMP_TEST_MAIN"  (EMPID integer, EMPNAME VARCHAR(500), EMPADD VARCHAR(500), EMPSALARY INTEGER);

create or replace stream ST_EMP_TEST on table "EMP_TEST";

insert into "EMP_TEST" 
select 1, 'AAA','PLACE 1', 100 UNION
select 2, 'BBB','PLACE 2', 200 UNION
select 3, 'CCC','PLACE 3', 300;

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 AND T.EMPADD = S.EMPADD AND 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);

1 个答案:

答案 0 :(得分:1)

UPDATE 部分的列用 AND 分隔:

WHEN MATCHED AND S.METADATA$ACTION = 'INSERT' AND S.METADATA$ISUPDATE 
  THEN  UPDATE SET T.EMPNAME = S.EMPNAME 
        AND T.EMPADD = S.EMPADD 
        AND T.EMPSALARY = S.EMPSALARY 
        -- AND is incorrect in this context

应该是,

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