创建和设置 Cloud 资源连接
作为 BigQuery 管理员,您可以创建 Cloud 资源连接,以便数据分析师能够执行以下任务:
- 使用 BigLake 表查询结构化 Cloud Storage 数据。BigLake 表允许您使用访问权限委派查询外部数据。
- 使用对象表查询 Cloud Storage 中的非结构化数据。
- 在 Cloud Run functions 或 Cloud Run 中使用任何支持的语言实现远程函数。
如需详细了解连接,请参阅连接简介。
准备工作
启用 BigQuery Connection API。
-
如需获得创建 Cloud Resource 连接所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
针对项目的 BigQuery Connection Admin (
roles/bigquery.connectionAdmin
) -
针对存储桶的 Storage Object Viewer (
roles/storage.objectViewer
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如果您想要使用基于 Cloud Storage 的 BigLake 表或对象表查询非结构化数据,则与连接关联的服务账号还必须在包含外部数据的存储桶上具有 Storage Viewer (roles/storage.viewer
) 角色。
-
针对项目的 BigQuery Connection Admin (
- 确保您的 Google Cloud SDK 为 366.0.0 版或更高版本:
gcloud version
如有需要,请更新 Google Cloud SDK。
- 可选:对于 Terraform,请使用 Terraform GCP 4.25.0 版或更高版本。您可以从 HashiCorp Terraform 下载页面下载最新版本。
位置注意事项
如果您使用 Cloud Storage 存储数据文件,我们建议您使用 Cloud Storage 单区域或双区域存储桶(而非多区域存储桶),以实现最佳性能。
创建 Cloud 资源连接
BigLake 使用连接资源访问 Cloud Storage。您可以将此连接用于单个表或一组表。
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
如需创建连接,请点击
添加,然后点击与外部数据源的连接。在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入连接的名称。
点击创建连接。
点击转到连接。
在连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。
bq
在命令行环境中,创建连接:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
参数会替换默认项目。替换以下内容:
REGION
:您的连接区域PROJECT_ID
:您的 Google Cloud 项目 IDCONNECTION_ID
:您的连接的 ID
当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。
问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
检索并复制服务账号 ID 以在后续步骤中使用:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
输出类似于以下内容:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
将以下部分附加到 main.tf
文件中。
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }
CONNECTION_ID
:您的连接的 IDPROJECT_ID
:您的 Google Cloud 项目 IDREGION
:您的连接区域
向服务账号授予访问权限
如果要创建远程函数,您必须向 Cloud Run functions 或 Cloud Run 授予所需的角色。
如果您想连接到 Cloud Storage,则必须向新的连接授予对 Cloud Storage 的只读权限,以便 BigQuery 能够代表用户访问文件。
从下列选项中选择一项:
控制台
我们建议您向连接资源服务账号授予 Storage Object Viewer IAM 角色 (roles/storage.objectViewer
),该角色允许服务账号访问 Cloud Storage 存储桶。
前往 IAM 和管理页面。
点击
Add。系统随即会打开添加主账号对话框。
在新的主账号字段中,输入您之前复制的服务账号 ID。
在选择角色字段中,选择 Cloud Storage,然后选择 Storage Object Viewer。
点击保存。
gcloud
使用 gcloud storage buckets add-iam-policy-binding
命令:
gcloud storage buckets add-iam-policy-binding gs://example-bucket \ --member=serviceAccount:MEMBER \ --role=roles/storage.objectViewer
将 MEMBER
替换为您之前复制的服务账号 ID。
如需了解详情,请参阅将主账号添加到存储桶级层的政策中。
Terraform
将以下部分附加到 main.tf
文件。
## This grants permissions to the service account of the connection created in the last step. resource "google_project_iam_member" "connectionPermissionGrant" { project = "PROJECT_ID" role = "roles/storage.objectViewer" member = format("serviceAccount:%s", google_bigquery_connection.connection.cloud_resource[0].service_account_id) }
与用户共享连接
您可以授予以下角色,以使用户可以查询数据并管理连接:
roles/bigquery.connectionUser
:允许用户使用连接与外部数据源建立连接,并对其运行查询。roles/bigquery.connectionAdmin
:允许用户管理连接。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
连接列在项目的外部连接组中。
在探索器窗格中,点击您的项目名称 > 外部连接 > 连接。
在详细信息窗格中,点击共享以共享连接。之后,执行以下操作:
在连接权限对话框中,通过添加或修改主账号与其他主账号共享连接。
点击保存。
bq
您不能使用 bq 命令行工具共享连接。如需共享连接,请使用 Google Cloud 控制台或 BigQuery Connections API 方法共享连接。
API
使用 BigQuery Connections REST API 参考文档部分中的 projects.locations.connections.setIAM
方法,并提供一个 policy
资源实例。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
后续步骤
- 了解不同的连接类型。
- 了解如何管理连接。
- 了解 BigLake 表。
- 了解如何创建 BigLake 表。
- 了解如何将外部表升级到 BigLake 表。
- 了解对象表以及如何创建这些表。
- 了解如何实现远程函数。