将 Airflow(版本 1.10.5)与 Bigquery 连接

Posted

技术标签:

【中文标题】将 Airflow(版本 1.10.5)与 Bigquery 连接【英文标题】:Connecting Airflow (version 1.10.5) with Bigquery 【发布时间】:2021-01-19 00:04:20 【问题描述】:

我有一个大查询实例,我想连接到 Airflow。为此,我添加了以下连接变量:


"conn_id": "bigquery_default",
"conn_type": "gcp",
"extra": 
  "extra__google_cloud_platform__key_path" : "/path-to-credentials.json",
  "extra__google_cloud_platform__scope" : "https://www.googleapis.com/auth/bigquery",
  "extra__google_cloud_platform__project" : "project-name-here"

这在尝试使用 GCS 到 BQ 运算符时给我一个错误:

HttpError 400 when requesting https://bigquery.googleapis.com/bigquery/v2/projects/project-name-here/jobs?alt=json returned "Required parameter is missing".

如果我将范围从 https://www.googleapis.com/auth/bigquery 更改为 https://www.googleapis.com/auth/bigquery.insertdata,我会收到以下错误:

HttpError 403 when requesting https://bigquery.googleapis.com/bigquery/v2/projects/project_name_here/datasets/DATASET_NAME_HERE/tables/TABLE_NAME_HERE?alt=json returned "Request had insufficient authentication scopes."

当我在 bigquery 范围之外添加 https://www.googleapis.com/auth/cloud-platform 范围时,我不再收到“缺少必需参数”错误,而是收到令牌错误。

我怀疑某些东西与我为气流中的大查询连接条目创建的服务帐户不一致。关于范围不足的早期错误告诉我可能存在权限问题?但是为什么它一直说“缺少参数”?为什么我需要添加多个范围?我在 GCP 方面的经验有限,但是当我创建服务帐户时,它没有提到为服务帐户分配“范围”。

托管 GCS 存储桶的 GCP 实例的凭据和连接变量是正确的,因为我已经能够将数据从外部源成功写入 GCS 存储桶。

【问题讨论】:

【参考方案1】:

事实证明,问题在于运算符中的一个字段是空的。字段delete_sql 设置为空白;即delete_sql=''。我以为这就足够了,但事实证明这还不够。所以我只输入了SELECT 1

【讨论】:

以上是关于将 Airflow(版本 1.10.5)与 Bigquery 连接的主要内容,如果未能解决你的问题,请参考以下文章

调度系统Airflow1.10.4调研与介绍和docker安装

Airflow 2.2.3 + MySQL 8.0.27 + Redis 6.2 部署Airflow任务调度平台

大数据调度平台Airflow:Airflow单机搭建

将 BigQuery 的聚合具体化转储到 SQL 服务器、Dataflow 与 Airflow

pip安装airflow时依赖报版本不对的解决

pip安装airflow时依赖报版本不对的解决