連線至 SAP Datasphere

BigQuery 管理員可以建立連線,存取 SAP Datasphere 資料。資料分析師可透過這個連線查詢 SAP Datasphere 中的資料

事前準備

  1. 啟用 BigQuery Connection API。

    啟用 API

  2. 建立 SAP Datasphere 資料庫使用者。 請記下 BigQuery 的使用者名稱、密碼、主機名稱和連接埠,以利連線。

  3. 請執行下列任一操作,將 SAP Datasphere 租戶設定為接受來自所選 IP 位址的流量:

    • 將所有 Google IP 位址範圍新增至 SAP Datasphere 的「信任的 IP」許可清單。
    • 0.0.0.0/0 新增至允許清單,開放所有 IP 位址連線至 SAP Datasphere 租戶。
    • 使用網路附件設定連線,讓 BigQuery 從靜態 IP 位址開啟連線。

    如要進一步瞭解如何設定 SAP Datasphere 租戶,請參閱「將 IP 位址新增至 IP 許可清單」。

必要的角色

如要取得連線至 SAP Datasphere 所需的權限,請要求管理員授予您專案的 BigQuery 連線管理員 (roles/bigquery.connectionAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

將 BigQuery 連結至 SAP Datasphere

您可以在 Google Cloud 控制台或 bq 指令列工具中,將 BigQuery 連線至 SAP Datasphere。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在「Explorer」窗格中,按一下 「新增資料」

    「新增資料」對話方塊隨即開啟。

  3. 在「Filter By」(依條件篩選) 窗格的「Data Source Type」(資料來源類型) 區段中,選取「Databases」(資料庫)

    或者,您也可以在「Search for data sources」(搜尋資料來源) 欄位中輸入 SAP HANA

  4. 在「精選資料來源」部分,按一下「SAP HANA」

  5. 按一下「SAP HANA:BigQuery Federation」解決方案資訊卡。

  6. 在「外部資料來源」對話方塊中,執行下列操作:

    • 在「連線類型」部分,選取 SAP HANA
    • 在「Connection ID」(連線 ID) 專區中輸入連線 ID,以識別這個連線。
    • 在「Location type」(位置類型) 中,指定要與 SAP Datasphere 資料合併的 BigQuery 資料集區域。使用這個連線的查詢必須從這個區域執行。
    • 選用:在「Friendly name」(好記名稱) 中輸入使用者容易記得的連線名稱,例如 My connection resource。好記名稱可以是任何資料值,只要您日後需要修改時可以輕鬆識別連線資源即可。
    • 選用:在「Description」(說明) 中輸入這項連線資源的說明。
    • 在「Encryption」(加密) 中,選取 Google-managed encryption key 或「Customer-managed encryption key (CMEK)」(客戶管理的加密金鑰 (CMEK))。您可以選擇是否使用 CMEK。
    • 在「Host:port」部分,輸入 SAP 資料庫執行個體的主機和通訊埠,格式為 HOST:PORT,如 SAP Datasphere 網頁控制台的「Database User Details」所示。
    • 選用:如果是網路連結,請輸入網路連結的路徑,該連結會定義用於建立與 SAP Datasphere 連線的網路設定。
    • 在「Username」(使用者名稱) 中,輸入 SAP Datasphere 網頁版控制台「Database User Details」(資料庫使用者詳細資料) 中的資料庫使用者名稱。例如:MY_SPACE#BIGQUERY
    • 在「Password」(密碼) 中輸入資料庫使用者的密碼。
  7. 點選「建立連線」

bq

輸入 bq mk 指令,並加上下列旗標:

  bq mk \
  --connection \
  --location=LOCATION \
  --project_id=PROJECT_ID \
  --connector_configuration '{
    "connector_id": "saphana",
    "endpoint": {
      "host_port": "HOST_PORT"
    },
    "authentication": {
      "username_password": {
        "username": "USERNAME",
        "password": {
          "plaintext": "PASSWORD"
        }
      }
    },
    "network": {
      "private_service_connect": {
        "network_attachment": "NETWORK_ATTACHMENT"
      }
    }
  }' \
  CONNECTION_ID

更改下列內容:

  • LOCATION:指定要與 SAP Datasphere 資料合併的 BigQuery 資料集區域。使用這個連線的查詢必須從這個區域執行。
  • PROJECT_ID:輸入您的 Google Cloud 專案 ID。
  • HOST_PORT:輸入 SAP 資料庫執行個體的主機和連接埠,格式為 HOST:PORT,如 SAP Datasphere 網頁控制台的「Database User Details」(資料庫使用者詳細資料) 所示
  • NETWORK_ATTACHMENT (選用):以 projects/{project}/regions/{region}/networkAttachments/{networkattachment} 格式輸入網路連結。您可以使用這個欄位設定 SAP Datasphere 連線,讓 BigQuery 從靜態 IP 位址開啟連線。
  • USERNAME:在 SAP Datasphere 網頁控制台的「Database User Details」(資料庫使用者詳細資料) 中,輸入資料庫使用者名稱。例如:MY_SPACE#BIGQUERY
  • PASSWORD:輸入資料庫使用者的密碼。
  • CONNECTION_ID:輸入連線 ID,識別這項連線。

與使用者共用連線

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

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

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

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

選取下列選項之一:

主控台

  1. 前往「BigQuery」頁面

    前往「BigQuery」

    連線會列在專案的「External connections」(外部連線) 群組中。

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

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

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

    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");
    }
  }
}

後續步驟