外部テーブルの概要

このドキュメントでは、BigQuery の外部に保存されているデータを外部テーブルで操作する方法について説明します。外部データソースを操作するには、外部データセットを使用することもできます。

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

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

サポートされているデータストア

BigLake 以外の外部テーブルは次のデータストアで使用できます。

一時テーブルのサポート

永続テーブルまたは一時テーブルを使用すると、BigQuery で外部のデータソースに対してクエリを行うことができます。永続テーブルは、データセット内に作成され、外部データソースにリンクされるテーブルです。テーブルは永続的であるため、アクセス制御を行い、基礎となる外部データソースにアクセスできる他のユーザーとテーブルを共有できます。テーブルに対するクエリはいつでも実行できます。

一時テーブルを使用して外部データソースに対してクエリを実行する場合には、クエリを含むコマンドを送信し、外部データソースにリンクする一時テーブルを作成します。一時テーブルを使用する場合、BigQuery データセット内にはテーブルを作成しません。テーブルはデータセットに永続的に保存されないため、このテーブルを他のユーザーと共有することはできません。一時テーブルを使用して外部データソースにクエリを実行する方法は、外部データに 1 回限りのアドホック クエリを実行する場合、あるいは抽出、変換、読み込み(ETL)プロセスを行う場合に便利です。

複数のソースファイル

Cloud Storage に基づいて BigLake 以外の外部テーブルを作成する場合は、データソースが同じスキーマを持つ複数の外部データソースを使用できます。これは、Bigtable や Google ドライブに基づく BigLake 外部テーブルではサポートされていません。

制限事項

外部テーブルには以下の制限が適用されます。

  • BigQuery では外部データテーブルに対してデータの整合性が保証されません。クエリの実行中に基になるデータを変更すると、予期しない動作が発生する可能性があります。
  • 外部テーブルに対するクエリのパフォーマンスは、標準 BigQuery テーブルのデータに対するクエリよりも低速になる可能性があります。クエリ速度を優先する場合は、外部データソースを設定するのではなく、データを BigQuery に読み込みます。外部テーブルを含むクエリのパフォーマンスは、外部ストレージのタイプに依存します。たとえば、Cloud Storage に格納されたデータのクエリは、Google ドライブに格納されたデータのクエリよりも高速です。一般的に、外部テーブルに対するクエリのパフォーマンスは、データソースから直接データを読み取る処理と同等になります。
  • DML やその他の方法を使用して外部データテーブルを変更することはできません。BigQuery 用の外部テーブルは読み取り専用です。
  • TableDataList JSON API メソッドを使用して外部テーブルからデータを取得することはできません。詳細については、tabledata.list をご覧ください。 この制限を回避するには、宛先テーブルにクエリ結果を保存します。その後、結果テーブルで TableDataList メソッドを使用できます。
  • 外部テーブルからデータをエクスポートする BigQuery ジョブは実行できません。 この制限を回避するには、宛先テーブルにクエリ結果を保存します。次に、結果テーブルに対してエクスポート ジョブを実行します。
  • 外部テーブルをコピーすることはできません。
  • ワイルドカード テーブルのクエリで外部テーブルを参照することはできません。
  • 外部テーブルではクラスタリングはサポートされていません。パーティショニングは制限付きでサポートされています。詳細については、外部でパーティションに分割されたデータのクエリをご覧ください。
  • Cloud Storage 以外の外部データソースにクエリを実行する場合、結果はキャッシュに保存されません(Cloud Storage の GoogleSQL クエリはサポートされています)。同じクエリを複数回発行する場合でも、外部テーブルに対するクエリごとに課金されます。頻繁には変更されない外部テーブルに対してクエリを繰り返し発行する必要がある場合は、クエリ結果を永続的なテーブルに書き込み、永続的なテーブルに対してクエリを実行することを検討してください。
  • Bigtable 外部データソースに対する最大同時実行クエリ数は 16 です。
  • 外部テーブルを使用する連携クエリのドライランで、行が返されても 0 バイトの下限が報告される場合があります。これは、実際のクエリが完了するまで、外部テーブルで処理されるデータの量が確定できないためです。連携クエリを実行すると、このデータの処理に費用がかかります。
  • 外部テーブルの列名として _object_metadata を使用することはできません。これは内部使用のために予約されています。
  • BigQuery では、外部テーブルのテーブル ストレージ統計情報の表示はサポートされていません。
  • 外部テーブルでは柔軟な列名はサポートされていません。
  • BI Engine は、外部テーブルへのクエリをサポートしていません。
  • BigQuery は、BigQuery から Bigtable データを読み取るための Data Boost for Spanner をサポートしていません。
  • BigQuery では、外部テーブルのタイムトラベルまたはフェイルセーフのデータ保持ウィンドウはサポートされていません。
  • 形式固有の制限がすべて適用されます。

ロケーションに関する留意事項

外部テーブルのロケーションを選択する場合は、BigQuery データセットと外部データソースの両方のロケーションを考慮する必要があります。

Cloud Storage

BigLake または BigLake 以外の外部テーブルを使用して Cloud Storage 内のデータをクエリする場合、バケットは外部テーブル定義のある BigQuery データセットと同じロケーションに配置する必要があります。例:

  • 単一リージョン バケット

    Cloud Storage バケットが us-central1(アイオワ)リージョンにある場合、BigQuery データセットは us-central1(アイオワ)リージョンまたは US マルチリージョンに配置する必要があります。

    Cloud Storage バケットが europe-west4(オランダ)リージョンにある場合、BigQuery データセットは europe-west4(オランダ)または EU マルチリージョンに配置する必要があります。

    Cloud Storage バケットが europe-west1(ベルギー)リージョンにある場合、対応する BigQuery データセットも europe-west1(ベルギー)リージョンに配置する必要があります。

  • デュアルリージョン バケット

    Cloud Storage バケットが NAM4 事前定義されたデュアルリージョン、または us-central1(アイオワ)リージョンを含む変更可能なデュアルリージョンにある場合、対応する BigQuery データセットは us-central1(アイオワ)リージョンまたは US マルチリージョンに配置する必要があります。

    Cloud Storage バケットが EUR4 事前定義されたデュアルリージョン、または europe-west4(オランダ)リージョンを含む変更可能なデュアルリージョンにある場合、対応する BigQuery データセットは europe-west4(オランダ)リージョンまたは EU マルチリージョンに配置する必要があります。

    Cloud Storage バケットが ASIA1 事前定義されたデュアルリージョンにある場合、対応する BigQuery データセットは asia-northeast1(東京)リージョンまたは asia-northeast2(大阪)リージョンに配置する必要があります。

    Cloud Storage バケットが、australia-southeast1(シドニー)リージョンと australia-southeast2(メルボルン)リージョンを含む変更可能なデュアルリージョンを使用している場合、対応する BigQuery バケットは australia-southeast1(シドニー)リージョンまたは australia-southeast2(メルボルン)リージョンのいずれかに配置する必要があります。

  • マルチリージョン バケット

    外部クエリのパフォーマンスは最小限のレイテンシと最適なネットワーク帯域幅に依存するため、外部テーブルに対して、マルチリージョン Cloud Storage バケットでマルチリージョン データセット ロケーションを使用することはおすすめしません。

    BigQuery データセットが US マルチリージョンにある場合、対応する Cloud Storage バケットは US マルチリージョン、NAM4 デュアルリージョンなどの us-central1(アイオワ)を含むデュアルリージョン、または us-central1(アイオワ)を含む変更可能なデュアルリージョンに配置する必要があります。

    BigQuery データセットが EU マルチリージョンにある場合、対応する Cloud Storage バケットは EU マルチリージョン、EUR4 デュアルリージョンなどの europe-west4(アイオワ)を含むデュアルリージョン、または europe-west4(アイオワ)を含む変更可能なデュアルリージョンに存在する必要があります。

サポートされる Cloud Storage ロケーションについて詳しくは、Cloud Storage ドキュメントのバケットのロケーションをご覧ください。

Bigtable

BigQuery 外部テーブルを介して Bigtable のデータにクエリを実行する場合は、Bigtable インスタンスが BigQuery データセットと同じロケーションに存在しなければなりません。

  • 単一リージョン: BigQuery データセットがベルギー(europe-west1)のリージョン ロケーションにある場合、対応する Bigtable インスタンスはベルギー リージョンに存在しなければなりません。
  • マルチリージョン: 外部クエリのパフォーマンスは最小のレイテンシと最適なネットワーク帯域幅に依存するため、Bigtable の外部テーブルにマルチリージョン データセットのロケーションを使用することはおすすめしません

サポートされている Bigtable ロケーションについて詳しくは、Bigtable のロケーションをご覧ください。

Google ドライブ

ロケーションに関する考慮事項は、Google ドライブの外部データソースには該当しません。

ロケーション間でのデータの移動

データセットをあるロケーションから別のロケーションに手動で移動する手順は次のとおりです。

  1. BigQuery テーブルから Cloud Storage バケットにデータをエクスポートします。

    BigQuery からのデータのエクスポートに対しては課金されませんが、エクスポートしたデータを Cloud Storage に保存する場合は課金の対象になります。BigQuery からのエクスポートには、エクスポート ジョブの上限が適用されます。

  2. データを、Cloud Storage のエクスポート バケットから転送先の場所に作成した新しいバケットに、コピーまたは移動します。たとえば、US マルチリージョンから asia-northeast1 東京リージョンにデータを移動すると、東京で作成したバケットにデータが転送されます。Cloud Storage オブジェクトの転送について詳しくは、Cloud Storage ドキュメントのオブジェクトのコピー、名前変更、移動をご覧ください。

    リージョン間でデータを転送すると、Cloud Storage でネットワークの下り(外向き)料金が発生します。

  3. 新しいロケーションに新しい BigQuery データセットを作成し、Cloud Storage バケットから新しいデータセットにデータを読み込みます。

    BigQuery へのデータの読み込みに対しては課金されませんが、Cloud Storage にデータを保存した場合は課金の対象となり、データまたはバケットを削除するまで料金が請求されます。読み込まれたデータを BigQuery に保存することについても、請求の対象になります。BigQuery へのデータの読み込みには、読み込みジョブの上限が適用されます。

また、Cloud Composer を使用して、大規模なデータセットをプログラムで移動し、コピーすることもできます。

Cloud Storage を使用した大量のデータセットの保存と移動について詳しくは、Cloud Storage とビッグデータの使用をご覧ください。

料金

BigQuery から外部テーブルに対してクエリを実行する場合、クエリの実行と、該当する読み取りバイト数(BigQuery オンデマンド(TiB 単位)料金を使用する場合)またはスロットの使用量(BigQuery の容量(スロット時間単位)料金を使用する場合)に基づいて料金が請求されます。

データが Cloud Storage に ORC または Parquet で保存されている場合は、データサイズの計算をご覧ください。

また、アプリケーションの料金設定のガイドラインに従い、ソース アプリケーションで使用されるデータやリソースの保存に対しても請求されます。

  • Cloud Storage の料金については、Cloud Storage の料金をご覧ください。
  • Bigtable の料金については、料金をご覧ください。
  • ドライブの料金については、料金をご覧ください。

次のステップ