管理連線

本文件說明如何查看、列出、分享、編輯、刪除 BigQuery 連線,以及排解相關問題。

身為 BigQuery 管理員,您可以建立及管理用於連線至服務和外部資料來源的連線。BigQuery 分析師可透過這些連結,針對外部資料來源提交查詢,不必將資料移至 BigQuery 或複製資料。您可以建立下列類型的連線:

如要為專案建立預設連線,請參閱預設連線總覽

事前準備

必要的角色

如要取得管理連線所需的權限,請管理員授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

如要瞭解建立及使用預設連線所需的角色,請參閱「必要角色和權限」。

這些預先定義的角色包含執行本文件中工作所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

  • 查看連線詳細資料:bigquery.connections.get
  • 列出所有連線:bigquery.connections.list
  • 編輯及刪除連線:bigquery.connections.update
  • 分享連線:bigquery.connections.setIamPolicy

列出所有連線

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

    連線會列在專案中,位於名為「External connections」的群組中。

  2. 在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」,即可查看所有連線的清單。

bq

輸入 bq ls 指令並指定 --connection 旗標。您可以視需要指定 --project_id--location 標記,藉此識別要列出的連線專案和位置。

bq ls --connection --project_id=PROJECT_ID --location=REGION

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • REGION連線區域

API

請參閱 REST API 參考資料章節,使用 projects.locations.connections.list 方法

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.cloud.bigquery.connection.v1.ListConnectionsRequest;
import com.google.cloud.bigquery.connection.v1.LocationName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to get list of connections
public class ListConnections {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    listConnections(projectId, location);
  }

  static void listConnections(String projectId, String location) throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      LocationName parent = LocationName.of(projectId, location);
      int pageSize = 10;
      ListConnectionsRequest request =
          ListConnectionsRequest.newBuilder()
              .setParent(parent.toString())
              .setPageSize(pageSize)
              .build();
      client
          .listConnections(request)
          .iterateAll()
          .forEach(con -> System.out.println("Connection Id :" + con.getName()));
    }
  }
}

查看連線詳細資料

建立連線後,您可以取得連線設定的相關資訊。這些設定包括您在建立移轉時提供的值。

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

    連線會列在專案中,位於名為「External connections」的群組中。

  2. 在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」>「連線」

bq

輸入 bq show 指令並指定 --connection 旗標。您可以選擇使用專案 ID 和連線區域來限定連線 ID。

bq show --connection PROJECT_ID.REGION.CONNECTION_ID

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • REGION連線區域
  • CONNECTION_I:連線 ID

API

請參閱 REST API 參考資料章節,使用 projects.locations.connections.get 方法

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.cloud.bigquery.connection.v1.Connection;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.GetConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to get connection
public class GetConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    getConnection(projectId, location, connectionId);
  }

  static void getConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionId);
      GetConnectionRequest request =
          GetConnectionRequest.newBuilder().setName(name.toString()).build();
      Connection response = client.getConnection(request);
      System.out.println("Connection info retrieved successfully :" + response.getName());
    }
  }
}

與使用者分享連線

您可以授予下列角色,讓使用者查詢資料及管理連線:

  • roles/bigquery.connectionUser:可讓使用者使用連線連結外部資料來源,並對這些資料來源執行查詢。

  • roles/bigquery.connectionAdmin:讓使用者管理連線。

如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「預先定義的角色與權限」一文。

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

    連線會列在專案中,位於名為「External connections」的群組中。

  2. 在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」>「連線」

  3. 在「Details」窗格中,按一下「Share」,即可分享連線。接著,按照下列步驟操作:

    1. 在「Connection permissions」對話方塊中,新增或編輯主體,與其他主體共用連線。

    2. 按一下 [儲存]

bq

您無法透過 bq 指令列工具共用連線。如要分享連線,請使用 Google Cloud 主控台或 BigQuery Connections API 方法。

API

請使用 BigQuery Connections REST API 參考資料部分的 projects.locations.connections.setIAM 方法,並提供 policy 資源的例項。

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

編輯連線

連線會使用建立連線的使用者憑證。如果您需要變更連線所附的使用者,可以更新使用者的憑證。當建立連線的使用者已不在您的機構時,這個方法十分實用。

您無法編輯連線的下列元素:

  • 連線類型
  • 連線 ID
  • 位置

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

    連線會列在專案中,位於名為「External connections」的群組中。

  2. 在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」>「連線」

  3. 如要編輯詳細資料,請在「詳細資料」窗格中按一下 「編輯詳細資料」。接著,按照下列步驟操作:

    1. 在「Edit connection」對話方塊中,編輯連線詳細資料,包括使用者憑證。

    2. 按一下「更新連線」

bq

輸入 bq update 指令並提供連線標記 --connection。必須提供完整的 connection_id

  bq update --connection --connection_type='CLOUD_SQL'
      --properties='{"instanceId" : "INSTANCE",
      "database" : "DATABASE", "type" : "MYSQL" }'
      --connection_credential='{"username":"USERNAME", "password":"PASSWORD"}'
      PROJECT.REGION.CONNECTION_ID
 

更改下列內容:

  • INSTANCE:Cloud SQL 執行個體
  • DATABASE:資料庫名稱
  • USERNAME:Cloud SQL 資料庫的使用者名稱
  • PASSWORD:Cloud SQL 資料庫的密碼
  • PROJECT: Google Cloud 專案 ID
  • REGION連線區域
  • CONNECTION_ID:連線 ID

舉例來說,下列指令會更新 ID 為 federation-test 且連線 ID 為 test-mysql 的專案中的連線。

bq update --connection --connection_type='CLOUD_SQL'
    --properties='{"instanceId" : "federation-test:us-central1:new-mysql",
    "database" : "imdb2", "type" : "MYSQL" }'
    --connection_credential='{"username":"my_username",
    "password":"my_password"}' federation-test.us.test-mysql

API

請參閱 REST API 參考資料中的 projects.locations.connections.patch 方法,並提供 connection 的例項。

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.cloud.bigquery.connection.v1.Connection;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.UpdateConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update connection
public class UpdateConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    String description = "MY_DESCRIPTION";
    Connection connection = Connection.newBuilder().setDescription(description).build();
    updateConnection(projectId, location, connectionId, connection);
  }

  static void updateConnection(
      String projectId, String location, String connectionId, Connection connection)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionId);
      FieldMask updateMask = FieldMaskUtil.fromString("description");
      UpdateConnectionRequest request =
          UpdateConnectionRequest.newBuilder()
              .setName(name.toString())
              .setConnection(connection)
              .setUpdateMask(updateMask)
              .build();
      Connection response = client.updateConnection(request);
      System.out.println("Connection updated successfully :" + response.getDescription());
    }
  }
}

刪除連線

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

    連線會列在專案中,位於名為「External connections」的群組中。

  2. 在「Explorer」窗格中,依序點選「專案名稱」>「外部連線」>「連線」

  3. 在「Details」窗格中,按一下 「Delete」,即可刪除連結。

  4. 在「Delete connection?」對話方塊中輸入 delete,確認刪除。

  5. 點選「刪除」。

bq

輸入 bq rm 指令並提供連線旗標 --connection。您必須提供完整的 connection_id

bq rm --connection PROJECT_ID.REGION.CONNECTION_ID

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • REGION連線區域
  • CONNECTION_ID:連線 ID

API

請參閱 REST API 參考資料章節中的 projects.locations.connections.delete 方法

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.DeleteConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to delete a connection
public class DeleteConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionName = "MY_CONNECTION_NAME";
    deleteConnection(projectId, location, connectionName);
  }

  static void deleteConnection(String projectId, String location, String connectionName)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionName);
      DeleteConnectionRequest request =
          DeleteConnectionRequest.newBuilder().setName(name.toString()).build();
      client.deleteConnection(request);
      System.out.println("Connection deleted successfully");
    }
  }
}

後續步驟