ボーダーレスな 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 トランジット ルーティング、クロス クラウド キャッシュ(カタログで有効になっている場合)は、 Google Cloudによって自動的に処理されます。
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 を使用して、認証情報の提供が有効になっている Managed Service for Apache Spark に PySpark バッチ ワークロードを送信します。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に変更します。
キャッシュの使用状況と下り(外向き)費用の削減をモニタリングする
連携カタログまたは BigQuery 接続でクロスクラウド キャッシュを有効にすると、Lakehouse は取得したファイル ブロックを Google Cloud クエリ実行リージョン内にローカルにキャッシュします。同じファイルブロックをターゲットとする異なるクエリを含む後続のクエリは、リモート クラウドからファイルを再取得するのではなく、ローカル キャッシュから直接読み取ります。
キャッシュ ヒット率を確認し、下り(外向き)コストの削減を測定するには、BigQuery コンソールでジョブの詳細を調べるか、BigQuery API または bq コマンドライン ツールを使用して JobStatistics2 クエリジョブの統計情報を取得します。
bq show --format=prettyjson --job=true JOB_ID
JOB_ID は、BigQuery クエリジョブの 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): クラウド プロバイダのオブジェクト ストレージから直接読み取られた合計バイト数。
キャッシュのコンセプトとデータ所在地に関する考慮事項の詳細については、インテリジェント キャッシュをご覧ください。