エラー メッセージ

このドキュメントでは、BigQuery の使用中に表示される可能性のあるエラー メッセージについて、HTTP エラーコードや推奨されるトラブルシューティングの手順も含めて説明します。

クエリエラーの詳細については、クエリに関する問題のトラブルシューティングをご覧ください。

ストリーミング挿入エラーの詳細については、ストリーミング挿入のトラブルシューティングをご覧ください。

エラーの表

BigQuery API からのレスポンスでは、レスポンス本文内に HTTP エラーコードとエラー オブジェクトが含まれます。通常、エラー オブジェクトは次のいずれかになります。

次の表の「エラー メッセージ」列は、ErrorProto オブジェクトの reason プロパティに対応しています。

この表は、すべての HTTP エラーやその他のネットワーク エラーを網羅したものではありません。そのため、BigQuery からのすべてのエラー レスポンスにエラー オブジェクトが存在するとは限りません。また、BigQuery API の Cloud クライアント ライブラリを使用すると、別のエラーまたはエラー オブジェクトが返されることがあります。詳細については、BigQuery API クライアント ライブラリをご覧ください。

下の表にない HTTP レスポンス コードを受け取った場合、そのレスポンス コードは HTTP リクエストの問題または予想される結果を示します。5xx の範囲のレスポンス コードは、サーバー側のエラーを示します。5xx レスポンス コードを受け取った場合は、しばらくしてからリクエストを再試行してください。場合によっては、プロキシなどの中間サーバーによって 5xx レスポンス コードが返されることがあります。レスポンス本文とレスポンス ヘッダーを調べて、エラーの詳細を確認してください。HTTP レスポンス コードの一覧については、HTTP レスポンス コードをご覧ください。

bq コマンドライン ツールを使用してジョブ ステータスを確認した場合、デフォルトではエラー オブジェクトが返されません。次の表に対応するエラー オブジェクトと reason プロパティを表示するには、--format=prettyjson フラグを使用します。たとえば、bq --format=prettyjson show -j <job id> のようにします。bq ツールの詳細ログを表示するには、--apilog=stdout を使用します。bq ツールのトラブルシューティングの詳細については、デバッグをご覧ください。

エラー メッセージ HTTP コード 説明 トラブルシューティング
accessDenied 403 このエラーは、アクセス権限のないリソース(データセットテーブルビュージョブなど)にアクセスしようとしたときに返されます。また、読み取り専用オブジェクトを変更しようとしたときにも返されます。 リソースのオーナーに連絡し、エラーの監査ログの principalEmail 値で特定されるユーザーに対してリソースへのアクセス権を付与するようリクエストします。
backendError 500 または 503 このエラーは、一時的なサーバー障害(ネットワーク接続の問題、サーバーの過負荷など)が発生したときに返されます。 通常、しばらくしてからもう一度試します。問題が繰り返し発生する場合は、指数バックオフで再試行してください。ただし jobs.get 呼び出しと jobs.insert 呼び出しは特殊なケースで、トラブルシューティング手法が異なります。

jobs.get 呼び出し

  • jobs.get のポーリング中に 503 エラーを受け取った場合は、数秒待ってから再度ポーリングします。
  • ジョブが完了しても backendError を含むエラー オブジェクトが含まれる場合、ジョブは失敗しています。データ整合性の問題を心配することなく、ジョブを再試行できます。

jobs.insert 呼び出し

jobs.insert 呼び出しの実行中にこのエラーを受け取った場合、ジョブが成功しているかどうかは不明です。この場合は、ジョブを再試行する必要があります。

badRequest 400 'UPDATE or DELETE statement over table <project.dataset.table> would affect rows in the streaming buffer, which is not supported' エラーは、最近ストリーミングされたテーブル内の行の一部が DML オペレーション(DELETEUPDATEMERGE)で使用できない場合に発生することがあります。使用できない状態となるのは通常は数分ほどですが、まれに 90 分ほど続く場合があります。詳細については、ストリーミング データの可用性DML の制限事項をご覧ください。 テーブルの DML オペレーションでデータを使用できるかどうかを調べるには、tables.get レスポンスstreamingBuffer セクションの有無を確認します。streamingBuffer セクションが存在しない場合、テーブルデータは DML オペレーションで使用できます。streamingBuffer.oldestEntryTime フィールドを使用して、ストリーミング バッファ内のレコードの経過時間を特定することもできます。
billingNotEnabled 403 プロジェクトで課金が有効になっていないときに返されます。 Google Cloud コンソールでプロジェクトの課金を有効にします。
billingTierLimitExceeded 400 このエラーは、オンデマンド ジョブの statistics.query.billingTier の値が 100 を超えると返されます。これは、スキャンされたデータの量と比べてオンデマンド クエリが使用する CPU が多すぎる場合に発生します。ジョブの詳細を調べる方法については、ジョブの管理をご覧ください。 このエラーは多くの場合、厳密でない結合条件などにより、非効率なクロス結合が明示的または暗黙的に実行されたことが原因で発生します。この種のクエリはリソースの消費量が多いため、オンデマンド料金の使用には適していません。また、適切にスケーリングされない可能性があります。このエラーを解決するには、クエリを最適化するか、容量ベース(スロット)料金モデルに切り替えます。クエリの最適化については、SQL アンチパターンの回避をご覧ください。
blocked 403 このエラーは、実行しようとしたオペレーションが BigQuery で一時的に拒否リストに追加されているとき(通常、サービスの停止を防ぐためなどに行われます)に返されます。 詳細をサポートにお問い合わせください。
duplicate 409 すでに存在するジョブ、データセット、テーブルを作成しようとしたときに返されます。また、ジョブの writeDisposition プロパティが WRITE_EMPTY に設定されていて、ジョブがアクセスする書き込み先のテーブルがすでに存在するときにも返されます。 作成しようとしているリソースの名前を変更するか、ジョブの writeDisposition 値を変更します。
internalError 500 BigQuery で内部エラーが発生したときに返されます。 BigQuery サービスレベル契約に記載されているバックオフ要件に沿って待機した後、オペレーションを再試行してください。エラーが続く場合は、サポートに問い合わせるか、BigQuery Issue Tracker を使用してバグを報告してください。また、予約を使用することでこのエラーの頻度を低減できます。
invalid 400 このエラーは、無効なクエリ以外のなんらかの無効な入力(必須フィールドの欠落、無効なテーブル スキーマなど)があると返されます。無効なクエリは invalidQuery エラーを返します。
invalidQuery 400 このエラーは、無効なクエリを実行しようとしたときに返されます。 クエリに構文エラーがないか確認してください。クエリ リファレンスに、有効なクエリの作成方法についての説明と例があります。
invalidUser 400 無効なユーザー認証情報でクエリをスケジュールしようとしたときに返されます。 クエリのスケジューリングの説明に従ってユーザー認証情報を更新してください。
jobBackendError 400 このエラーは、ジョブが正常に作成されたものの、内部エラーで失敗したときに返されます。このエラーは、jobs.query または jobs.getQueryResults で表示される場合があります。 新しい jobId でジョブを再試行します。エラーが引き続き発生する場合は、サポートにお問い合わせください。
jobInternalError 400 このエラーは、ジョブが正常に作成されたものの、内部エラーで失敗したときに返されます。このエラーは、jobs.query または jobs.getQueryResults で表示される場合があります。 新しい jobId でジョブを再試行します。エラーが引き続き発生する場合は、サポートにお問い合わせください。
jobRateLimitExceeded 400 このエラーは、ジョブが正常に作成されたものの、rateLimitExceeded エラーで失敗したときに返されます。このエラーは、jobs.query または jobs.getQueryResults で表示される場合があります。 指数バックオフを使用してリクエスト レートを減らし、新しい jobId でジョブを再試行します。
notFound 404 このエラーは、存在しないリソース(データセット、テーブル、またはジョブ)を参照した場合、またはリクエストのロケーションがリソースのロケーション(たとえば、ジョブが実行されているロケーション)と一致しない場合に返されます。また、最近ストリーミングされて削除されたテーブルをテーブル デコレータで参照する場合にも発生することがあります。 リソース名を修正するか、正しいロケーションを指定してください。または、ストリーミング後 6 時間以上経過してから、削除されたテーブルのクエリを実行してください。
notImplemented 501 このジョブエラーは、実装されていない機能にアクセスしようとしたときに返されます。 詳細をサポートにお問い合わせください。
proxyAuthenticationRequired 407 このエラーは、リクエストにプロキシ サーバーの有効な認証情報がない場合に、クライアント環境とプロキシ サーバー間で返されます。詳細については、407 プロキシ認証が必要ですをご覧ください。 トラブルシューティングは環境に固有です。Java で作業中にこのエラーが発生した場合は、等号の後に値を指定せずに jdk.http.auth.tunneling.disabledSchemes= プロパティと jdk.http.auth.proxying.disabledSchemes= プロパティの両方を設定していることを確認してください。
quotaExceeded 403 プロジェクトが BigQuery の割り当てまたはカスタム割り当てを超過したか、課金の設定なしでクエリの無料枠を超過したときに返されます。 超過した割り当ての詳細をエラー オブジェクトの message プロパティで確認します。BigQuery の割り当てをリセットしたり増やしたりするには、サポートにお問い合わせください。カスタム割り当てを変更するには、Google Cloud コンソールからリクエストを送信します。このエラーが BigQuery サンドボックスの使用時に発生した場合は、サンドボックスからアップグレードできます。

詳細については、BigQuery 割り当てエラーのトラブルシューティングをご覧ください。

rateLimitExceeded 403 プロジェクトで多数のリクエストを短時間で送信して、短期のレート上限を超過した場合にこのエラーが返されます。たとえば、クエリジョブのレート制限API リクエストのレート制限をご覧ください。 リクエストのレートを下げます。

プロジェクトがどの制限も超過していないと思われる場合は、サポートにお問い合わせください。

詳細については、BigQuery 割り当てエラーのトラブルシューティングをご覧ください。

resourceInUse 400 テーブルを含むデータセットを削除しようとしたとき、または現在実行中のジョブを削除しようとしたときに返されます。 データセットを空にしてから削除するか、ジョブが完了するのを待ってから削除します。
resourcesExceeded 400 このエラーは、ジョブで使用するリソースの数が多すぎるときに返されます。 このエラーは、ジョブで使用するリソースの数が多すぎるときに返されます。トラブルシューティング情報については、リソース超過エラーのトラブルシューティングをご覧ください。
responseTooLarge 403 クエリの結果が最大レスポンス サイズよりも大きいときに返されます。クエリによっては複数のステージで実行されますが、このエラーは、いずれかのステージで返されるレスポンス サイズが大きすぎるときに返されます(最終的な結果が最大レスポンス サイズより小さい場合でもエラーとなります)。このエラーは、クエリで ORDER BY 句を使用しているときによく返されます。 LIMIT 句を追加するとエラーが解消されることがあります。または ORDER BY 句を削除します。サイズの大きい結果を返せるようにする場合は、allowLargeResults プロパティを true に設定し、宛先テーブルを指定します。詳細については、サイズの大きいクエリ結果の書き込みをご覧ください。
stopped 200 このステータス コードは、ジョブがキャンセルされた場合に返されます。
tableUnavailable 400 一部の BigQuery テーブルでは、他の Google プロダクトチームによって管理されているデータが使用されます。このエラーは、そのようなテーブルのいずれか 1 つが使用不可であることを示します。 このエラー メッセージが出た場合は、リクエストを再試行する(internalError のトラブルシューティング ヒントを参照)か、データへのアクセス権を付与した Google プロダクト チームに問い合わせてください。
timeout 400 ジョブがタイムアウトしました。 操作によって実行される作業量を減らし、設定された制限内に収まるようにしてください。割り当てと上限をご覧ください。

エラー レスポンスの例

GET https://bigquery.googleapis.com/bigquery/v2/projects/12345/datasets/foo
Response:
[404]
{
  "error": {
  "errors": [
  {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found: Dataset myproject:foo"
  }],
  "code": 404,
  "message": "Not Found: Dataset myproject:foo"
  }
}

認証エラー

OAuth トークン生成システムによってスローされたエラーは、次の JSON オブジェクトを返します。これは OAuth2 仕様で定義されています。

{"error" : "description_string"}

このエラーは HTTP 400 Bad Request エラーまたは HTTP 401 Unauthorized エラーを伴います。description_string は OAuth2 仕様で定義されたいずれかのエラーコードです。次に例を示します。

{"error":"invalid_client"}

エラーを確認する

ログ エクスプローラを使用すると、特定のジョブ、ユーザー、その他のスコープの認証エラーを表示できます。認証エラーを確認するために使用できるログ エクスプローラのフィルタの例をいくつか示します。

ポリシー拒否監査ログで、権限の問題がある失敗したジョブを検索します。
    resource.type="bigquery_resource"
    protoPayload.status.message=~"Access Denied"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
  
認証に使用されている特定のユーザーまたはサービス アカウントを検索します。
    resource.type="bigquery_resource"
    protoPayload.authenticationInfo.principalEmail="EMAIL"
  

EMAIL は、ユーザーまたはサービス アカウントのメールアドレスに置き換えます。

管理アクティビティ監査ログで IAM ポリシーの変更を検索します。
    protoPayload.methodName=~"SetIamPolicy"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
  
データアクセス監査ログで、特定の BigQuery データセットに対する変更を検索します。
    resource.type="bigquery_resource"
    protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID"
    logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
  

次のように置き換えます。

  • PROJECT_ID: リソースを含むプロジェクトの ID。
  • DATASET_ID: リソースを含むデータセットの ID。

接続エラー メッセージ

次の表に、クライアント ライブラリの使用時や、コードから BigQuery API を呼び出したときに、断続的な接続の問題が原因で表示される可能性のあるエラー メッセージを示します。

エラー メッセージ クライアント ライブラリまたは API トラブルシューティング
com.google.cloud.bigquery.BigQueryException: 読み取りがタイムアウトしました Java タイムアウト値を大きくして設定します。
接続がシャットダウンされました: javax.net.ssl.SSLException: java.net.SocketException: com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115) で接続がリセットされました Java 再試行メカニズムを実装し、タイムアウト値を大きくして設定します。
javax.net.ssl.SSLHandshakeException: リモートホストがハンドシェイクを終了しました Java 再試行メカニズムを実装し、タイムアウト値を大きくして設定します。
接続が中断されました。RemoteDisconnected('リモートエンドが応答なしで接続を閉じました' Python タイムアウト値を大きくして設定します。
SSLEOFError(プロトコルに違反して EOF が発生した) Python このエラーは、413(ENTITY_TOO_LARGE)HTTP エラーの代わりに返されます。リクエストのサイズを小さくします。
TaskCanceledException: タスクがキャンセルされました .NET ライブラリ クライアント側のタイムアウト値を大きくします。

Google Cloud コンソールのエラー メッセージ

次の表に、Google Cloud コンソールで作業中に表示される可能性があるエラー メッセージを示します。

エラー メッセージ 説明 トラブルシューティング
サーバーから不明なエラー レスポンスが返されました。 このエラーは、Google Cloud コンソールがサーバーから不明なエラーを受け取った場合に発生します。たとえば、データセットや他のタイプのリンクをクリックしてもページが表示されない場合に発生します。 ブラウザのシークレット モード(非公開モード)に切り替えて、エラーの原因となった操作を繰り返してください。シークレット モードでエラーが発生しない場合は、広告ブロッカーなどのブラウザ拡張機能が原因である可能性があります。通常モードでブラウザの拡張機能を無効にして、問題が解決するかどうか確認してください。