BigQuery:403用户速率限制超出但是错误未显示在作业列表中

时间:2012-08-31 08:53:57

标签: google-api google-bigquery

我正在回忆403超出用户速率限制错误,但是我确定我没有超越。 在过去,我已经达到了插入速率限制,并且在作业列表中反映为

  

[errorResult] =>排列                           (                               [reason] =>超过限速                               [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;

}

还有其他费率限制吗?或者这是一个错误?

谢谢!

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

query()调用实际上受限于20个并发限制。开发者控制台中的500个请求/秒/用户限制有些误导 - 这只是可以进行的总呼叫数量(获取,列表等)。

您是说您的查询立即失败并且从未显示在作业列表中?

您是否有正在返回的完整错误?即403消息是否包含任何其他信息? 感谢

答案 2 :(得分:0)

我通过只使用一台服务器来发出请求来解决问题。

看看我在夜晚的cronjobs(从未失败过)做出的不同之处唯一的区别是我在一台服务器中只使用一个客户端,而不是在4台不同的服务器中使用不同的客户端。

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

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