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