外部テーブルの概要

このドキュメントでは、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 では、外部テーブルのテーブル ストレージ統計情報の表示はサポートされていません。
  • 外部テーブルで柔軟な列名はサポートされていません。

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

外部テーブルのロケーションを選択する場合は、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 ドライブの外部データソースには該当しません。

データ マネジメント

データ管理計画を作成する:
  • BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。

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

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

  1. データセットと同じロケーションか、データセットのロケーションに含まれるロケーションの Cloud Storage バケットに、BigQuery テーブルからデータをエクスポートします。たとえば、データセットが「EU」マルチリージョン ロケーションにある場合は、EU の一部である「europe-west1」ベルギーのロケーションにデータをエクスポートできます。

    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 の料金については、料金をご覧ください。
  • ドライブの料金については、料金をご覧ください。

次のステップ