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

如何从Airflow(Cloud Composer)向GCP Dataform传递变量?

GCP Dataform 实现参数化SQL(适配多国家/城市场景)

基本实现方式

Dataform通过变量(Variables)结合JS模板语法,实现和Airflow类似的参数化能力,不管是SQLX脚本还是数据源配置都能适配多场景需求。

1. 定义变量(默认或外部传入)

可以在项目根目录的dataform.json里设置默认变量,也能在运行时从外部(比如Airflow)传参覆盖:

  • 示例dataform.json默认配置:
{
  "defaultSchema": "your_default_schema",
  "variables": {
    "country": "us",
    "city": "nyc"
  }
}
  • Airflow调用时动态传参:用DataformOperator的variables参数指定,比如variables={"country": "uk", "city": "london"},即可覆盖默认变量值。

2. SQLX脚本中使用变量

把Airflow的{{params.variable}}替换成Dataform的${var("变量名")}语法即可:

config {
  type: "view"
}

SELECT id, name 
FROM `${var("country")}_dataset.abc123_${var("city")}_table`

3. 数据源(source)配置中使用变量

在source定义里同样支持${var()}语法,两种写法可选:
写法一:直接在SQL语句中引用

config {
  type: "source"
}

SELECT * 
FROM `${var("country")}_dataset.abc123_${var("city")}_table`

写法二:在source的字段中拼接变量

source {
  name: `${var("country")}_dataset.abc123_${var("city")}_table`,
  schema: `${var("country")}_dataset`
}

4. 批量生成多实例任务(可选)

如果需要一次性生成所有国家/城市的对应任务,用JS循环自动生成即可:
在definitions目录下创建generate_tables.js文件:

const countries = ["us", "uk", "fr"];
const cities = ["nyc", "london", "paris"];

countries.forEach(country => {
  cities.forEach(city => {
    publish(`${country}_${city}_view`)
      .type("view")
      .query(ctx => `
        SELECT id, name 
        FROM ${country}_dataset.abc123_${city}_table
      `);
  });
});

执行后会自动生成每个国家+城市组合的视图任务,无需手动编写多个SQLX文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:45:30