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 を設定した後、リモートデータをクエリする方法について説明します。
始める前に
データをクエリする前に、次の操作を完了する必要があります。
- AWS Glue、Databricks Unity Catalog、または Snowflake のクロスクラウド 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 からクエリする
PySpark バッチ ワークロードを Managed Service for Apache Spark に、
認証情報の提供を有効にして、
X-Iceberg-Access-Delegation=vended-credentialsを使用して送信します。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=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_NAMEorg.apache.iceberg.spark.SparkCatalogspark.sql.catalog.CATALOG_NAME.typerestspark.sql.catalog.CATALOG_NAME.urihttps://biglake.googleapis.com/iceberg/v1/restcatalogspark.sql.catalog.CATALOG_NAME.warehousebl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAMEspark.sql.catalog.CATALOG_NAME.header.x-goog-user-projectPROJECT_IDspark.sql.catalog.CATALOG_NAME.rest.auth.typeorg.apache.iceberg.gcp.auth.GoogleAuthManagerspark.sql.extensionsorg.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.GCSFileIOAzure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIOSnowflake では、
STRING列が自動的にストレージ最適化されるため、クエリを実行する際に問題が発生する可能性があります。この問題を解決する方法は 2 つあります。- オプション 1: Spark でベクトル化を無効にする: 次の Spark 構成プロパティを
--propertiesフラグに追加します。 spark.sql.iceberg.vectorization.enabled=falsespark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=falseオプション 2: Snowflake でシリアル化ポリシーを変更する: Snowflake のテーブルのストレージ シリアル化ポリシーを
COMPATIBLEに変更します。