2

クエリを作成するときに 403 User Rate Limit Exceeded エラーを受け取りましたが、超えていないことは確かです。過去に挿入でレートリミットに達したことがあり、ジョブリストに次のように反映されていました。

[errorResult] => Array ( [reason] => rateLimitExceeded [message] => レート制限を超えました: このプロジェクトのインポートが多すぎます)

しかし、この場合、ジョブリストはクエリを反映しておらず (エラーや完了もありません)、ジョブリストを調べても限界に達していないか、限界に近づいていました (同時クエリは 4 つ以下で、それぞれ処理中 692297 バイト)

私は請求を有効にしており、過去 28 日間で 2.5K のクエリしか作成していません。

編集:ユーザー制限は最大500.0リクエスト/秒/ユーザーに設定されています

編集:エラーコードを受け取りました

ユーザーレート制限を超えました

ユーザーレート制限を超えました

エラー 403

編集:クエリジョブを作成して結果を取得するために使用するコード

function query_data($project,$dataset,$query,$jobid=null){


    $jobc = new JobConfigurationQuery();
    $query_object = new QueryRequest();
    $dataset_object = new DatasetReference();
    $dataset_object->setProjectId($project);
    $dataset_object->setDatasetId($dataset);
    $query_object->setQuery($query);
    $query_object->setDefaultDataset($dataset_object);
    $query_object->setMaxResults(16000);
    $query_object->setKind('bigquery#queryRequest');
    $query_object->setTimeoutMs(0);
    $ok = false;
    $sleep = 1;
    while(!$ok){
        try{
            $response_data = $this->bq->jobs->query($project, $query_object);
            $ok = true;
        }catch(Exception $e){ //sleep when BQ API not avaible

            sleep($sleep);
            $sleep += rand(0,60);
        }
    }
    try{
        $response = $this->bq->jobs->getQueryResults($project, $response_data['jobReference']['jobId']);
    }catch(Exception $e){
        //do nothing, se repite solo
    }

    $tries = 0;
    while(!$response['jobComplete']&&$tries<10){
        sleep(rand(5,10));
        try{
            $response = $this->bq->jobs->getQueryResults($project, $response_data['jobReference']['jobId']);
        }catch(Exception $e){
            //do nothing, se repite solo
        }
        $tries++;
    }

    $result=array();
    foreach($response['rows'] as $k => $row){
        $tmp_row=array();
        foreach($row['f'] as $field => $value){
            $tmp_row[$response['schema']['fields'][$field]['name']] = $value['v'];
        }
        $result[]=$tmp_row;
        unset($response['rows'][$k]);
    }


    return $result;

}

他のレート制限はありますか? それともバグですか?

ありがとう!

4

3 に答える 3

0

1台のサーバーのみを使用してリクエストを行うことで問題を解決しました。

私が夜のcronジョブで何をしていたか(失敗することはありません)を見ると、唯一の違いは、4つの異なるサーバーで異なるクライアントを使用するのではなく、1つのサーバーで1つのクライアントのみを使用していたことです。

これで、同じ数のクエリを管理するスクリプトが1つのサーバーに1つだけあり、User RateLimitExcededエラーが発生することはありません。

スレッドの総数が20を超えることはありませんが、一度に多くのクライアントまたは多くのアクティブなIPを管理するバグがあると思います。

于 2012-09-25T13:33:51.933 に答える
0

実際、query() 呼び出しは、20 の同時実行制限によって制限されています。開発者コンソールの 500 リクエスト/秒/ユーザー制限は、やや誤解を招く可能性があります。これは、実行できる呼び出し (get、list など) の合計数にすぎません。

クエリがすぐに失敗し、ジョブ リストに表示されないということですか?

返されている完全なエラーがありますか? つまり、403 メッセージには追加情報が含まれていますか? ありがとう

于 2012-08-31T15:06:06.053 に答える
0

CSV ファイルをインポートしようとすると、このエラーが発生しますよね?

次のいずれかの理由が考えられます。

Import Requests

Rate limit: 2 imports per minute
Daily limit: 1,000 import requests per day (including failures)
Maximum number of files to import per request: 500
Maximum import size per file: 4GB2
Maximum import size per job: 100GB2 
于 2012-08-31T11:44:17.787 に答える