在 How to run DBT in airflow without copying our repo 上建立我的问题,我目前正在运行 Airflow 并通过 git 同步 dag。我正在考虑在我的工作流程中包含 DBT 的不同选项。来自 louis_guitton 的一项建议是将 DBT 项目 Dockerize,并通过 Docker Operator 在 Airflow 中运行它.
我之前没有在 Airflow 或一般 DBT 中使用 Docker Operator 的经验。我想知道是否有人尝试过或可以提供一些有关他们结合该工作流程的经验的见解,我的主要问题是:
最佳答案
从您的问题来看,您将受益于尝试独立于 Airflow 独立于 dockerise dbt。你的很多问题都会消失。但无论如何,这是我的答案。
Should DBT as a whole project be run as one Docker container, or is it broken down? (for example: are tests ran as a separate container from dbt tasks?)
我建议你为整个项目构建一个 docker 镜像。 docker 镜像可以基于 python 镜像,因为 dbt 是一个 python CLI 工具。然后,您可以使用 docker 镜像的 CMD 参数来运行您将在 docker 之外运行的任何 dbt 命令。
请记住
docker run
的语法(与 dbt 无关):您可以指定在调用时要运行的任何命令$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
此外,“docker dbt”在 Google 上的第一个点击是 this dockerfile这可以让你开始Are logs and the UI from DBT accessible and/or still useful when run via the Docker Operator?
同样,这不是 dbt 问题,而是 docker 问题或 Airflow 问题。
使用 DockerOperator 时,您能在 Airflow UI 中看到日志吗?是的,see this how to blog post with screenshots .
您可以从 docker 容器访问日志吗?是的,Docker 容器将日志发送到
stdout
和 stderr
输出流(您可以在 Airflow 中看到,因为 Airflow 会拾取它)。但是日志也存储在主机上的 JSON 文件中的文件夹 /var/lib/docker/containers/
中。 .如果您有任何高级需求,您可以使用工具(或简单的 BashOperator 或 PythonOperator)获取这些日志,然后用它做您需要的事情。How would partial pipelines be run? (example: wanting to run only a part of the pipeline)
请参阅答案 1,您将使用以下命令运行 docker dbt 镜像
$ docker run my-dbt-image dbt run -m stg_customers
关于docker - 通过 Docker Operator 在 Airflow 中运行 DBT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65464756/