外部データソースの概要

このページでは、BigQuery の外部に保存されたデータに対してクエリを実行する方法の概要を説明します。

外部データソースは、データが BigQuery ストレージに格納されていない場合でも、BigQuery から直接クエリできるデータソースです。たとえば、別の Google Cloud データベース、Cloud Storage のファイル、または別のクラウド プロダクトにまとめてデータを保管していて、BigQuery で分析を行うものの、移行の準備はできていない場合があります。

外部データソースのユースケースには以下が含まれます。

  • 抽出、読み込み、変換(ELT)ワークロードの場合、CREATE TABLE ... AS SELECT クエリを使用して、1 つのパスでデータの読み込みとクリーニングを実行し、クリーンアップした結果を BigQuery ストレージに書き込みます。
  • 外部データソースから、頻繁に変化するデータと BigQuery テーブルを結合します。外部データソースに対して直接クエリを実行すると、変更されるたびにデータを BigQuery ストレージに再読み込みする必要がなくなります。

BigQuery には、外部データに対してクエリを行うための 2 つのメカニズムとして、外部テーブルと連携クエリがあります。

外部テーブル

外部テーブルは、BigQuery ストレージにメタデータとスキーマを格納するという点で、標準の BigQuery テーブルと似ています。ただし、データは外部ソースに保存されます。

外部テーブルはデータセット内に格納され、標準の BigQuery テーブルと同じ方法で管理します。たとえば、テーブルのプロパティの表示や、アクセス制御の設定などができます。これらのテーブルに対してクエリを実行でき、多くの場合、他のテーブルと結合できます。

次の 3 種類の外部テーブルがあります。

  • BigLake テーブル
  • オブジェクト テーブル
  • BigLake 以外の外部テーブル

BigLake テーブル

BigLake テーブルでは、アクセス権の委任を使用して外部データストアの構造化データをクエリできます。アクセス権の委任により、BigLake テーブルへのアクセス権と基盤となるデータストアへのアクセス権が分離されます。データストアへの接続には、サービス アカウントに関連付けられた外部接続が使用されます。サービス アカウントがデータストアからデータを取得する操作を行うため、必要な操作はユーザーに BigLake テーブルへのアクセス権を付与することのみです。これにより、行レベル列レベルのセキュリティなど、テーブルレベルでの詳細なセキュリティを適用できます。Cloud Storage に基づく BigLake テーブルの場合は、動的データ マスキングも使用できます。Amazon S3 または Blob Storage のデータを含む BigLake テーブルを使用したマルチクラウド分析ソリューションの詳細については、BigQuery Omni をご覧ください。

詳細については、BigLake テーブルの概要をご覧ください。

オブジェクト テーブル

オブジェクト テーブルによって、Cloud Storage 内の非構造化データを分析できます。リモート関数で分析を行う、または BigQuery ML を使用して推論を実行して、これらのオペレーションの結果を BigQuery の残りの構造化データと結合できます。

BigLake テーブルと同様に、オブジェクト テーブルでもアクセス委任が使用されます。これにより、オブジェクト テーブルへのアクセスと Cloud Storage オブジェクトへのアクセスが切り離されます。Cloud Storage への接続にはサービス アカウントに関連付けられた外部接続が使用されるため、オブジェクト テーブルへのアクセス権をユーザーに付与するだけで済みます。これにより、行レベルのセキュリティを強化し、ユーザーがアクセスできるオブジェクトを管理できます。

詳細については、オブジェクト テーブルの概要をご覧ください。

BigLake 以外の外部テーブル

BigLake 以外の外部テーブルでは、外部データストアの構造化データをクエリできます。BigLake 以外の外部テーブルに対してクエリを実行するには、外部テーブルと外部データソースの両方に対する権限が必要です。たとえば、Cloud Storage のデータソースを使用する BigLake 以外の外部テーブルに対してクエリを実行するには、次の権限が必要です。

  • bigquery.tables.getData
  • bigquery.jobs.create
  • storage.buckets.get
  • storage.objects.get

詳細については、外部テーブルの概要をご覧ください。

連携クエリ

連携クエリによって、クエリ ステートメントを Spanner または Cloud SQL データベースに送信し、結果を一時テーブルとして取得できます。連携クエリは、BigQuery Connection API を使用して Spanner または Cloud SQL との接続を確立します。クエリで EXTERNAL_QUERY 関数を使用して、外部データベースの SQL 言語を使用してクエリ ステートメントを外部データベースに送信します。結果は GoogleSQL データ型に変換されます。

詳細については、連携クエリの概要をご覧ください。

外部データソースの機能の比較

次の表は、外部データソースの動作を比較したものです。

BigLake テーブル オブジェクト テーブル BigLake 以外の外部テーブル 連携クエリ
アクセス権の委任を使用する ○(サービス アカウントを使用) ○(サービス アカウントを使用) × ○(データベース ユーザー アカウントを使用、Cloud SQL のみ)
複数のソース URI に基づくことが可能 ○(Cloud Storage のみ) 該当なし
行マッピング 行はファイルの内容を表す 行はファイルのメタデータを表す 行はファイルの内容を表す 該当なし
コネクタを使用して他のデータ処理ツールからアクセス可能 ○(Cloud Storage のみ) × 該当なし
他の BigQuery テーブルと結合可能 ○(Cloud Storage のみ)
一時テーブルとしてアクセス可能 ○(Cloud Storage のみ) ×
Amazon S3 と連携 × × ×
Azure Storage と連携 × × ×
Bigtable と連携 × いいえ ×
Spanner と連携 × × いいえ
Cloud SQL と連携 × × いいえ
Google ドライブと連携 × いいえ ×
Cloud Storage と連携 はい ×

次のステップ