【问题标题】:How to run DBT in airflow without copying our repo如何在不复制我们的 repo 的情况下在气流中运行 DBT
【发布时间】:2021-03-01 13:09:02
【问题描述】:

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

是否可以触发我们的dbt rundbt test 而无需将我们的 DBT 目录移动到我们的 Airflow 目录中?有了airflow-dbt package,对于default_args中的dir,或许可以在这里指向DBT项目的gibhub链接?

【问题讨论】:

  • 当你使用(ed)airflow-dbt 包时,你如何管理服务帐户密钥?你在 GCS 存储桶中保存了吗?

标签: airflow dbt


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我的建议是将您的 dbt 和气流代码库分开。 确实有更好的办法:

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

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

    【讨论】:

    • 我非常赞同这一点。我认为这已经成为自托管 dbt 调度的事实上的社区标准。
    • 这很棒,知道必须有比组合代码库更好的方法。我一定会使用这种方法。
    • 很棒的方法,我会试试这个。
    • 您好@louis_guitton,关于您使用 Docker Operator 的实施,我有更多问题要问您。如果您想分享有关您使用该方法的经验的更多见解,我已将其作为一个单独的问题包含在此处 (stackoverflow.com/questions/65464756/…) =)
    • 嘿,还有 1 个问题,您如何管理服务帐户?你保持形象吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2020-02-09
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2020-01-05
      相关资源
      最近更新 更多