連線至 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 所需的權限,請要求管理員授予您下列 IAM 角色:

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

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

設定網路連結

由於聯合查詢會使用 BigQuery Connection API 直接連線至資料庫,因此您必須允許從 Google Cloud 到資料庫引擎的流量。為提高安全性,您應只允許來自 BigQuery 查詢的流量。您可以透過下列兩種方式限制流量:

  • 定義 BigQuery 連線使用的靜態 IP 位址,並將其新增至外部資料來源的防火牆規則。
  • 在 BigQuery 和內部基礎架構之間建立 VPN,並用於查詢。

使用網路附件即可支援這兩種技術。

限制

使用網路附件的連線有下列限制:

  • 如果是標準區域,網路連結必須與連線位於相同區域。如為 US 多區域的連線,網路連結必須位於 us-central1 區域。如為「EU」多區域的連線,網路連結必須位於「europe-west4」區域。
  • 網路連結建立後即無法編輯。如要變更設定,請重新建立網路連結。
  • 除非 BigQuery 刪除已分配的資源,否則無法刪除網路附件。如要啟動刪除程序,請與 BigQuery 支援團隊聯絡。

建立網路連結

建立查詢聯邦的連線時,您可以指定選用的網路附件,提供資料庫網路的連線能力。您可以定義靜態 IP 位址或建立 VPN,藉此建立網路連結。無論選擇哪種做法,請按照下列步驟操作:

  1. 如果沒有,請建立虛擬私有雲網路和子網路。

  2. 視所選路徑方法而定,請執行下列其中一項操作:

  3. 使用您建立的網路、區域和子網路建立網路連結。

  4. 選用:視貴機構的安全性政策而定,您可能需要設定 Google Cloud 防火牆,以建立防火牆規則來允許輸出,並使用下列設定:

    • 將「目標」設為「網路中的所有執行個體」。
    • 將「Destination IPv4 ranges」(目的地 IPv4 範圍) 設為整個 IP 位址範圍。
    • 將「指定的通訊協定和通訊埠」設為資料庫使用的通訊埠。
  5. 設定內部防火牆,允許從您建立的靜態 IP 位址輸入。這項程序會因資料來源而異。

將 BigQuery 連結至 SAP Datasphere

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

控制台

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

    前往「BigQuery」

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

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

  3. 在「依條件篩選」窗格的「資料來源類型」部分,選取「資料庫」。

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

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

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

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

    • 在「連線類型」部分,選取 SAP HANA。
    • 在「連線 ID」部分,輸入連線 ID 來識別這個連線。
    • 在「Location type」(位置類型) 中,指定要與 SAP Datasphere 資料合併的 BigQuery 資料集區域。使用這個連線的查詢必須從這個區域執行。
    • 選用:在「好記名稱」輸入使用者容易記得的連線名稱,例如 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」(資料庫使用者詳細資料) 所示。
    • 選用:在「Network attachment」(網路連結) 部分,輸入網路連結的路徑,定義用於建立與 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 資料庫執行個體的主機和通訊埠,如 SAP Datasphere 網頁控制台的「Database User Details」(資料庫使用者詳細資料) 所示,格式為 HOST:PORT。
  • 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,識別這個連線。

選用旗標:

  • --kms_key_name:客戶自行管理的加密金鑰。如果省略此值,系統會使用預設的 Google-owned and Google-managed encryption key保護憑證。

注意:如果設定連線時使用網路附件,您必須先執行初始聯合查詢,將專案與網路附件同步處理,才能完全啟用網路附件。

與使用者分享連線

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

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

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

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

選取下列選項之一:

控制台

  1. 前往「BigQuery」頁面。

    前往「BigQuery」

    連線會列在專案中,並歸類在「連線」群組。

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 按一下專案,然後依序點選「連線」和所需連線。

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

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

定價

後續步驟