このドキュメントでは、SAP Business Data Cloud(BDC)が BigQuery データをコピーせずにアクセスできるように Google Cloud を構成する方法について説明します。これを行うには、Lakehouse for Apache Iceberg ランタイム カタログまたは Knowledge Catalog データ プロダクトで Apache Iceberg REST カタログ エンドポイントを設定し、SAP と共有します。
この統合とそのユースケースの概要については、SAP BDC 統合についてをご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake and Dataplex APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake and Dataplex APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.- Cloud Storage バケット: Iceberg のメタデータとデータファイルを保存する Cloud Storage バケットを作成します。手順については、バケットを作成するをご覧ください。構成パイプラインの障害を回避するには、バックエンド バケットを含むすべてのリソースが同じリージョンに存在する必要があります。
- Apache Iceberg REST カタログ: 共有する Namespace とテーブルを含む、認証情報ベンダーが有効になっている Lakehouse ランタイム カタログに Apache Iceberg REST カタログ エンドポイントを設定します。このカタログは、Cloud Storage バケットをウェアハウスとして使用します。手順については、Iceberg REST カタログを設定するをご覧ください。
- Delta Sharing 接続カタログ: SAP BDC 接続用に登録済みの Delta Sharing 接続カタログを準備します。これは、SAP BDC から BigQuery にデータを共有するための初期設定時に作成したカタログと同じです。新しいカタログを作成する必要はありません。手順については、SAP BDC 用のボーダーレス Lakehouse を設定するをご覧ください。
- Workload Identity 連携(WIF): SAP BDC 認証発行者を信頼するように WIF を構成する準備をします。これは次のセクションで設定します。
必要なロール
Workload Identity 連携を構成してデータを公開するために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。
-
Workload Identity 連携を管理する: Identity and Access Management(IAM)Workload Identity プール管理者 (
roles/iam.workloadIdentityPoolAdmin) -
データ プロダクトを公開する: BigLake 管理者 (
roles/biglake.admin) -
カタログのメタデータを表示する(WIF プリンシパルに付与): BigLake 閲覧者 (
roles/biglake.viewer) -
サービス割り当てを使用する(WIF プリンシパルに付与): Service Usage ユーザー (
roles/serviceusage.serviceUsageConsumer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
全般的なワークフロー
SAP BDC にデータを公開する手順は次のとおりです。
- Workload Identity 連携を構成する: Workload Identity 連携プールとプロバイダを作成して、SAP BDC OIDC 発行元との信頼を確立します。
- 連携プリンシパルにロールを付与する: カタログ メタデータの表示とサービス割り当ての使用に対する権限をフェデレーション ID に付与します。
- データを公開する:
gcloudCLI を使用して、Apache Iceberg REST カタログまたは Knowledge Catalog データ プロダクトを SAP BDC に公開します。
Workload Identity 連携を構成する
エクスポートされたサービス アカウント キーを必要とせずに SAP BDC が Lakehouse リソースにアクセスできるようにするには、Workload Identity 連携(WIF)を構成します。これにより、 Google Cloud と SAP BDC OIDC 発行者の間に信頼が確立されます。
WIF プールとプロバイダを設定する手順は次のとおりです。
発行者 URI を取得する
Delta Sharing 接続カタログから OIDC 発行者 URI を取得します。WIF プロバイダを構成するには、この URI が必要です。
gcloud biglake delta-sharing catalogs describe CONNECTION_CATALOG_ID \ --project="PROJECT_ID"
コマンド出力で、発行元 URI を含む federatedIdentityIssuer フィールドを見つけます。
Workload Identity プールを作成する
外部 ID をグループ化する Workload Identity プールを作成します。
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --display-name="POOL_DISPLAY_NAME" \ --project="PROJECT_ID"
OIDC プロバイダを作成する
プール内に OIDC プロバイダを作成して、信頼を定義し、トークン クレームをマッピングします。
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER_URI" \ --attribute-mapping="google.subject=assertion.sub.split('://')[1].split('.')[0]" \ --project="PROJECT_ID"
フェデレーション プリンシパルにロールを付与する
信頼できるプールからフェデレーション ID に、必要な Google API の呼び出しを承認します。特定のサブジェクト UUID またはプール全体を承認できます。
特定のサブジェクトを承認するには(推奨):
gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/biglake.viewer" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/WIF_SUBJECT" gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/serviceusage.serviceUsageConsumer" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/WIF_SUBJECT"
WIF_SUBJECT は、ワークロードに対して SAP 側の発行者が発行した UUID に置き換えます。
プール内のすべての ID を認可する場合(制限が緩く、テスト環境に適しています):
gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/biglake.viewer" \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*" gcloud projects add-iam-policy-binding PROJECT_ID \ --role="roles/serviceusage.serviceUsageConsumer" \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
SAP BDC にデータを公開する
Apache Iceberg REST カタログまたは Iceberg テーブルを含む Knowledge Catalog データ プロダクトを公開するには、 Google Cloud コンソールまたは Google Cloud CLI を使用します。
Iceberg REST カタログ
公開する前に、Iceberg テーブルのメタデータで identifier-field-ids を使用して主キーが定義され、少なくとも 1 つの行があることを確認してください。これは、SAP BDC でクエリに両方が必要になるためです。identifier-field-ids で参照される列は、Iceberg スキーマで required: true(NULL 不可)に設定する必要があります。テーブルに主キーがない場合や、null 可能なキーフィールドが含まれている場合は、主キーの Iceberg テーブル スキーマを更新するを参照して、BigLake REST API を使用して更新してください。
コンソール
Google Cloud コンソールで、[Lakehouse ランタイム カタログ] ページに移動します。
ナビゲーション パネルでプロジェクトを開き、公開に使用する Delta Catalog(接続カタログ)を選択します。
[データ プロダクトを公開] をクリックします。
公開する Iceberg REST カタログの選択など、必要な共有の詳細情報を入力します。
[公開] をクリックします。
gcloud
Apache Iceberg REST カタログ エンドポイントが存在することを確認し、その詳細を取得します。
gcloud biglake iceberg catalogs describe ICEBERG_CATALOG_ID \ --project="PROJECT_ID"
Apache Iceberg REST カタログを SAP BDC に公開します。接続カタログ、Iceberg カタログ、基盤となる Cloud Storage バケットはすべて同じリージョンに存在する必要があります。
gcloud biglake data-product-sharing publish \ --connection-catalog="projects/PROJECT_ID/catalogs/CONNECTION_CATALOG_ID" \ --share="SAP_SHARE_NAME" \ --sap-federated-identity-provider="projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \ --iceberg-catalog="projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID" \ --title="TITLE_TEXT" \ --short-description="SHORT_DESCRIPTION_TEXT" \ --description="DETAILED_DESCRIPTION_TEXT" \ --project="PROJECT_ID"
公開された Apache Iceberg REST カタログは SAP BDC で検出可能で、SAP Datasphere にリモート テーブルとしてインストールできます。
次のように置き換えます。
CONNECTION_CATALOG_ID: SAP BDC から BigQuery へのデータ共有の初期設定時に作成された、登録済みの Delta Sharing 接続カタログ。これは、設定手順で説明した Delta Sharing カタログと同じです。パブリッシュ バック用に別のカタログを作成する必要はありません。PROJECT_NUMBER: Google Cloud プロジェクトの番号。--sap-federated-identity-providerフラグでは、プロジェクト ID ではなくプロジェクト番号を使用する必要があります。POOL_ID: WIF プール ID。PROVIDER_ID: WIF プロバイダ ID。TITLE_TEXTとSHORT_DESCRIPTION_TEXT: SAP BDC のシェアに必要な表示値。DETAILED_DESCRIPTION_TEXT: 詳細な説明(省略可)。SAP で拒否されるため、簡単な説明と詳細な説明に同じテキストを入力しないでください。詳細な説明に短い説明が部分文字列として含まれている場合も、公開オペレーションは拒否されます。たとえば、短い説明がSales Dataの場合、Longer Sales Data detailsの詳細な説明にはSales Dataが含まれているため、拒否されます。ただし、「Longer Sales Information」の詳細な説明は受け付けられます。
Knowledge Catalog データ プロダクト
また、Knowledge Catalog データ プロダクトを公開することもできます。データ プロダクトとは、特定のビジネス上の問題を解決するためにパッケージ化された、データアセット(テーブルやビューなど)のキュレートされた論理的なグループです。カタログ全体を公開する代わりに、特定の Apache Iceberg テーブルを選択してデータ プロダクトにグループ化し、そのキュレートされたコレクションを SAP BDC に公開できます。
コンソール
Google Cloud コンソールで、[Knowledge Catalog] ページに移動します。
ナビゲーション メニューで [データ プロダクト] を選択します。
公開するデータ プロダクトをクリックして、詳細ページを開きます。
[共有] をクリックし、[SAP に公開] を選択します。
[SAP へのデータ プロダクトの公開] ペインで、次のフィールドを構成します。
- 共有名: SAP BDC で共有の名前を入力します。
- Delta catalog: 登録済みの Delta Sharing 接続カタログを選択します。
- Workload Identity: Workload Identity プール プロバイダを選択または入力します。
[公開] をクリックします。
gcloud
データ プロダクトを作成します。
gcloud alpha dataplex data-products create DATA_PRODUCT_ID \ --location="LOCATION" \ --display-name="TITLE_TEXT" \ --description="SHORT_DESCRIPTION_TEXT" \ --owner-emails="OWNER_EMAIL" \ --project="PROJECT_ID"
--display-nameは SAP BDC のtitleにマッピングされ、--descriptionはshort_descriptionにマッピングされます。Lakehouse Iceberg テーブル アセットをデータ プロダクトにリンクします。
gcloud alpha dataplex data-products data-assets create DATA_ASSET_ID \ --data_product="DATA_PRODUCT_ID" \ --location="LOCATION" \ --resource="//biglake.googleapis.com/projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID/namespaces/NAMESPACE_NAME/tables/TABLE_NAME" \ --project="PROJECT_ID"
データ プロダクトでアセットを構成する場合、テーブル アセットには、Iceberg テーブル メタデータで
identifier-field-idsを使用して定義された主キー(すべての識別子列がrequired: trueとしてマークされている)と、少なくとも 1 つの行が必要です。テーブルに主キーがない場合や、Null 許容キーフィールドが含まれている場合は、主キーの Iceberg テーブル スキーマを更新するを参照して、BigLake REST API を使用して更新してください。単一のデータ プロダクト内のすべてのデータアセットは、同じ Apache Iceberg REST カタログに属している必要があります。データ プロダクトには最大 50 個のテーブルを含めることができます。公開するには、少なくとも 1 つの有効なデータアセットを含める必要があります。Iceberg テーブルは Google Cloud コンソールにすぐに表示されないことがあります。省略可: データ プロダクトのアセットを確認します。
gcloud alpha dataplex data-products data-assets list \ --data_product="DATA_PRODUCT_ID" \ --location="LOCATION" \ --project="PROJECT_ID"
データ プロダクトを SAP BDC に公開します。接続カタログ、データ プロダクト、基盤となるリソースが同じリージョンにあることを確認します。
gcloud biglake data-product-sharing publish \ --connection-catalog="projects/PROJECT_ID/catalogs/CONNECTION_CATALOG_ID" \ --share="SAP_SHARE_NAME" \ --sap-federated-identity-provider="projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \ --data-product="projects/PROJECT_ID/locations/LOCATION/dataProducts/DATA_PRODUCT_ID" \ --project="PROJECT_ID"
公開されたデータ プロダクトは SAP BDC で検出可能で、SAP Datasphere にリモート テーブルとしてインストールできます。SAP BDC では、公開されたデータ プロダクトは、Knowledge Catalog データ プロダクトの作成時に設定されたタイトルと簡単な説明を継承します。
次のように置き換えます。
CONNECTION_CATALOG_ID: SAP BDC から BigQuery へのデータ共有の初期設定時に作成された、登録済みの Delta Sharing 接続カタログ。これは、設定手順で説明した Delta Sharing カタログと同じです。パブリッシュ バック用に別のカタログを作成する必要はありません。PROJECT_NUMBER: Google Cloudプロジェクトの番号。sap-federated-identity-providerでは、プロジェクト ID ではなくプロジェクト番号を使用する必要があります。POOL_ID: WIF プール ID。PROVIDER_ID: WIF プロバイダ ID。DATA_PRODUCT_ID: Knowledge Catalog データ プロダクトの ID。LOCATION: Knowledge Catalog データ プロダクトのロケーション。SAP_SHARE_NAME: SAP BDC の共有の名前。
SAP BDC の Google Cloud データにアクセスする
データを SAP BDC に公開すると、SAP 環境で Google Cloud データにネイティブにアクセスできます。SAP でデータ プロダクトをリモート テーブルとしてインストールして使用する方法については、SAP ドキュメントのデータ プロダクトのインストールをご覧ください。
次のステップ
- SAP BDC のボーダレス Lakehouse のトラブルシューティング。
- SAP ドキュメントのデータ プロダクトのインストール。