クロスクラウドの Lakehouse を使用する

Lakehouse for Apache Iceberg は、クロスクラウド Lakehouse 構成を介してリモートデータのクエリをサポートしています。構成が完了すると、BigQuery の標準 SQL、Apache Spark のオープンソース バージョン、Managed Service for Apache Spark を使用してデータアクセスできます。分析クエリに加えて、連携データを使用して AI 主導の分析情報とガバナンスを実現できます。

  • 会話型分析: クロスクラウド テーブルなど、正確なデータソースに基づいた専門エージェントを構築して、単一の会話からクラウド間でデータを分析します。
  • Dataplex Catalog: 連携データソースで Knowledge Catalog 機能を使用して、データ プロファイリングと分析情報を取得します。

より詳細な分析情報を得るために、プロジェクト、データセット、テーブルから、ビュー、グラフ、ユーザー定義関数まで、データソースに基づいた専門エージェントを作成できます。データが 1 か所に保存されることはほとんどないため、会話型分析機能は BigQuery Standard テーブルだけでなく、Lakehouse で管理される Apache Iceberg テーブルや、Databricks Unity、AWS Glue、SAP、Salesforce などのクロスクラウド Lakehouse ソースにも対応しています。これにより、データサイロを解消し、単一の会話からクラウド間でデータを分析できます。

このページでは、クロスクラウド Lakehouse を設定した後、リモートデータをクエリする方法について説明します。

始める前に

データをクエリする前に、次の操作を完了する必要があります。

  1. AWS GlueDatabricks Unity Catalog、または Snowflake のクロスクラウド Lakehouse を設定します。
  2. リモート カタログにデータがあることを確認します。

必要なロール

連携データをクエリするために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

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

データのクエリ

フェデレーションを設定したら、BigQuery の標準 SQL または Managed Service for Apache Spark の Apache Spark を使用してリモートデータをクエリできます。

Lakehouse はメタデータの変換と安全なデータ アクセスを処理するため、リモートの Apache Iceberg テーブルをローカル 環境にあるかのように扱うことができます。 Google Cloud

BigQuery からクエリする

連携された Apache Iceberg テーブルをクエリするには、標準の BigQuery SQL を使用します。テーブルパスは 4 つの部分で構成されます: project.federated_catalog.namespace.table。キャッシュ、認証情報の提供、CCI 転送ルーティングは自動的に処理されます。

SELECT
  user_id,
  action,
  COUNT(*) as total_actions
FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME`
WHERE event_date >= '2026-04-01'
GROUP BY 1, 2;

次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • FEDERATED_CATALOG_NAME: 連携カタログの名前。
  • NAMESPACE_NAME: カタログ内の Namespace。
  • TABLE_NAME: テーブルの名前。
  • REGION: の Google Cloud リージョン。例: us-east4

bq コマンドライン ツールを使用してクエリを実行することもできます。

bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \
  "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"

Managed Service for Apache Spark からクエリする

PySpark バッチ ワークロードを Managed Service for Apache Spark に、 認証情報の提供を有効にして、 X-Iceberg-Access-Delegation=vended-credentialsを使用して送信します。Spark は、有効期間の短いスコープ付きの提供された認証情報を使用して S3 に安全に接続します。AWS 認証情報や S3 コネクタを個別に管理する必要はありません。

  1. Managed Service for Apache Spark のアウトバウンド接続を有効にします。

    Managed Service for Apache Spark は、デフォルトの ネットワーク構成では AWS S3 に接続できません。Cloud Router と Cloud NAT をプロビジョニングする必要があります。

    gcloud compute routers create lakehouse-router \
      --network=NETWORK_NAME \
      --region=REGION
    
    gcloud compute routers nats create lakehouse-nat \
      --router=lakehouse-router \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region=REGION

    次のように置き換えます。

    • NETWORK_NAME: Managed Service for Apache Spark バッチ ワークロードのネットワーク(例: default)。
    • REGION: Managed Service for Apache Spark バッチ ワークロードのリージョン。
  2. PySpark アプリケーション ファイルを作成し、PySpark ジョブを実行します。

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate()
    
    df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.show(10, truncate=False)

    これを PYSPARK_FILE の Cloud Storage にアップロードします。

    gcloud dataproc batches submit pyspark PYSPARK_FILE \
        --project=PROJECT_ID \
        --region=REGION \
        --version=RUNTIME_VERSION \
        --properties="\
        spark.sql.defaultCatalog=CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
        spark.sql.catalog.CATALOG_NAME.type=rest,\
        spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
        spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\
        spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
        spark.sql.catalog.CATALOG_NAME.io-impl=IO_IMPL,\
        spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
        spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\
        spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

    次のように置き換えます。

    • NAMESPACE_NAME: 連携カタログの Namespace。
    • TABLE_NAME: 連携カタログ内のテーブルの名前。
    • CATALOG_NAME: ローカル Spark カタログの名前(例: my_catalog)。
    • PYSPARK_FILE: PySpark アプリケーション ファイルへの gs:// Cloud Storage パス。
    • REGION: Managed Service for Apache Spark バッチ ワークロードのリージョン。
    • RUNTIME_VERSION: Managed Service for Apache Spark ランタイム バージョン(例: 2.3)。
    • PROJECT_ID: Apache Iceberg REST カタログ エンドポイントの使用に対して課金されるプロジェクト。
    • FEDERATED_CATALOG_NAME: 連携カタログの名前。
    • IO_IMPL: 基盤となるストレージに一致する FileIO 実装。

    Spark 構成パラメータ

    次の表に、すべての接続に必要な一般的なパラメータを示します。

    パラメータ 説明
    spark.sql.defaultCatalog デフォルトのカタログ名。
    spark.sql.catalog.CATALOG_NAME org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.CATALOG_NAME.type rest
    spark.sql.catalog.CATALOG_NAME.uri https://biglake.googleapis.com/iceberg/v1/restcatalog
    spark.sql.catalog.CATALOG_NAME.warehouse bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME
    spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project PROJECT_ID
    spark.sql.catalog.CATALOG_NAME.rest.auth.type org.apache.iceberg.gcp.auth.GoogleAuthManager
    spark.sql.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

    次の表に、ストレージ プロバイダ(<var>IO_IMPL</var>)に基づく一意のパラメータを示します。

    ストレージ spark.sql.catalog.CATALOG_NAME.io-impl メモ
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO 有効になっている場合は X-Iceberg-Access-Delegation=vended-credentials が必要です。
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO

    Snowflake では、STRING 列が自動的にストレージ最適化されるため、クエリを実行する際に問題が発生する可能性があります。この問題を解決する方法は 2 つあります。

    • オプション 1: Spark でベクトル化を無効にする: 次の Spark 構成プロパティを --properties フラグに追加します。
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • オプション 2: Snowflake でシリアル化ポリシーを変更する: Snowflake のテーブルのストレージ シリアル化ポリシーを COMPATIBLE に変更します。

次のステップ