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

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

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

始める前に

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

  1. AWS Glue または Databricks Unity Catalog 用のクロスクラウド レイクハウスを設定します。
  2. リモート カタログにデータがあることを確認します。

必要なロール

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

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

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

データのクエリ

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

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

BigQuery からクエリする

フェデレーション Apache Iceberg テーブルをクエリするには、標準の BigQuery SQL を使用します。テーブルパスは project.federated_catalog.namespace.table という 4 つの部分で構成されています。キャッシュ、認証情報の提供、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: カタログ内の名前空間。
  • 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 からクエリする

Managed Service for Apache Spark クラスタからクロスクラウド レイクハウス データを直接読み取ることができます。この場合、個別の AWS 認証情報 や S3 コネクタを管理する必要はありません。Spark は、BigQuery Storage Read API を使用するのではなく、標準の Apache Iceberg REST カタログ インターフェースを使用してレイクハウスに直接接続します。

レイクハウス REST エンドポイントを使用して Managed Service for Apache Spark ジョブを構成すると、レイクハウスは X-Iceberg-Access-Delegation=vended-credentials を介して、スコープ設定された一時的な S3 認証情報を Spark に自動的に提供します。これにより、Spark はカタログの構成に準拠しながら、基盤となるデータを安全に読み取ることができます。

レイクハウス REST エンドポイントを使用して Managed Service for Apache Spark ジョブを構成するには:

  1. Spark ジョブを構成します。

    このコマンドでは、Spark ジョブを送信するときに Apache Iceberg REST カタログのプロパティを渡します。これにより、フェデレーション レイクハウス カタログがローカルの Spark カタログ名(my_catalog など)にマッピングされます。

    gcloud dataproc jobs submit pyspark PYSPARK_SCRIPT_PATH \
      --cluster="CLUSTER_NAME" \
      --region="REGION" \
      --properties="spark.sql.catalog.SPARK_CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.SPARK_CATALOG_NAME.type=rest,\
    spark.sql.catalog.SPARK_CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.SPARK_CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\
    spark.sql.catalog.SPARK_CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\
    spark.sql.catalog.SPARK_CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.SPARK_CATALOG_NAME.rest-metrics-reporting-enabled=false,\
    spark.sql.catalog.SPARK_CATALOG_NAME.header.x-goog-user-project=PROJECT_ID"
  2. PySpark でデータをクエリします。

    このコマンドは、Spark を使用してレイクハウス カタログから直接読み取り、標準の変換を実行します。

    df = spark.table("SPARK_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.filter(df.action == "purchase").show()

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

    • PYSPARK_SCRIPT_PATH: PySpark ジョブのパス。
    • CLUSTER_NAME: Managed Service for Apache Spark クラスタの名前。
    • REGION: の Google Cloud リージョン。例: us-east4
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • SPARK_CATALOG_NAME: Spark カタログに使用する名前。
    • FEDERATED_CATALOG_NAME: フェデレーション カタログの名前。
    • NAMESPACE_NAME: カタログ内の名前空間。
    • TABLE_NAME: テーブルの名前。

次のステップ