エラー メッセージ

このドキュメントでは、HTTP エラーコード、ジョブエラー、Google Cloud Console エラー メッセージなど、BigQuery の使用時に発生するさまざまなエラー メッセージについて説明します。ジョブエラーは、jobs.get を呼び出したときに status オブジェクト内に示されます。

エラーの表

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

  • errors オブジェクト。これには、ErrorProto オブジェクトの配列が含まれます。
  • errorResults オブジェクト。これには、単一の ErrorProto オブジェクトが含まれます。

次の表のエラーコード列は、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>

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

jobs.get 呼び出し

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

jobs.insert 呼び出し

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

billingNotEnabled 403 プロジェクトで課金が有効になっていないときに返されます。 Google Cloud Console でプロジェクトの課金を有効にします。
billingTierLimitExceeded 400 このエラーは、オンデマンド ジョブの statistics.query.billingTier の値が 100 を超えたときに返されます。これは、オンデマンド クエリでスキャンされるデータの量と比較して CPU の使用量が多すぎる場合に発生します。ジョブの統計情報を調べる方法については、ジョブの管理をご覧ください。 このエラーは、ほとんどの場合、結合条件が不適切などの理由から、明示的または暗黙的に非効率的なクロス結合を実行した結果として発生します。これらのタイプのクエリは、リソース消費量が多いため、オンデマンドの料金設定には適しておらず、一般的にスケーリングができない場合があります。このエラーを解決するには、クエリを最適化するか、定額料金を使用します。クエリの最適化については、SQL アンチパターンの回避をご覧ください。
blocked 403 実行しようとしたオペレーションを BigQuery が一時的に拒否しているときにこのエラーが返されます。これは通常、サービス停止を防ぐために行われます。このエラーが発生することはほとんどありません。 詳細をサポートにお問い合わせください。
duplicate 409 すでに存在するジョブ、データセット、テーブルを作成しようとしたときに返されます。また、ジョブの writeDisposition プロパティが WRITE_EMPTY に設定されていて、ジョブがアクセスする書き込み先のテーブルがすでに存在するときにも返されます。 作成しようとしているリソースの名前を変更するか、ジョブの writeDisposition 値を変更します。
internalError 500 BigQuery 内で内部エラーが発生したときに返されます。 BigQuery サービスレベル契約に記載されているバックオフ要件に従い、操作をやり直してください。エラーが続く場合は、サポートに問い合わせるか、BigQuery 公開バグトラッカーを使用してバグを報告してください予約を使用すると、このエラーの頻度を低減することもできます。
invalid 400 このエラーは、無効なクエリ以外のなんらかの種類の無効な入力(必須フィールドの不足、無効なテーブル スキーマなど)があると返されます。無効なクエリの場合には invalidQuery エラーが返されます。
invalidQuery 400 無効なクエリを実行しようとしたときに返されます。 クエリに構文エラーがないか、もう一度確認してください。クエリ リファレンスに、有効なクエリの作成方法についての説明と例があります。
invalidUser 400 無効なユーザー認証情報でクエリをスケジュールしようとしたときに返されます。 クエリのスケジューリングの説明に従ってユーザー認証情報を更新してください。
jobBackendError 400 ジョブは正常に作成されたものの、内部エラーで失敗したときにこのエラーが返されます。このエラーは、jobs.query または jobs.getQueryResults で表示される場合があります。 新しい jobId を使用してジョブを再試行します。エラーが続く場合は、サポートにお問い合わせください。
jobInternalError 400 ジョブは正常に作成されたものの、内部エラーで失敗したときにこのエラーが返されます。このエラーは、jobs.query または jobs.getQueryResults で表示される場合があります。 新しい jobId を使用してジョブを再試行します。エラーが続く場合は、サポートにお問い合わせください。
notFound 404 存在しないリソース(データセット、テーブル、またはジョブ)を参照したときに返されます。また、最近ストリーミングされて削除されたテーブルをテーブル デコレータで参照する場合にも発生することがあります。 リソース名を修正するか、ストリーミング後に少なくとも 6 時間待ってから、削除されたテーブルを照会してください。
notImplemented 501 このジョブエラーは、実装されていない機能にアクセスしようとしたときに返されます。 詳細をサポートにお問い合わせください。
quotaExceeded 403 プロジェクトが BigQuery の割り当てまたはカスタム割り当てを超過したか、課金の設定なしでクエリの無料枠を超過したときに返されます。 超過した割り当ての詳細をエラー オブジェクトの message プロパティで確認します。BigQuery の割り当てをリセットしたり増やしたりするには、サポートにお問い合わせください。カスタム割り当てを変更するには、Google Cloud Console ページからリクエストを送信します。BigQuery サンドボックスを使用しているときにこのエラーが発生した場合は、アップグレードできます。

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

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

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

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

resourceInUse 400 テーブルを含むデータセットを削除しようとしたとき、または現在実行中のジョブを削除しようとしたときに返されます。 データセットを空にしてから削除するか、ジョブが完了するのを待ってから削除します。
resourcesExceeded 400 クエリで使用するリソースの数が多すぎるときに返されます。
  • クエリを小さく分割してみます。
  • ORDER BY 句を削除します。
  • クエリで JOIN を使用している場合は、サイズが大きいほうのテーブルを句の左側に指定します。
  • クエリで FLATTEN を使用している場合は、そのユースケースでこれが必要かどうかを判断します。詳しくはネストされたデータと繰り返しデータについての記事をご覧ください。
  • クエリで EXACT_COUNT_DISTINCT を使用している場合は、代わりに COUNT(DISTINCT) の使用を検討します。
  • クエリで使用している COUNT(DISTINCT <value>, <n>)<n> 値が大きい場合は、代わりに GROUP BY の使用を検討します。詳しくは COUNT(DISTINCT) についての説明をご覧ください。
  • クエリで UNIQUE を使用している場合は、代わりに GROUP BY を使用するか、サブセレクト内でウィンドウ関数を使用することを検討します。
  • LIMIT 句を使用して、クエリによって多くの行を実体化している場合は、別の列(ROW_NUMBER() など)でフィルタリングするか、LIMIT 句全体を削除して書き込みの並列化を可能にすることを検討してください。
responseTooLarge 403 クエリの結果が最大レスポンス サイズよりも大きいときに返されます。クエリによっては複数のステージで実行されますが、このエラーは、いずれかのステージで返されるレスポンス サイズが大きすぎるときに返されます(最終的な結果が最大レスポンス サイズより小さい場合でもエラーとなります)。このエラーは、クエリで ORDER BY 句を使用しているときによく返されます。 LIMIT 句を追加するとエラーが解消されることがあります。または ORDER BY 句を削除します。サイズの大きな結果を返すことを可能にする場合は、allowLargeResults プロパティを true に設定し、書き込み先テーブルを指定します。詳細については、サイズの大きいクエリ結果を書き込むをご覧ください。
停止 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"}

トップへ戻る

ストリーミング挿入に関するトラブルシューティング

以下のセクションでは、BigQuery にデータをストリーミングする際に発生したエラーの解決方法について説明します。 ストリーミング挿入の割り当てエラーを解決する方法について詳しくは、ストリーミング挿入の割り当てエラーをご覧ください。

失敗 HTTP レスポンス コード

ネットワーク エラーなどの失敗 HTTP レスポンス コードが返された場合、ストリーミング挿入が成功したかどうかを確認する方法はありません。リクエストを単に再送信しようとすると、テーブル内に重複行が発生する可能性があります。テーブルを重複から保護するには、リクエストの送信時に insertId プロパティを設定します。insertId プロパティは BigQuery によって重複排除に使用されます。

権限エラー、無効なテーブル名エラー、または割り当て超過エラーが返された場合、行は挿入されず、リクエスト全体が失敗します。

成功 HTTP レスポンス コード

成功 HTTP レスポンス コードが返された場合でも、BigQuery による行の挿入が部分的にしか成功しなかった可能性があるため、レスポンスの insertErrors プロパティをチェックして、行の挿入が成功したかどうかを確認する必要があります。次のシナリオのいずれかが発生することがあります。

  • すべての行が正常に挿入されました。insertErrors プロパティが空のリストになっている場合は、すべての行が正常に挿入されています。
  • 一部の行が正常に挿入されました。いずれかの行にスキーマの不一致がある場合を除き、insertErrors プロパティで示された行が挿入されておらず、その他すべての行は正常に挿入されています。errors プロパティには、行の挿入が失敗した理由に関する詳細情報が含まれます。index プロパティは、エラーに該当するリクエストの 0 ベースの行インデックスを示します。
  • 正常に挿入された行はありません。 BigQuery がリクエスト内で個別行のスキーマ不一致に遭遇した場合は、いずれの行も挿入されず、スキーマ不一致がなかった行も含めて、各行の insertErrors エントリが返されます。スキーマ不一致がなかった行は、エラーの reason プロパティが stopped に設定され、そのまま再送信できます。失敗した行には、スキーマ不一致に関する詳細情報が含まれます。各 BigQuery データ型でサポートされるプロトコル バッファタイプについては、データ型の変換をご覧ください。

ストリーミング挿入のメタデータ エラー

BigQuery のストリーミング API はインサート率が高くなるように設計されているため、ストリーミング システムを操作する際、基盤となるテーブルのメタデータの変更は結果整合が保たれます。ほとんどの場合、メタデータの変更は数分以内にプロパゲートされますが、その間は API レスポンスで、対象テーブルの不整合な状態が反映されることがあります。

次のようなシナリオがあります。

  • スキーマの変更。スキーマの変更がストリーミング システムにすぐに反映されない場合があるため、ストリーミング挿入を最近受け取ったテーブルのスキーマを変更すると、スキーマの不一致エラーが発生することがあります。
  • テーブルの作成 / 削除。存在しないテーブルへのストリーミングによって、notFound レスポンスのバリエーションが返されます。レスポンスで作成されたテーブルは、後続のストリーミング挿入ですぐには認識されない可能性があります。同様に、テーブルを削除または、再作成すると、古いテーブルにストリーミング挿入が実質的に配信される期間が生じることがあります。このストリーミング挿入は新しいテーブルには存在しない可能性があります。
  • テーブルの切り捨て - (WRITE_TRUNCATE の writeDisposition を使用するクエリジョブによって)テーブルのデータを切り捨てる場合も同様に、整合性期間中の後続の挿入が破棄されることがあります。

欠損 / 利用不可能なデータ

ストリーミング インサートは一時的に書き込み最適化ストレージに存在します。このストレージは、マネージド ストレージとは異なる可用性の特性を持ちます。BigQuery でのテーブルコピーのジョブや tabledata.list のような API メソッドなどの一部のオペレーションでは、書き込み最適化ストレージとやり取りしません。最新のストリーミング データが宛先テーブルまたは出力に存在しません。

トップへ戻る

Google Cloud Console のエラー メッセージ

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

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

トップへ戻る