如何让dbt运行时出现日志错误FileNotFound,以触发不为0的退出代码?

时间:2020-08-24 17:35:12

标签: dbt

我们正在运行dbt版本0.16.1。我们已经设置了可以在Airflow中运行的数据管道,并建立了一个库来映射在其自身在Airflow上的bash运算符中运行的每个dbt模型。

执行的dbt运行命令如下:

cd /usr/local/airflow/models/[PACKAGE_NAME] && dbt --log-format json run --models [MODEL_NAME]--no-version-check --profiles-dir=/usr/local/airflow/dags/dags-enterprise-model/enterprise_model/include --target=[TARGET] --profile=[PROFILE]

有时(可能同时运行两个模型时),Airflow会在dbt run命令中显示以下消息:

信息-FileNotFoundError:[错误2]没有这样的文件或目录:'logs / dbt.log'->'logs / dbt.log.1'

这是有问题的,因为日志文件没有更新,但是任务的退出代码列为0:

命令退出,返回码为0

这将导致Airflow将任务标记为成功;但是,日志未成功打印。

我的问题:

  1. 有没有办法将这些错误作为实际错误提出?
  2. 失败了,有没有办法指定唯一的日志文件?

我不确定这是我的理解上的空白,还是dbt记录中的错误,或者两者都是?

1 个答案:

答案 0 :(得分:2)

这听起来肯定是由于同时将dbt写入同一文件而多次调用的结果。这不是dbt错误,因为我们不打算同时调用dbt。单个调用可以通过线程处理并发模型运行。日志冲突是将dbt模型DAG重新实现为Airflow DAG的一种风险。

这两个都是公平的问题:

  1. 从历史上看,dbt仅使用两个日志级别:debuginfo。请参阅有关相关问题的评论:dbt#2680。我完全赞赏Airflow和其他编排工具以不同的日志级别显示时具有明确定义的通知行为。社区成员实际上 just 打开了PR,以添加错误级别的日志记录(dbt#2723)。

  2. 可以使用log-pathdocs)中的dbt_project.yml配置为dbt调用设置自定义日志路径