外部テーブル

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

外部テーブルは、標準の BigQuery テーブルのように機能するテーブルです。テーブル スキーマを含むテーブル メタデータは BigQuery ストレージに保存されていますが、データ自体は外部ソースに存在します。

外部テーブルは一時テーブルまたは永続テーブルのどちらでもかまいません。外部の永続テーブルはデータセット内に格納され、標準の BigQuery テーブルと同じ方法で管理されます。たとえば、テーブル プロパティの表示アクセス制御の設定などを行うことが可能です。テーブルに対してクエリを実行し、他のテーブルと結合できます。

外部テーブルは、次のデータソースで使用できます。

外部テーブルの制限事項

外部データソースの場合、次のような制限があります。

  • BigQuery では外部データテーブルに対してデータの整合性が保証されません。クエリの実行中に基になるデータを変更すると、予期しない動作が発生する可能性があります。
  • 外部テーブルに対するクエリのパフォーマンスは、ネイティブな BigQuery テーブルのデータに対するクエリよりも低くなる可能性があります。クエリ速度を優先する場合は、外部データソースを設定するのではなく、データを BigQuery に読み込みます。外部テーブルを含むクエリのパフォーマンスは、外部ストレージのタイプに依存します。たとえば、Cloud Storage に格納されたデータのクエリは、Google ドライブに格納されたデータのクエリよりも高速です。一般的に、外部テーブルのクエリ パフォーマンスは、データソースからデータを直接読み取る処理と同等になります。
  • DML やその他の方法を使用して外部データテーブルを変更することはできません。BigQuery 用の外部テーブルは読み取り専用です。
  • TableDataList JSON API メソッドを使用して外部テーブルからデータを取得することはできません。詳細については、tabledata.list をご覧ください。

    この制限を回避するには、宛先テーブルにクエリ結果を保存します。その後、結果テーブルで TableDataList メソッドを使用できます。

  • 外部テーブルからデータをエクスポートする BigQuery ジョブは実行できません。

    この制限を回避するには、宛先テーブルにクエリ結果を保存します。その後、結果テーブルに対してエクスポート ジョブを実行できます。

  • ワイルドカード テーブルのクエリで外部テーブルを参照することはできません。

  • 外部テーブルはクラスタリングをサポートしていません。パーティショニングは制限付きでサポートされています。詳細については、外部でパーティションに分割されたデータのクエリをご覧ください。

  • Cloud Storage 以外の外部データソースにクエリを実行する場合、結果はキャッシュに保存されません(Cloud Storage での BigQuery 標準 SQL クエリではサポートされています)。同じクエリを複数回発行する場合でも、外部テーブルに対するクエリごとに課金されます。頻繁には変更されない外部テーブルに対してクエリを繰り返し発行する必要がある場合は、クエリ結果を永続的なテーブルに書き込み、永続的なテーブルに対してクエリを実行することを検討してください。

  • 現在、Cloud Bigtable のデータのクエリは、次のリージョンとゾーンでのみ利用できます。
    リージョン ゾーン
    us-central1

    us-central1-a

    us-central1-b

    us-central1-c

    us-central1-f

    europe-west1

    europe-west1-b

    europe-west1-c

    europe-west1-d

  • Cloud Bigtable 外部データソースに対する最大同時クエリ数は 4 です。

  • 外部テーブルを使用する連携クエリのドライランで、行が返されても 0 バイトの下限が報告される場合があります。これは、実際のクエリが完了するまで、外部テーブルで処理されるデータの量が確定できないためです。連携クエリを実行すると、このデータ処理に料金が発生します。

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

データのロケーションを選択するときは、次の点を考慮してください。

  • 外部データソースを使用する場合は、BigQuery データセットを同じロケーションに配置します。
    • クラウド ストレージ: BigQuery の外部テーブル経由でクラウド ストレージのデータをクエリする場合、クエリするデータは BigQuery データセットと同じロケーションに配置する必要があります。例:
      • 単一リージョン: BigQuery データセットがワルシャワ(EUROPE-CENTRAL2)リージョンのロケーションにある場合、対応する Cloud Storage バケットもワルシャワ リージョンにある必要があります。これは現在、ワルシャワを含む Cloud Storage のデュアルリージョンがないためです。
      • デュアルリージョン: BigQuery データセットが東京(ASIA-NORTHEAST1)リージョンにある場合、対応する Cloud Storage バケットは東京リージョンまたは ASIA1 デュアルリージョン(東京を含む)のバケットである必要があります。
      • マルチリージョン: 外部クエリのパフォーマンスは最小のレイテンシと最適なネットワーク帯域幅によって決まるため、マルチリージョンの Cloud Storage バケットでは、外部テーブルとしてマルチリージョン データセットを持つロケーションを使用することはおすすめしません
      サポートされている Cloud Storage のロケーションを表示する。
    • Cloud Bigtable: BigQuery の外部テーブルを介して Cloud Bigtable のデータに対してクエリを実行する場合、Cloud Bigtable インスタンスは BigQuery データセットと同じロケーションに存在する必要があります。
      • 単一リージョン: BigQuery データセットがベルギー(europe-west1)のリージョン ロケーションにある場合、対応する Cloud Bigtable インスタンスはベルギーのリージョンにある必要があります。
      • マルチリージョン: 外部クエリのパフォーマンスは最小のレイテンシと最適なネットワーク帯域幅によって決定されるため、Cloud Bigtable の外部テーブルではマルチリージョン データセットのロケーションを使用することはおすすめしません
      サポートされている Cloud Bigtable のロケーションを表示する。
    • Google ドライブ: ロケーションに関する考慮事項は、Google ドライブの外部データソースには適用されません。
  • データ管理計画を作成する
    • BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。

Cloud Storage のロケーションの詳細については、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. 新しいロケーションの Cloud Storage バケットにデータを転送した後、新しい BigQuery データセットを(新しいロケーションに)作成します。次に、Cloud Storage バケットから BigQuery にデータを読み込みます。

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

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

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

外部データソースの料金

BigQuery から外部テーブルに対してクエリを実行する場合、クエリの実行に対して課金されます。

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

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

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

次のステップ

  • Cloud Bigtable に保存されているデータに対してクエリを実行する方法を学ぶ
  • Cloud Storage に保存されているデータに対してクエリを実行する方法を学ぶ
  • Google ドライブに保存されているデータに対してクエリを行う方法を学ぶ