Почему я получаю сообщение «Превышена квота для группы квот AnalyticsDefaultGroup» и ограничиваю ошибки «USER-100s»? - PullRequest
1 голос
/ 16 октября 2019

В настоящее время я управляю двумя учетными записями управления Google Analytics со многими клиентами и view_ids на каждом. Задача состоит в том, чтобы запрашивать данные клиента через API отчетов Google Analytics (v4) и ежедневно сохранять их в бэкэнде SQL через DAG-структуру Airflow.

Для первого аккаунта все работает нормально. Совсем недавно я добавил второй аккаунт в процедуру запроса данных. Проблема в том, что, хотя для обеих учетных записей установлены одинаковые ограничения квоты «USER-100», я получаю эту ошибку для новой добавленной учетной записи:

googleapiclient.errors.HttpError: <HttpError 429 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "Quota exceeded for quota group 'AnalyticsDefaultGroup' and limit 'USER-100s' of service 'analyticsreporting.googleapis.com' for consumer 'project_number:XXXXXXXXXXXX'.">

Я уже установилограничение квоты "User-100s" от 100 до 1000, как рекомендовано в официальных рекомендациях Google (https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas)

. Также я проверил консоль Google API и количество запросов на номер моего проекта,но до сих пор я никогда не превышал 1000 запросов в 100 секунд (см. учетную запись истории запросов 2), в то время как первая учетная запись всегда работает (см. учетную запись истории запросов 1). Тем не менее появилась вышеупомянутая ошибка.

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

учетная запись истории запросов 1

учетная запись истории запросов 2

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

success = False
data = None
while not success:
    try:
        data = query_data() # trying to receive data from the API
        if data:
            success = True
    except HttpError as e:
        print(e)

Это совсем не элегантно и плохо для маиnisting (как интеграционные тесты). Кроме того, это очень много времени и ресурсов, потому что цикл может иногда выполняться бесконечно. Это может быть только обходной путь на короткое время.

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

Если вы знаете какое-либо решение для этого, я был бы очень рад узнать.

Приветствия Тоби

...