2

我收到 403 User Rate Limit Exceeded 错误进行查询,但我确定我没有超过。在过去,我已经达到了插入的速率限制,它在工作列表中反映为

[errorResult] => Array ([reason] => rateLimitExceeded [message] => Exceeded rate limits: too many imports for this project )

但在这种情况下,作业列表不反映查询(也没有错误或完成),并且研究作业列表我没有达到限制或接近达到限制(不超过 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

您在尝试导入 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 回答
0

query() 调用实际上受到 20 个并发限制的限制。开发者控制台中 500 个请求/秒/用户的限制有点误导——这只是可以进行的总调用(get、list 等)的数量。

您是说您的查询立即失败并且从未出现在工作列表中吗?

您是否有返回的完整错误?即 403 消息是否包含任何附加信息?谢谢

于 2012-08-31T15:06:06.053 回答
0

我通过仅使用一台服务器发出请求解决了这个问题。

看看我在夜间 cronjobs 中所做的不同(永不失败),唯一的区别是我在一台服务器上只使用一个客户端,而不是在 4 个不同的服务器上使用不同的客户端。

现在我在一台服务器中只有一个脚本管理相同数量的查询,现在它永远不会出现用户速率限制超出错误。

我认为一次管理多个客户端或多个活动 IP 存在错误,尽管线程总数从未超过 20。

于 2012-09-25T13:33:51.933 回答