You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Airflow的执行日期传递给DBT Cloud脚本?

问题描述

我正在通过Airflow执行DBT Cloud转换任务,当前任务调用代码如下:

trigger_job = DbtCloudRunJobOperator(
    task_id="trigger_dbt_cloud_job",
    dbt_cloud_conn_id=DBT_CLOUD_CONN_ID,
    job_id=JOB_ID,
    check_interval=600,
    timeout=3600,
)

希望了解如何将Airflow的执行日期传递至DBT脚本,恳请提供示例代码。

解决方案

要把Airflow的执行日期传递给DBT脚本,你可以通过DbtCloudRunJobOperator的additional_run_config参数传递自定义变量,具体分两步操作:

1. 修改Airflow任务代码,传递执行日期

借助Airflow的模板变量,把执行日期打包进additional_run_config传给DBT Cloud:

from airflow.providers.dbt.cloud.operators.dbt import DbtCloudRunJobOperator

DBT_CLOUD_CONN_ID = "your_dbt_cloud_conn_id"
JOB_ID = 12345  # 替换成你的DBT Cloud Job ID

trigger_job = DbtCloudRunJobOperator(
    task_id="trigger_dbt_cloud_job",
    dbt_cloud_conn_id=DBT_CLOUD_CONN_ID,
    job_id=JOB_ID,
    check_interval=600,
    timeout=3600,
    # 把Airflow执行日期作为DBT变量传递
    additional_run_config={
        "variables": {
            "airflow_execution_date": "{{ ds }}",  # 格式是YYYY-MM-DD
            # 也可以用无横杠的格式:{{ ds_nodash }} → YYYYMMDD
            # 或者完整的带时分秒的时间:{{ execution_date.isoformat() }}
        }
    },
    # 开启模板渲染,确保Airflow能解析变量
    template_fields=["additional_run_config"],
)

2. 在DBT脚本里接收并使用变量

在你的DBT模型SQL文件中,用var()函数获取这个变量,直接用于逻辑处理:

-- 示例:models/your_model.sql
SELECT
    id,
    user_name,
    order_time
FROM
    raw.orders
WHERE
    -- 筛选执行日期当天的数据
    order_time >= '{{ var("airflow_execution_date") }}'::DATE
    AND order_time < '{{ var("airflow_execution_date") }}'::DATE + INTERVAL '1 day'

注意事项

  • 如果你需要传递其他格式的时间,直接替换模板变量即可,比如{{ execution_date }}会返回完整的datetime对象字符串。
  • DBT Cloud默认允许接收自定义变量,不需要额外配置Job权限。

内容的提问来源于stack exchange,提问作者user3138594

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:24:59