首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dbt和Meltano,如何防止多个dbt作业运行冲突?

使用dbt和Meltano,如何防止多个dbt作业运行冲突?
EN

Stack Overflow用户
提问于 2021-12-16 17:20:42
回答 1查看 753关注 0票数 6

在Meltano中运行dbt作业时,如果没有触发的上下文,dbt run作业可能会发生冲突--例如,按需作业与计划作业或基于CI的作业发生冲突。

如果dbt run同时在相同的表上操作,这通常会导致崩溃,如果在单个目标表上执行两次相同的插入,则有时会导致数据质量问题。

是否可以使用Meltano功能或本机dbt功能来防止运行冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-16 18:17:57

一种方法是在目标数据库中生成一个锁。下面是MSSQL的一个示例。

我选择了一个快速启动:钩子。此钩子试图获取dbt的锁,该锁将持续到DB会话期间。

dbt_project.yml

代码语言:javascript
复制
on-run-start: 
  - "{{ application_lock() }}" #Be sure only one dbt project runs at a time

宏:application_lock.sql

代码语言:javascript
复制
{% macro application_lock() %}
    
DECLARE 
    @result int,
    @msg varchar(max);

EXEC @result = sp_getapplock @resource = 'dbt', @lockMode = 'Exclusive', @locktimeout = '1200000', @lockowner = 'Session';
IF @result not in (0, 1)
    BEGIN
    SET @msg = 'Result from sp_getapplock:'+ CAST(@result as varchar(max))+'. Lock could not be taken after waiting 20 minutes. Another DBT process probably has the applock, try again later.';
    THROW 51000, @msg, 1
    END

{% endmacro %}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70383118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档