【问题标题】:How to use multiple transactions in Snowflake Task?如何在雪花任务中使用多个事务?
【发布时间】:2021-12-09 18:08:41
【问题描述】:

我在表上创建的流上运行了两个 ETL 作业。我需要在相同的流数据上运行这两个数据,并且我阅读了它以便这样做,DML 语句(在我的情况下是合并语句)需要包装在事务中并在最后提交。不过,我似乎无法在任务中做到这一点。我想我在某个地方弄乱了分号。这是我尝试过的

create or replace task my_task as
begin;
  merge into my_table1 t using my_stream s on t.id=s.id when matched insert values (id, col1);

  merge into my_table2 t using my_stream s on t.id=s.id when matched insert values (id, col2);
commit;

这只是一个例子,合并语句做了更复杂的事情。

如果我使用分号,脚本只会运行到begin,如果我不使用分号,则脚本会运行到 EOF 错误,即使脚本后面有多个分号(因此它会尝试读取过去commit)

【问题讨论】:

  • 嗨 - 如果您阅读了文档,它清楚地指出任务可以运行单个 SQL 语句或存储过程

标签: sql snowflake-cloud-data-platform


【解决方案1】:

任务可以调用包含事务中不同语句的存储过程:

create procedure ...
    as
    $$
        ...
        statement1;

        BEGIN TRANSACTION;
        statement2;
        COMMIT;

        statement3;
        ...

    $$;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多