如何在不复制我们的 repo 的情况下 运行 airflow 中的 DBT

How to run DBT in airflow without copying our repo

我们将 DBT 与 GCP 和 BigQuery 一起用于 BigQuery 中的转换,而安排我们每天 run dbt 的最简单方法似乎是 Airflow 中的 BashOperator。目前我们有两个单独的目录/github 项目,一个用于 DBT,另一个用于 Airflow。要使用 Airflow 将 DBT 安排到 运行,我们的整个 DBT 项目似乎需要嵌套在我们的 Airflow 项目中,这样我们就可以为我们的 dbt run bash 命令指向它?

是否可以在不将 DBT 目录移动到 Airflow 目录的情况下触发我们的 dbt rundbt test?使用 airflow-dbt package,对于 default_args 中的 dir,也许可以在此处指向 DBT 项目的 gibhub link?

我的建议是将 dbt 和 airflow 代码库分开。 确实有更好的方法:

  1. docker在一个简单的基于 python 的图像中创建您的 dbt 项目,您可以在其中复制代码库
  2. 将其推送到 DockerHub 或 ECR 或您正在使用的任何其他 docker 存储库
  3. 使用你的气流 DAG 中的 DockerOperator 到 运行 带有你的 dbt 代码的 docker 图像

我假设您在这里使用气流 LocalExecutor,并且您希望在气流为 运行ning 的服务器上执行 dbt run 工作负载。如果不是这种情况并且您可以访问 Kubernetes 集群,我建议改为使用 KubernetesPodOperator.

通过投票和支持评论接受了基于共识的其他答案,但是我想 post 我目前正在使用的第二个解决方案:

  • dbtairflow 存储库/目录彼此相邻。
  • 在 airflow 的 docker-compose.yml 中,我们将 DBT 目录添加为一个卷,以便 airflow 可以访问它。
  • 在我们的气流 Dockerfile 中,安装 DBT 并复制我们的 dbt 代码。
  • 使用 BashOperatorrun dbttest dbt

由于您在 GCP 上,另一个完全无服务器的选项是 运行 dbt 使用云构建而不是气流。如果您想要更多的编排,您还可以向其中添加工作流。如果你想要详细的描述,有一个 post 描述它。 https://robertsahlin.com/serverless-dbt-on-google-cloud-platform/