リモートデータをクエリする

クロスクラウド データアクセスを設定すると、複数のソースからリモートデータをクエリできます。このボーダーレス レイクハウスの機能を使用すると、BigQuery の標準 SQL、Apache Spark のオープンソース バージョン、または Managed Service for Apache Spark を使用してデータにアクセスできます。分析クエリに加えて、連携データを使用して AI を活用した分析情報とガバナンスを実現できます。

  • 会話分析: フェデレーション テーブルなど、正確なデータソースに基づいて専門のエージェントを構築し、1 回の会話でクラウド間のデータを分析します。
  • Dataplex Catalog: 統合データソースを使用して、データ プロファイリングと分析情報に Knowledge Catalog 機能を使用します。

より深い分析情報を得るために、プロジェクト、データセット、テーブルから、ビュー、グラフ、ユーザー定義関数まで、データソースに基づいた専門エージェントを作成できます。データが 1 か所に保存されることはほとんどないため、会話型分析は BigQuery 標準テーブルだけでなく、Lakehouse で管理される Apache Iceberg テーブルや、Databricks Unity、AWS Glue、SAP、Salesforce などの Lakehouse ソースにも対応しています。これにより、データサイロを解消し、単一の会話からクラウド間でデータを分析できます。

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

始める前に

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

  1. リモート カタログにデータがあることを確認します。
  2. AWS GlueDatabricks Unity CatalogSnowflake Horizon CatalogSAP Business Data Cloud のクロスクラウド接続を設定します。

必要なロール

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

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

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

データのクエリ

フェデレーションを設定すると、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 コネクタを管理する必要はありません。

  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.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 に変更します。

次のステップ