Lakehouse for Apache Iceberg は、クロスクラウド レイクハウス構成によるリモートデータのクエリをサポートしています。構成が完了すると、システムは BigQuery の標準 SQL または Managed Service for Apache Spark の Apache Spark を使用したデータアクセスをサポートします。
このページでは、クロスクラウド Lakehouse を設定した後にリモートデータをクエリする方法について説明します。
始める前に
データをクエリする前に、次の操作を完了する必要があります。
- AWS Glue または Databricks Unity Catalog 用のクロスクラウド Lakehouse を設定します。
- リモート カタログにデータがあることを確認します。
必要なロール
フェデレーション データのクエリに必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
BigQuery でデータをクエリする: BigQuery データ閲覧者 (
roles/bigquery.dataViewer) -
BigQuery ジョブを実行する: BigQuery ジョブユーザー (
roles/bigquery.jobUser) -
Lakehouse カタログでテーブルのメタデータを検出して読み取る: BigLake 閲覧者 (
roles/biglake.viewer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
データのクエリ
フェデレーションを設定すると、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 コネクタを管理する必要はありません。
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 バッチ ワークロードのリージョン。
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: 連携カタログの名前。