BigQuery: 403 превышен предел скорости пользователя, но ошибка не отображается в списке заданий

Я получаю 403 User Rate Limit Exceeded, ошибка при выполнении запросов, но я уверен, что не превышаю. В прошлом я достиг предела скорости выполнения вставок, и это было отражено в списке заданий как

[errorResult] => Массив ([причина] => rateLimitExceeded [message] => Превышены пределы скорости: слишком много импорта для этого проекта)

Но в этом случае список заданий не отражает запрос (ни ошибки, ни выполненные), и при изучении списка заданий я не достиг пределов или был близок к его достижению (не более 4 одновременных запросов и каждый обработка 692297 байт)

У меня активен биллинг, и я сделал всего 2,5 тыс. Запросов за последние 28 дней.

Изменить: ограничение пользователя установлено до 500,0 запросов в секунду на пользователя.

Изменить: получен код ошибки

User Rate Limit Exceeded

Превышен предел скорости пользователя

Ошибка 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;

}

Есть ли другие ограничения скорости? или это баг?

Спасибо!


person Iñaki Soria    schedule 31.08.2012    source источник
comment
Я исправил это, используя только один клиент, это объясняется в ответе   -  person Iñaki Soria    schedule 25.09.2012


Ответы (3)


Вы получаете эту ошибку, пытаясь импортировать файлы 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 
person Charles    schedule 31.08.2012
comment
Я получаю ошибку 403 в задании запроса, я вставляю ошибку импорта, чтобы сказать, что я не получаю ошибок в списке заданий, а также запрос не указан как выполненный. Это действительно экстраендж, потому что это случается только несколько раз, и я не могу найти способ воспроизвести его. - person Iñaki Soria; 31.08.2012

Фактически, вызов query () ограничен 20-кратным числом одновременных операций. Ограничение 500 запросов в секунду на пользователя в консоли разработчика несколько вводит в заблуждение - это просто общее количество вызовов (get, list и т. Д.), Которые могут быть сделаны.

Вы хотите сказать, что ваш запрос немедленно завершается ошибкой и никогда не отображается в списке вакансий?

У вас есть полная ошибка, которая возвращается? Т.е. содержит ли сообщение 403 дополнительную информацию? Благодарность

person Jordan Tigani    schedule 31.08.2012
comment
Привет, Джордан, идентификатор проекта - minube-stats. Я опрашиваю каждые 5-10 секунд (rand (5,10). - person Iñaki Soria; 03.09.2012
comment
На самом деле мы находимся в середине довольно серьезного пересмотра наших квот на загрузку, чтобы упростить перенос данных в BigQuery. В настоящее время для загрузок мы проверяем квоты перед созданием задания, поэтому вы не получите задание с ошибкой, вы просто получите результат с ошибкой. Существует краткосрочный лимит скорости в 4 задания за 2 минуты, с которыми вы, вероятно, столкнетесь (включая сбои). - person Jordan Tigani; 08.09.2012
comment
Привет, Джордан, я обновил свой вопрос, включив в него код, который я использую для выполнения запросов. Я думал, что задания типа bigquery # queryRequest не имеют ограничения заданий (только ограничение запросов в секунду на пользователя, установленное в консоли Google). Я ошибаюсь? Спасибо. - person Iñaki Soria; 10.09.2012

Я решил проблему, используя только один сервер для отправки запросов.

Глядя на то, что я делал по-другому в ночных cronjobs (которые никогда не выходят из строя), единственная разница заключалась в том, что я использовал только одного клиента на одном сервере вместо использования разных клиентов на 4 разных серверах.

Теперь у меня есть только один сценарий на одном сервере, который обрабатывает такое же количество запросов, и теперь он никогда не получает ошибку превышения лимита скорости пользователя.

Я думаю, что есть ошибка, управляющая множеством клиентов или множеством активных IP-адресов одновременно, хотя общее количество потоков никогда не превышает 20.

person Iñaki Soria    schedule 25.09.2012