Используйте фильтры по группам в пакетных заданиях.

При работе с фильтрами групп объявлений в контексте AdGroupCriterion.listing_group или AssetGroupListingGroupFilter , при проектировании интеграции следует учитывать следующие моменты.

Разделение на партии

Если в пакетном задании есть операции, содержащие критерии для групп объявлений или фильтры для групп активов, то при получении сервером Google Ads API эти операции разбиваются на несколько подпакетов . В отличие от стандартных операций в пакетном задании, каждый подпакет, содержащий операции с фильтрами групп объявлений, обрабатывается атомарно.

Способ разделения пакетных заданий, содержащих фильтры групп, на подпакеты определяется следующими факторами:

  1. Тип фильтра группы объявлений
  2. Группа AdGroup или AssetGroup на которую нацелен фильтр группы объявлений.
  3. Порядок действий

Рассмотрим, как сгруппированы операции:

  • Все последовательные операции AssetGroupListingGroupFilterOperation ( create , update и remove ), нацеленные на одну и ту же AssetGroup группируются в атомарный подпакет (отсутствует частичное прерывание).
  • Все последовательные операции AdGroupCriterionOperation ( create , update и remove ) для критериев LISTING_GROUP ( AdGroupCriterion.listing_group ), нацеленные на одну и ту же AdGroup , группируются в атомарный подпакет (отсутствует частичное поведение, приводящее к сбою).
  • Все остальные последовательные операции группируются в неатомарные подгруппы (поведение, характеризующееся частичным отказом).

Следующая диаграмма иллюстрирует эту концепцию. Каждый из серых прямоугольников представляет собой пакетное задание, отправленное с использованием API Google Ads. Внутри серых прямоугольников отдельные операции сгруппированы по цвету, чтобы представить подпакеты, создаваемые сервером API Google Ads. Порядок операций в каждом из серых прямоугольников соответствует порядку, в котором операции были бы добавлены в пакетное задание.

Диаграмма, показывающая пакетные операции, сгруппированные в подпакеты.

Ограничения

При работе с фильтрами групп в контексте пакетных заданий действуют следующие ограничения:

  • Один атомарный подпакет последовательных операций AdGroupCriterionOperation ( create , update и remove ) для критериев LISTING_GROUP ( AdGroupCriterion.listing_group ), нацеленных на одну и ту же AdGroup , не может превышать 20 000 операций. Однако рекомендуется не превышать 10 000 операций. Поскольку каждый AddBatchJobOperationsRequest ограничен 10 000 операциями, подпакет AdGroup от 10 001 до 20 000 операций должен быть загружен как минимум в двух последовательных запросах AddBatchJobOperations .
  • Количество последовательных атомарных подпакетов операций AssetGroupListingGroupFilterOperation ( create , update и remove ), нацеленных на одну и ту же AssetGroup не может превышать 10 000 операций.
  • Нарушение любого из этих ограничений по количеству операций (или превышение внутреннего ограничения сервера на размер сериализованных байтов для одного подпакета) приводит к прерыванию пакетного задания на этом подпакете: все более ранние подпакеты, которые уже завершились, остаются зафиксированными, в то время как все операции в проблемном подпакете и любых последующих подпакетах завершаются с InternalError.INTERNAL_ERROR .

Поиск неисправностей

Операции фильтрации по группам в пакетном задании обрабатываются как одна транзакция, что может привести к ситуациям, когда множество операций завершаются с ошибкой из-за небольшого количества ошибочных операций. Кроме того, из-за особенностей обработки операций BatchJob , первопричина сбоев может находиться в индексе до или после последующих сбоев.

Например, при обработке ответа от ListBatchJobResults :

Эти ошибки указывают на то, что операция по этому индексу была отменена из-за сбоя другой операции в том же атомарном подпакете. Чтобы определить первопричину проблемы, пройдитесь по сообщениям status в каждом BatchJobResult — до и после operation_index ошибки транзакции — для операций, имеющих одинаковый идентификатор AdGroup или AssetGroup .