【问题标题】:stream with Merge statement带有 Merge 语句的流
【发布时间】:2021-08-04 18:41:24
【问题描述】:

嗨,下面是我执行与流合并的步骤 雪花 1.创建表 创建或替换表employees(employee_id number, 工资号码, manager_id 号码); 2. 创建流。 在表 employees 上创建或替换流 employees_stream; 3.创建消费者表。 创建或替换表employees_consumer(employee_id number, 工资号,manager_id 号); 4. 我在员工表中插入了一些记录。 插入员工价值观(8,40000,4), (12,50000,9), (3,30000,5), (4,10000,5), (25,35000,9); 5.尝试执行以下命令时出现错误。 合并到 EMPLOYEES_CONSUMER 作为使用(SELECT * FROM EMPLOYEES_STREAM WHERE NOT (METADATA$ACTION= 'DELETE' AND METADATA$ISUPDATE=TRUE)) A.EMPLOYEE_ID=B.EMPLOYEE_ID 上的 B 何时 匹配和 b.METADATA$ACTION='INSERT' 和 b.METADATA$ISUPDATE 然后更新集 A.EMPLOYEE_ID =B.EMPLOYEE_ID, A.SALARY=B.SALARY, A.MANAGER_ID=B.MANAGER_ID 匹配时 b.METADATA$ACTION= 'DELETE' 然后删除时不匹配和 b. METADATA$ACTION='插入'然后插入 (EMPLOYEE_ID,SALARY,MANAGER_ID) 值 (B.EMPLOYEE_ID,B.SALARY,B.MANAGER_ID);错误为:“SQL编译 错误:第 15 行语法错误,第 8 位意外'INTO'。”请 帮助。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    这里的语法有一点错误。 使用 MERGE 您不必使用 INTONOT MATCHED 子句上插入。

    所以您的 MERGE 查询应该如下所示:

    MERGE INTO EMPLOYEES_CONSUMER AS A 
    USING (
      SELECT * 
      FROM employees_stream 
      WHERE NOT (METADATA$ACTION= 'DELETE' AND METADATA$ISUPDATE=TRUE)
    ) AS B 
    ON A.EMPLOYEE_ID=B.EMPLOYEE_ID 
    
    WHEN MATCHED AND b.METADATA$ACTION= 'INSERT' AND b.METADATA$ISUPDATE THEN UPDATE 
    SET A.EMPLOYEE_ID =B.EMPLOYEE_ID, 
        A.SALARY=B.SALARY, 
        A.MANAGER_ID=B.MANAGER_ID 
    
    WHEN MATCHED AND b.METADATA$ACTION= 'DELETE' THEN DELETE 
    
    WHEN NOT MATCHED AND b. METADATA$ACTION= 'INSERT' THEN INSERT (EMPLOYEE_ID,SALARY,MANAGER_ID) VALUES (B.EMPLOYEE_ID,B.SALARY,B.MANAGER_ID)
    ;
    

    【讨论】:

    • 谢谢它现在正在工作
    • @user16595206 如果对您有帮助,您可以单击复选标记将答案标记为已接受
    猜你喜欢
    • 2022-01-12
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多