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

ボーダーレスな Lakehouse では、クロスクラウド接続により、クラウド環境間でファイルを移動することなく、外部プラットフォームからリモートデータにアクセスできます。その後、BigQuery、Managed Service for Apache Spark、オープンソースの Apache Spark から連携テーブルをクエリできます。

分析クエリに加えて、連携データを使用して AI による分析情報とガバナンスを実現できます。

  • 会話分析: 連携テーブルなどのデータソースにグラウンディングされた専用エージェントを構築し、1 回の会話でクラウド全体のデータを分析します。
  • Knowledge Catalog: 連携データソース全体でデータをプロファイリングし、分析情報を生成します。

より詳細な分析を行うには、プロジェクト、データセット、テーブル、ビュー、グラフ、ユーザー定義関数を使用する会話型分析エージェントを作成します。これらのエージェントは、BigQuery 標準テーブル、Lakehouse で管理される Apache Iceberg テーブル、Databricks Unity Catalog、AWS Glue、SAP BDC、Salesforce などの Lakehouse ソースで動作します。

始める前に

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

  1. リモート カタログにデータがあることを確認します。
  2. AWS Glue、Databricks Unity Catalog、Snowflake Horizon Catalog、Workday Data Lake、SAP Business Data Cloud のクロスクラウド接続を設定します。

必要なロール

連携データに対してクエリを実行するために必要な権限を取得するには、プロジェクトに対する次の 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: カタログ内の名前空間。
  • 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 を使用して、認証情報の自動発行を有効にした PySpark バッチ ワークロードを Managed Service for Apache Spark に送信します。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: 連携カタログの名前空間。
    • 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 署名なしトークンまたは個人用アクセス トークン(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 のエンドポイントと割り当てをご覧ください)。
    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 列は自動的にストレージが最適化されるため、クエリを実行するときに問題が発生することがあります。この問題は、次の 2 つの方法のいずれかで解決できます。

    • オプション 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 に変更します。

キャッシュの使用状況と下り(外向き)費用の削減をモニタリングする

レイクハウス キャッシュは、すべてのクロスクラウド クエリで自動的に有効になります。クエリが実行されると、Lakehouse はデータブロックを Google Cloud ストレージ内にローカルに自動的にキャッシュします。同じデータブロックをターゲットとする後続のクエリは、リモート クラウドからデータを再取得するのではなく、ローカル キャッシュから直接読み取ります。

キャッシュ ヒット率を確認し、下り(外向き)コストの削減を測定するには、BigQuery コンソールでジョブの詳細を調べるか、BigQuery API または bq CLI を使用してクエリジョブの統計情報(JobStatistics2)を取得します。

bq show --format=prettyjson --job=true JOB_ID

statistics.query.objectStorageStats(または proto API の object_storage_stats)の JSON 出力では、ジョブの統計情報に、実行中にアクセスされた各クラウド プロバイダのエントリを含むリストが返されます。各エントリには次のフィールドが含まれます。

  • cloudProvider(cloud_provider): オブジェクト ストレージをホストするリモート クラウド プロバイダ(AWS や AZURE など)。
  • cacheBytesRead(cache_bytes_read): ローカル Google Cloud キャッシュから読み取られた合計バイト数。リモート オブジェクト ストレージの読み取りは回避されます。
  • objectStorageBytesRead(object_storage_bytes_read): リモート クラウド プロバイダのオブジェクト ストレージから直接読み取られた合計バイト数。

キャッシュのコンセプトとデータ所在地に関する考慮事項の詳細については、インテリジェント キャッシュをご覧ください。

次のステップ