1

我们正在运行dbt版本 0.16.1。我们已经将数据管道设置为在 Airflow 中运行,并设置了一个库来映射每个dbt模型在 Airflow 上它自己的 bash 运算符中运行。

执行的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:[Errno 2] 没有这样的文件或目录:'logs/dbt.log' -> 'logs/dbt.log.1'

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

命令以返回码 0 退出

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

我的问题:

  1. 有没有办法将这些错误作为实际错误提出?
  2. 如果做不到这一点,有没有办法指定一个唯一的日志文件?

我不确定这是否是我理解的差距,dbt是日志记录中的错误,还是两者兼而有之?

4

1 回答 1

3

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

这些都是公平的问题:

  1. 历史上,dbt 只使用两个日志级别:debuginfo. 请参阅有关相关问题的评论:dbt#2680。我非常欣赏 Airflow 和其他编排工具在呈现不同日志级别时具有明确定义的通知行为。一位社区成员实际上只是打开了一个 PR 来添加错误级别的日志记录 ( dbt#2723 )。

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

于 2020-08-24T19:30:20.430 回答