如何从 Composer Airflow 获取针对 BigQuery 运行的 SQL 中的 GCP 项目名称

问题描述

我想编写一个由 Composer/Airflow(python BigQueryOperator 指的是 sql 文件)执行的查询

SELECT col1,col2,... FROM `{{ GCP_PROJECT }}.dataset.table` ...

我希望在 sql 中对 GCP 项目进行参数化,以便我可以在生产/开发 (prod/dev) 环境中部署相同的 sql 文件并在开发中进行测试,而无需尝试查询开发环境没有的生产表访问。

这是已经设置好的吗?

在这一点上,除了 Composer guide 之外,我在 GCP_PROJECT is already reserved 中找不到任何有用的示例,我不确定如何将环境变量传递给模板......谢谢。

>

解决方法

我自己还没有测试过,但我认为这样的方法应该可行:

import os
dag = DAG(...)

def print_env_var():
    print(os.environ["GCP_PROJECT"])

print_context = PythonOperator(
    task_id="gcp_project",python_callable=print_env_var,dag=dag,)

根据 Google 文档,不建议使用保留的环境变量 (https://cloud.google.com/composer/docs/how-to/managing/environment-variables#reserved_names):

Cloud Composer 将这些保留名称用于内部变量 过程使用。不要在您的工作流程中引用保留名称。 变量值可能会更改,恕不另行通知。

我认为处理临时/生产环境的更好方法是在 Airflow 本身中设置变量并在 dag 中读取它们。这是一个很好的资源,其中详细介绍了 Airflow 变量。