我正在回忆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;
}
还有其他费率限制吗?或者这是一个错误?
谢谢!
答案 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个。