5

建立关于如何在不复制我们的 repo 的情况下在气流中运行 DBT 的问题,我目前正在运行气流并通过 git 同步 dag。我正在考虑在我的工作流程中包含 DBT 的不同选项。louis_guitton的一项建议是将 DBT 项目 Docker 化,并通过Docker Operator在 Airflow 中运行它。

我之前没有在 Airflow 或 DBT 中使用 Docker Operator 的经验。我想知道是否有人尝试过或可以提供一些关于他们结合该工作流程的经验的见解,我的主要问题是:

  1. DBT 作为一个整体项目应该作为一个 Docker 容器运行,还是分解?(例如:测试是否作为独立于 dbt 任务的容器运行?)
  2. 通过 Docker Operator 运行时,来自 DBT 的日志和 UI 是否可访问和/或仍然有用?
  3. 部分管道将如何运行?(例如:只想运行管道的一部分)
4

1 回答 1

7

从您的问题来看,您将受益于尝试独立于气流独立 dockerise dbt。你的很多问题都会消失。但无论如何,这是我的答案。

  1. DBT 作为一个整体项目应该作为一个 Docker 容器运行,还是分解?(例如:测试是否作为独立于 dbt 任务的容器运行?)

我建议你为整个项目构建一个 docker 镜像。docker 镜像可以基于 python 镜像,因为 dbt 是一个 python CLI 工具。然后,您可以使用 docker 映像的 CMD 参数来运行您将在 docker 之外运行的任何 dbt 命令。请记住docker run(与 dbt 无关)的语法:您可以指定任何您想在调用时运行的 COMMAND

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

此外,“docker dbt”在 Google 上的第一次点击是可以帮助您入门的dockerfile

  1. 通过 Docker Operator 运行时,来自 DBT 的日志和 UI 是否可访问和/或仍然有用?

同样,这不是 dbt 问题,而是 docker 问题或气流问题。

使用 DockerOperator 时,您能在气流 UI 中看到日志吗?是的,请参阅如何使用屏幕截图发布博客文章

您可以从 docker 容器访问日志吗?是的,Docker 容器将日志发送到stdoutstderr输出流(您可以在气流中看到,因为气流会拾取它)。但日志也存储在主机上某个文件夹中的 JSON 文件中/var/lib/docker/containers/。如果您有任何高级需求,您可以使用工具(或简单的 BashOperator 或 PythonOperator)获取这些日志,然后使用它执行您需要的操作。

  1. 部分管道将如何运行?(例如:只想运行管道的一部分)

请参阅答案 1,您将使用以下命令运行 docker dbt 映像

$ docker run my-dbt-image dbt run -m stg_customers
于 2020-12-27T11:10:16.780 回答