割り当てと制限

BigQuery では、受信するリクエストの最大レートが制限され、プロジェクト単位で適切な割り当てが適用されます。具体的なポリシーは、リソースの可用性、ユーザー プロフィール、サーバー使用量の履歴などの要因に応じて異なり、予告なく変更される場合があります。

システムの現在のレート制限と割り当て制限は以下のとおりです。

クエリジョブ

インタラクティブ クエリを実行することで自動的に作成されるクエリジョブ、および jobs.query メソッドと query-type jobs.insert メソッドの呼び出しを使用してプログラムで送信されるジョブには、以下の各制限が適用されます。

クエリ キャッシュから返された結果を伴うクエリ、およびドライラン クエリは、この制限にカウントされません--dry_run フラグを使用するか、クエリジョブで dryRun プロパティを設定することで、ドライラン クエリを指定できます。

  • ユーザー定義関数(UDF)を使用したクエリに対する同時実行レート制限 - 6 件の同時クエリ

UDF を使用したクエリに対する同時実行レート制限では、インタラクティブ クエリとバッチクエリの両方が対象になります。UDF を使用したインタラクティブ クエリは、インタラクティブ クエリの同時実行レート制限に対してもカウントされます。

  • 日次クエリサイズの制限 - デフォルトでは無制限

カスタム クォータを設定すると、ユーザーがクエリできるデータ量に対する制限を指定できます。

  • 宛先テーブルの日次更新回数制限 - 1 日あたりテーブルごとに 1,000 回の更新

クエリジョブで宛先テーブルを更新できる回数には、1 日あたりテーブルごとに 1,000 回の制限があります。宛先テーブルの更新には、追記オペレーションや上書きオペレーションなどがあります。これらのオペレーションは、BigQuery ウェブ UI を使用したクエリ、bq コマンドライン ツールを使用したクエリ、または jobs.query API メソッドと query-type jobs.insert API メソッドの呼び出しによって実行します。

  • クエリ実行時間の制限 - 6 時間

  • クエリあたりで参照できるテーブルの最大数 - 1,000

  • 未解決クエリの最大長 - 256 KB

  • 解決済みクエリの最大長 - 12 MB

解決済みクエリの長さに対する制限では、クエリで参照しているすべてのビューとワイルドカード テーブルの長さも対象になります。

  • 最大レスポンス サイズ - 128 MB(圧縮)1

1 このサイズはデータの圧縮率によって異なります。レスポンスの実際のサイズは、128 MB よりも大幅に大きいことがあります。

大規模なクエリ結果を宛先テーブルに書き込む場合、最大レスポンス サイズに制限はありません。

  • 行の最大サイズ - 100 MB2

2 行のサイズは行データの内部表現に基づくことから、その最大サイズに対する制限は概算値です。行の最大サイズに対する制限は、クエリジョブ実行の特定の段階で適用されます。

  • オンデマンド料金のプロジェクトあたり同時実行最大スロット数 - 2,000

オンデマンド クエリに対するデフォルトの個数のスロットは、同じプロジェクトで実行するすべてのクエリで共有されます。一般的に、一度に処理するクエリの容量が 100 GB 未満であれば、2,000 個のスロットを使い切る可能性はほとんどありません。

現在使用しているスロットの個数を確認するには、Stackdriver を使用して BigQuery をモニタリングするをご覧ください。2,000 個を超えるスロットが必要な場合は、営業担当者にお問い合わせいただき、定額料金が適切かご検討ください。

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

読み込みジョブ

以下の各制限は、コマンドライン ツールまたは BigQuery ウェブ UI を使用してデータを読み込むことで自動的に作成されるジョブに適用されます。また、load-type jobs.insert API メソッドを使用してプログラムで送信する読み込みジョブにも適用されます。

BigQuery にデータを読み込むときは、以下の各制限が適用されます。

  • 1 日あたりのテーブルあたり読み込みジョブ数 - 1,000(失敗を含む)
  • 1 日あたりのプロジェクトあたり読み込みジョブ数 - 50,000(失敗を含む)
  • 1 日にテーブルあたりで読み込むことができるジョブの最大数である 1,000 を大きくすることはできません。
  • 行とセルサイズの制限:
    データ形式 最大値
    CSV 10 MB(行およびセルサイズ)
    JSON 10 MB(行サイズ)
    Avro 16 MB(ブロックサイズ)
  • テーブルあたりの最大列数 - 10,000
  • 最大ファイルサイズ:
    ファイル形式 圧縮 非圧縮
    CSV 4 GB 5 TB
    JSON 4 GB 5 TB
    Avro 圧縮 Avro ファイルはサポート対象外ですが、圧縮データブロックはサポート対象です。BigQuery は DEFLATE および Snappy コーデックをサポートします。 5 TB(ファイル ヘッダー用に 1 MB)
  • 読み込みジョブ 1 件あたりの最大サイズ - CSV、JSON、Avro のすべての入力ファイル全体で 15 TB
  • ジョブ設定でのソース URI の最大数 - 10,000 個の URI
  • 読み込みジョブ 1 件あたりのファイル最大数 - ワイルドカード URI に一致するすべてのファイルを含むファイル全体で 1,000 万
  • 読み込みジョブ実行時間の制限 - 6 時間
  • 米国に置かれたデータセットを除き、データセットのロケーションと同じリージョンにある Cloud Storage バケットからデータを読み込む必要があります(このバケットは、マルチリージョン バケット、またはデータセットと同じリージョンにあるリージョン バケットとします)。米国に置かれたデータセットには任意のリージョンからデータを読み込むことができます。

詳細については、BigQuery へのデータの読み込みの概要をご覧ください。

コピージョブ

BigQuery でのテーブルのコピーには、以下の各制限が適用されます。以下の各制限は、コマンドライン ツールまたは BigQuery ウェブ UI を使用してデータをコピーすることで自動的に作成されるジョブに適用されます。また、copy-type jobs.insert API メソッドを使用してプログラムで送信するコピージョブにも適用されます。

  • 1 日あたりの宛先テーブルあたりコピージョブ数 - 1,000(失敗を含む)
  • 1 日あたりのプロジェクトあたりコピージョブ数 - 10,000(失敗を含む)

エクスポート ジョブ

BigQuery からデータをエクスポートするジョブには、以下の各制限が適用されます。これらの制限は、コマンドライン ツールまたは BigQuery ウェブ UI を使用してデータをエクスポートすることで自動的に作成されるジョブに適用されます。また、load-type jobs.insert API メソッドを使用してプログラムで送信するエクスポート ジョブにも適用されます。

  • 1 日あたりのエクスポート数 - プロジェクトあたり最大エクスポート回数 50,000 回および 1 日あたり最大エクスポート容量 10TB (10TB のデータ制限は、すべてのエクスポート全体で累積した値に適用されます)
  • ワイルドカード URI 数 - エクスポートあたり 500 個のワイルドカード URI

データセットの制限

データセットには以下の各制限が適用されます。

  • プロジェクトあたりデータセット数 - 無制限
    プロジェクトあたりのデータセット数に制限はありませんが、1 つのプロジェクトで扱うデータセットが数千個になると、ウェブ UI のパフォーマンスが低下し始め、データセットのリスト表示速度も遅くなります。
  • データセットあたりテーブル数 - 無制限
    データセットあたりのテーブル数も制限されていませんが、データセットに存在するテーブルが 50,000 個以上になると、それらの列挙速度が遅くなります。API 呼び出し、ウェブ UI、__TABLES_SUMMARY__ メタテーブルのどれを使用していても、列挙のパフォーマンスが低下します。UI のパフォーマンス向上を図るには、?minimal パラメータを使用して、プロジェクトあたりで表示するテーブルの数を 30,000 に制限します。このパラメータは、BigQuery ウェブ UI の URL に次の形式で追加します。https://bigquery.cloud.google.com/queries/[PROJECT_NAME]?minimal
  • データセットのアクセス制御リストでの承認済みビューの最大数 - 1,000
    承認済みビューを作成して、ソースデータへのアクセスを制限できます。承認済みビューは、そのビューに対してクエリを実行するユーザーに表示しない列を除外する SQL クエリを使用して作成します。データセットのアクセス制御リストには、最大で 1,000 件の承認済みビューを追加できます。
  • データセット メタデータ更新オペレーションの最大レート - データセットあたり 2 秒ごとに 1 回のオペレーション
    データセット メタデータ更新に対する制限では、BigQuery ウェブ UI、bq コマンドライン ツール、または datasets.insertdatasets.patchdatasets.update のいずれかの API メソッド呼び出しを使用して実行するすべてのメタデータ更新オペレーションも対象となります。

テーブルの制限

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

標準テーブル

  • 1 日あたりの最大テーブル オペレーション数 - 1,000

テーブルにデータを追記するオペレーション、テーブルを上書きするオペレーション、DML の INSERT ステートメントを使用してテーブルにデータを書き込むオペレーションも含め、どのようなオペレーションであっても、1 日あたりでテーブルに対して実行できるオペレーションの総数は 1,000 件に制限されています。

テーブルに対するオペレーションの最大数には、宛先テーブルへのデータの追記や上書き、DML の INSERT ステートメントを使用したテーブルへのデータ書き込みなどを実行するすべての読み込みジョブコピージョブクエリジョブを組み合わせた合計数が算入されます。

たとえば、mytable にデータを追記する 500 件のコピージョブと mytable にデータを追記する 500 件のクエリジョブを実行すると、この割り当てに達します。

  • テーブル メタデータ更新オペレーションの最大レート - テーブルあたり 2 秒ごとに 1 件のオペレーション

テーブル メタデータ更新に対する制限では、BigQuery ウェブ UI、bq コマンドライン ツール、または tables.inserttables.patchtables.update のいずれかの API メソッド呼び出しを使用して実行するすべてのメタデータ更新オペレーションも対象となります。この制限はジョブ出力にも適用されます。

分割テーブル

  • 分割テーブルあたりの最大パーティション数 - 2,500

  • 1 つのジョブで変更される最大パーティション数 - 2,000

ジョブ オペレーション(クエリまたは読み込み)ごとに対象にできるパーティションは最大 2,000 です。2,000 を超えるパーティションを対象とするクエリまたは読み込みジョブは、Google BigQuery で拒否されます。

  • テーブルごとの 1 日あたりの最大パーティション変更数 - 5,000

分割テーブルでは 1 日あたりのパーティション変更の合計が 5,000 に制限されています。パーティションは、パーティション内でデータを追加または上書きするオペレーションを使用して変更できます。パーティションを変更するオペレーションには、読み込みジョブ、結果をパーティションに書き込むクエリ、パーティション内のデータを変更する DML ステートメント(INSERTDELETEUPDATEMERGE)が含まれます。

1 つのジョブで複数のパーティションを対象にすることができます。たとえば、DML ステートメントは(取り込み時間と分割テーブル両方の)複数のパーティションでデータを更新できます。クエリジョブと読み込みジョブは、複数のパーティションに書き込みを行うこともできますが、対象は分割テーブルのパーティションに限定されます。Google BigQuery では、ジョブで消費される割り当て量を決定する際に、ジョブの対象であるパーティションの数を使用します。ストリーミング挿入はこの割り当てに影響しません。

  • パーティションに対するオペレーションの最大レート - 10 秒ごとに 50 回のパーティション オペレーション

データ操作言語のステートメント

データ操作言語(DML)ステートメントには以下の各制限が適用されます。

  • UPDATE、DELETE、および MERGE の各ステートメントを組み合わせた実行数の 1 日あたりテーブルあたり最大値 - 96
  • UPDATE、DELETE、および MERGE の各ステートメントを組み合わせた実行数の 1 日あたりプロジェクトあたり最大値 - 10,000
  • INSERT ステートメント実行数の 1 日あたりテーブルあたり最大値 - 1,000

MERGE ステートメントは、複数の INSERT 句、UPDATE 句、DELETE 句が使用されていても、単一の DML ステートメントとしてカウントします。

DML ステートメントの処理には、SQL よりも多くのリソースが必要なので、DML ステートメントには SELECT ステートメント(SQL)よりも厳しい制限が適用されます。

ストリーミング挿入

BigQuery へのデータのストリーミングには、次の制限が適用されます。

  • 行の最大サイズ: 1 MB。この値を超えると invalid エラーが発生します。
  • HTTP リクエストのサイズの制限: 10 MB。この値を超えると invalid エラーが発生します。
  • 1 秒あたりの最大行数: プロジェクトごとに 1 秒あたり 100,000 行。この制限を超えると quotaExceeded エラーが発生します。テーブルごとの 1 秒あたりの制限も 100,000 行になります。この割り当てを 1 つのテーブルで使用することも、プロジェクト内の複数のテーブルに分割することもできます。
  • リクエストあたりの最大行数: リクエストごとに 10,000 行。最大 500 行をおすすめします。一括処理することでパフォーマンスとスループットをある程度向上させることはできますが、リクエストごとのレイテンシは高くなります。リクエストごとの行数が少なく、各リクエストにオーバーヘッドがあると取り込みの効率が下がります。また、リクエストごとの行数が多すぎるとスループットが下がります。推奨される行数はリクエストごとに 500 行程度ですが、代表データ(スキーマとデータサイズ)を使用したテストを実施して適切なバッチサイズを判断することをおすすめします。
  • 1 秒あたりの最大バイト数: テーブルごとに 1 秒あたり 100 MB。この制限を超えると quotaExceeded エラーが発生します。

この制限を超えるストリーミング データ割り当てを必要とするプロジェクトでは、[Google Cloud Platform Console] ページからリクエストを送信できます。ストリーミング データに対するカスタム割り当てを 50,000 行単位で設定できます。通常 2~3 営業日以内に回答を差し上げます。

API リクエスト

すべての API リクエスト

すべての BigQuery API リクエストには以下の各制限が適用されます。

  • ユーザーあたりの 1 秒あたり API リクエスト数 - 100
    1 秒あたり 100 を超えるリクエストを発行すると、スロットリングが発生する可能性があります。この制限はストリーミング インサートには適用されません。
  • ユーザーあたりの同時実行 API リクエスト数 - 300
    ユーザーあたり 300 を超えるリクエストを同時に発行すると、スロットリングが発生する可能性があります。この制限はストリーミング インサートには適用されません。

tabledata.list リクエスト

tabledata.list メソッドは、指定した行のセットからテーブルデータを取得します。tabledata.list リクエストには以下の各制限が適用されます。

  • tabledata.list の呼び出しによって返されるプロジェクトごとの 1 秒あたりの最大バイト数: 60 MB/秒
    tabledata.list を呼び出すと、プロジェクトごとに 1 秒あたり最大 60 MB のテーブル行データを返すことができます。制限は、読み取られるテーブルを含むプロジェクトに適用されます。
  • tabledata.list の呼び出しによって返されるプロジェクトごとの 1 秒あたりの最大行数: 150,000/秒
    tabledata.list を呼び出すと、プロジェクトごとに 1 秒あたり最大 150,000 のテーブル行を返すことができます。制限は、読み取られるテーブルを含むプロジェクトに適用されます。

tables.insert リクエスト

tables.insert メソッドは、新しい空のテーブルをデータセットに作成します。tables.insert リクエストには以下の各制限が適用されます。

  • プロジェクトごとの 1 秒あたりの最大リクエスト数: 10
    tables.insert を呼び出すと、プロジェクトごとに 1 秒あたり最大 10 個のリクエストを作成できます。この制限には、CREATE TABLE DDL ステートメントなどのテーブルを作成するステートメントと、宛先テーブルに結果を書き込むクエリが含まれます。

projects.list リクエスト

projects.list メソッドは、アクセス権が付与されたすべてのプロジェクトをリストします。projects.list リクエストには以下の各制限が適用されます。

  • プロジェクトごとの 1 秒あたりの最大リクエスト数: 2
    projects.list を呼び出すと、プロジェクトごとに 1 秒あたり最大 2 つのリクエストを作成できます。

jobs.get リクエスト

jobs.get メソッドは、特定のジョブに関する情報を返します。jobs.get リクエストには以下の各制限が適用されます。

  • プロジェクトごとの 1 秒あたりの最大リクエスト数: 1,000
    jobs.get を呼び出すと、プロジェクトごとに 1 秒あたり最大 1,000 個のリクエストを作成できます。

割り当てが補充される時期は?

毎日の割り当ては、レート制限動作をガイドするという意図を反映して、一日中一定の間隔で補充されます。割り当てが使い尽くされた場合の長時間の混乱を避けるためにも、断続的な更新がなされます。通常、割り当ては 1 日に 1 回グローバルに補充されるのではなく、数分でさらに多くの割り当てが利用可能になります。

エラーコード

割り当てと制限に対するエラーでは、403 または 400 の HTTP レスポンス コードが返されます。エラーコードとそれに対応するトラブルシューティング手順の一覧については、エラーのトラブルシューティングについての記事をご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...