SAP Datasphere に接続する

BigQuery 管理者は、接続を作成して SAP Datasphere データにアクセスできます。この接続により、データ アナリストは SAP Datasphere のデータにクエリを実行できるようになります。

始める前に

  1. BigQuery Connection API を有効にします。

    API の有効化

  2. SAP Datasphere データベース ユーザーを作成します。BigQuery が接続するユーザー名、パスワード、ホスト名、ポートをメモします。

  3. 選択した IP アドレスからのトラフィックを受け入れるように SAP Datasphere テナントを構成するには、次のいずれかを行います。

    SAP Datasphere テナントの構成の詳細については、IP 許可リストに IP アドレスを追加するをご覧ください。

必要なロール

SAP Datasphere への接続に必要な権限を取得するには、プロジェクトに対する BigQuery 接続管理者 roles/bigquery.connectionAdmin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

BigQuery を SAP Datasphere に接続する

BigQuery を SAP Datasphere に接続するには、Google Cloud コンソールまたは bq コマンドライン ツールを使用します。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] パネルで、[追加] [追加] をクリックします。

  3. 検索フィールドで [外部データソースへの接続] を検索して選択します。

  4. [外部データソース] ダイアログで、次の操作を行います。

    • [接続タイプ] で SAP HANA を選択します。
    • [接続 ID] に、この接続を識別する接続 ID を入力します。
    • [ロケーション タイプ] で、SAP Datasphere のデータと結合する BigQuery データセットのリージョンを指定します。この接続を使用するクエリは、このリージョンから実行する必要があります。
    • (省略可)[わかりやすい名前] に、わかりやすい接続名を入力します(例: My connection resource)。後で修正が必要になった場合、わかりやすい名前だと接続リソースを簡単に識別できます。
    • (省略可)[説明] に、この接続リソースの説明を入力します。
    • [暗号化] で、[Google が管理する暗号鍵] または [顧客管理の暗号鍵(CMEK)] を選択します。CMEK の使用は任意です。
    • Host:port: SAP Datasphere ウェブ コンソールの [Database User Details] に示すように、SAP データベース インスタンスのホストとポートを HOST:PORT 形式で入力します。
    • 省略可: [ネットワーク アタッチメント] に、SAP Datasphere への接続を確立するために使用されるネットワーク構成を定義するネットワーク アタッチメントのパスを入力します。
    • [ユーザー名] に、SAP Datasphere ウェブ コンソールの [データベース ユーザーの詳細] にあるデータベース ユーザー名を入力します。例: MY_SPACE#BIGQUERY
    • [Password] に、データベース ユーザーのパスワードを入力します。
  5. [接続を作成] をクリックします。

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 Datasphere ウェブ コンソールの [データベース ユーザーの詳細] に示すように、SAP データベース インスタンスのホストとポートを HOST:PORT 形式で入力します。
  • NETWORK_ATTACHMENT(省略可): ネットワーク アタッチメントprojects/{project}/regions/{region}/networkAttachments/{networkattachment} の形式で入力します。このフィールドを使用すると、BigQuery が静的 IP アドレスから接続を開くように SAP Datasphere 接続を構成できます。
  • USERNAME: SAP Datasphere ウェブ コンソールの [Database User Details] からデータベースのユーザー名を入力します。例: MY_SPACE#BIGQUERY
  • PASSWORD: データベース ユーザーのパスワードを入力します。
  • CONNECTION_ID: この接続を識別する接続 ID を入力します。

ユーザーと接続を共有する

次のロールを付与することで、ユーザーがデータをクエリして接続を管理できます。

  • roles/bigquery.connectionUser: ユーザーが接続を使用して外部データソースに接続し、それらに対してクエリを実行できるようにします。

  • roles/bigquery.connectionAdmin: ユーザーが接続を管理できるようにします。

BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。

次のオプションのいずれかを選択します。

コンソール

  1. BigQuery ページに移動します。

    BigQuery に移動

    接続は、プロジェクトの外部接続というグループに一覧表示されます。

  2. [エクスプローラ] ペインで、[プロジェクト名] > [外部接続] > [接続] の順にクリックします。

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

次のステップ