ボーダーレス Lakehouse を使用する

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 を設定した後、リモートデータをクエリする方法について説明します。

始める前に

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

  1. AWS GlueDatabricks Unity Catalog、または Snowflake 用のボーダーレスな Lakehouse を設定します。
  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: カタログ内の 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-credentialsSpark は、有効期間の短いスコープ付きの提供された認証情報を使用して 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=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 デフォルトのカタログ名(例: CATALOG_NAME)。
    spark.sql.catalog.CATALOG_NAME カタログ実装クラス。org.apache.iceberg.spark.SparkCatalog に設定します。
    spark.sql.catalog.CATALOG_NAME.type カタログ バックエンドのタイプ。Iceberg REST カタログの場合は rest に設定します。
    spark.sql.catalog.CATALOG_NAME.uri REST カタログ エンドポイントの 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 課金と割り当てに使用される Google Cloud プロジェクト ID。PROJECT_ID に設定します。
    spark.sql.extensions Iceberg SQL 構文と機能の Spark セッション拡張機能。org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions に設定します。

    次の表に、認証パラメータを示します。

    パラメータ 説明
    spark.sql.catalog.CATALOG_NAME.rest.auth.type カスタム認証マネージャー クラス。OAuth フロー認証の場合は org.apache.iceberg.gcp.auth.GoogleAuthManager に設定します。
    spark.sql.catalog.CATALOG_NAME.oauth2-server-uri OAuth2 トークン サーバー エンドポイント URI。個人用アクセス トークン(PAT)認証の場合は https://oauth2.googleapis.com/token に設定します。
    spark.sql.catalog.CATALOG_NAME.token Bearer トークンまたは個人用アクセス トークン(PAT)。通常、PAT 認証の場合は $(gcloud auth application-default print-access-token) に設定します。

    次の表に、ストレージ プロバイダ(IO_IMPL)に基づく一意のパラメータを示します。

    ストレージ spark.sql.catalog.CATALOG_NAME.io-impl メモ
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO 有効になっている場合は、認証情報の提供(X-Iceberg-Access-Delegation=vended-credentials)が必要です。
    追加パラメータ: spark.sql.catalog.CATALOG_NAME.s3.region(リージョンの一覧については、Amazon S3 エンドポイントとクォータをご覧ください)。
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO 追加パラメータ: spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO 追加のストレージ パラメータは必要ありません。

    Snowflake では、STRING 列が自動的にストレージ最適化されるため、クエリを実行する際に問題が発生することがあります。この問題を解決するには、次のいずれかの方法を使用します。

    • オプション 1: Spark でベクトル化を無効にする: 次の Spark 構成プロパティを --properties フラグに追加します。
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • オプション 2: Snowflake でシリアル化ポリシーを変更する: Snowflake のテーブルのストレージ シリアル化ポリシーを COMPATIBLE に変更します。

次のステップ