ボーダーレスな 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 ソースで動作します。
始める前に
データをクエリする前に、次の操作を完了する必要があります。
- リモート カタログにデータがあることを確認します。
- AWS Glue、Databricks Unity Catalog、Snowflake Horizon Catalog、Workday Data Lake、SAP Business Data Cloud のクロスクラウド接続を設定します。
必要なロール
連携データに対してクエリを実行するために必要な権限を取得するには、プロジェクトに対する次の 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 を使用します。テーブルパスは、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 コネクタを管理する必要はありません。
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.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.uriREST カタログ エンドポイントの 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.extensionsIceberg 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-uriOAuth2 トークン サーバーのエンドポイント 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=falsespark.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): リモート クラウド プロバイダのオブジェクト ストレージから直接読み取られた合計バイト数。
キャッシュのコンセプトとデータ所在地に関する考慮事項の詳細については、インテリジェント キャッシュをご覧ください。