外部テーブル

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

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

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

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

外部テーブルの制限事項

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

  • BigQuery では外部データテーブルに対してデータの整合性が保証されません。クエリの実行中に基になるデータを変更すると、予期しない動作が発生する可能性があります。
  • 外部テーブルに対するクエリのパフォーマンスは、ネイティブな BigQuery テーブルのデータに対するクエリよりも低くなる可能性があります。クエリ速度を優先する場合は、外部データソースを設定するのではなく、データを BigQuery に読み込みます。外部テーブルを含むクエリのパフォーマンスは、外部ストレージのタイプに依存します。たとえば、Cloud Storage に格納されたデータのクエリは、Google ドライブに格納されたデータのクエリよりも高速です。一般に、外部へのクエリ パフォーマンスは、データソースからデータを直接読み取る処理と同等になります。
  • 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 データセットと外部データソースを同じロケーションに配置する。
    • Cloud Storage などの外部データソースのデータをクエリする場合、クエリするデータは BigQuery データと同じロケーションに存在する必要があります。たとえば、BigQuery データセットが EU のマルチリージョン ロケーションにある場合、クエリ対象のデータが含まれている Cloud Storage バケットは EU のマルチリージョン バケットに存在する必要があります。データセットが米国のマルチリージョン ロケーションにある場合、Cloud Storage バケットは米国のマルチリージョン バケットに存在する必要があります。
    • データセットがリージョン ロケーションにある場合、クエリ対象のデータが含まれている Cloud Storage バケットは、同じロケーションのリージョン バケットに存在する必要があります。たとえば、データセットが東京リージョンにある場合、Cloud Storage バケットは東京のリージョン バケットである必要があります。
    • 外部データセットが Cloud Bigtable にある場合、データセットは米国または EU のマルチリージョン ロケーションに存在する必要があります。Cloud Bigtable データは、サポートされている Cloud Bigtable のロケーションのいずれかに存在する必要があります。
    • ロケーションに関する考慮事項は、Google ドライブの外部データソースには適用されません。
  • データ管理計画を作成する
    • BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。

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

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

  1. BigQuery テーブルから、データセットと同じロケーションにあるリージョンまたはマルチリージョンの Cloud Storage バケットにデータをエクスポートします。たとえば、データセットが EU のマルチリージョン ロケーションにある場合は、EU のリージョン バケットまたはマルチリージョン バケットにデータをエクスポートします。

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

  2. Cloud Storage バケットから新しいロケーションのリージョン バケットまたはマルチリージョン バケットに、データをコピーするか移動します。たとえば、米国のマルチリージョン ロケーションから東京のリージョン ロケーションにデータを移動すると、データは東京のリージョン バケットに転送されます。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 Storage の料金をご覧ください。
  • Cloud Bigtable の料金については、料金をご覧ください。
  • Google ドライブの料金については、料金をご覧ください。

次のステップ

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