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

Lakehouse for Apache Iceberg は、クロスクラウド レイクハウス構成によるリモートデータのクエリをサポートしています。構成が完了すると、システムは BigQuery の標準 SQL または Managed Service for Apache Spark の Apache Spark を使用したデータアクセスをサポートします。

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

始める前に

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

  1. AWS Glue または Databricks Unity Catalog 用のクロスクラウド 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 からのクエリ

X-Iceberg-Access-Delegation=vended-credentials を使用して、認証情報ベンダーが有効になっている Managed Service for Apache Spark に PySpark バッチ ワークロードを送信します。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=org.apache.iceberg.aws.s3.S3FileIO,\
        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: 連携カタログの名前。

次のステップ