Tieni in considerazione queste linee guida quando utilizzi BatchJobService.
Migliorare il throughput
È preferibile un numero ridotto di job più grandi rispetto a molti job più piccoli.
Ordina le operazioni caricate per tipo di operazione (ad eccezione delle operazioni interdipendenti che devono essere raggruppate consecutivamente in sub-batch atomici). Ad esempio, se il tuo lavoro contiene operazioni per aggiungere campagne standard, gruppi di annunci e criteri dei gruppi di annunci, ordina le operazioni nel caricamento in modo che tutte le operazioni della campagna vengano eseguite per prime, seguite da tutte le operazioni del gruppo di annunci e infine da tutte le operazioni dei criteri del gruppo di annunci.
All'interno di operazioni dello stesso tipo, può migliorare il rendimento raggruppandole per risorsa padre. Ad esempio, se hai una serie di oggetti
AdGroupCriterionOperation, è più efficiente raggruppare le operazioni per gruppo di annunci anziché mescolare operazioni che influiscono sui criteri del gruppo di annunci in gruppi di annunci diversi.
Atomicità nella suddivisione dei batch
L'API Google Ads suddivide le operazioni in un job batch inviato in batch più piccoli per l'elaborazione. Mentre i batch secondari standard vengono eseguiti con l'attivazione dell'errore parziale, i batch secondari per determinate operazioni interdipendenti vengono elaborati in modo atomico come una singola transazione:
- Operazioni
AdGroupCriterionOperationconsecutive (create,updateeremove) per i criteriLISTING_GROUP(AdGroupCriterion.listing_group) che hanno come target lo stessoAdGroup(l'operazione non riesce conCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONse una qualsiasi operazione del gruppo non riesce). - Operazioni consecutive
AssetGroupListingGroupFilterOperation(create,updateeremove) che hanno come target lo stessoAssetGroup(non riesce conBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREse una qualsiasi operazione nel gruppo non riesce). - Un
AssetGroupOperation(create) immediatamente seguito da un massimo di 999 operazioniAssetGroupAssetOperation(create) che hanno come target lo stessoAssetGroup(l'operazione non riesce conBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREse una qualsiasi operazione nel gruppo non riesce). OgniAssetGroupOperation(updateoremove) viene eseguito in un proprio batch secondario autonomo a singola operazione. - Una campagna Performance Max
CampaignOperation(create) con le linee guida per il brand attivate (brand_guidelines_enabledimpostate sutrueo lasciate non impostate, poiché il valore predefinito ètruea meno che non sia impostato esplicitamente sufalseo non venga creata una campagna Performance Max per gli obiettivi di viaggio) immediatamente seguita da un massimo di 999 operazioniCampaignAssetOperation(create) che hanno come target lo stessoCampaign(l'operazione non va a buon fine conBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREse una qualsiasi operazione del gruppo non va a buon fine). Le campagne Performance Max per la vendita al dettaglio (con un feed Merchant Center) possono essere create senza collegare le risorseCampaignAssetdel brand nello stesso batch secondario atomico.
Per i sottogruppi di creazione di AssetGroup e Performance Max
Campaign (fino a 1000 operazioni totali per sottogruppo; le operazioni create secondarie oltre 999 vengono trasferite al sottogruppo non atomico successivo):
- L'operazione
createprincipale (resource_namesuAssetGroupoCampaign) e le relative operazionicreatesecondarie consecutive (asset_groupsuAssetGroupAssetocampaignsuCampaignAsset) devono specificare lo stesso ID temporaneo negativo. - Inserisci le operazioni di
AssetOperation(create) prerequisito per le nuove risorseAssetprima delAssetGroupOperationoCampaignOperation(create) padre, mai tra ilcreatepadre e le operazioni di collegamento figliocreate(che chiuderebbero immediatamente il batch secondario atomico e separerebbero la creazione della risorsa padre dalle risorse collegate).
Quando un batch secondario atomico non va a buon fine, il BatchJobResult.status dell'operazione che ha causato l'errore contiene l'errore di convalida sottostante, mentre le operazioni rimanenti nel batch secondario vengono eseguite con rollback con l'errore di transazione corrispondente per il batch secondario. Esamina le voci
adiacenti BatchJobResult che condividono lo stesso
ID AdGroup, AssetGroup o Campaign
per identificare l'errore di causa principale.
Se le operazioni correlate in uno di questi gruppi non vengono aggiunte consecutivamente, l'API Google Ads le suddivide in batch secondari separati, causando il mancato rispetto dei requisiti minimi delle risorse o lasciando incompleti gli alberi dei gruppi di schede. Per maggiori dettagli, consulta Utilizzare i filtri dei gruppi di schede nei job batch e Elaborazione batch di Performance Max.
Raggruppamento logico
Quando modifichi una gerarchia di targeting dei prodotti
(AssetGroupListingGroupFilterOperation nelle campagne
Performance Max o AdGroupCriterionOperation nelle
campagne Shopping) o crei un nuovo AssetGroup o
Campaign Performance Max, raggruppa tutte le operazioni di targeting della stessa
risorsa principale (AssetGroup, AdGroup o
Campaign) in sequenza. Ciò riduce la contesa dei blocchi di backend e
mantiene uniti gli alberi interdipendenti.
Coerenza dei dati
Poiché gli alberi dei filtri dei gruppi di schede e i requisiti degli asset Performance Max vengono convalidati alla fine di ogni transazione di sub-batch atomico, evita di dividere gli aggiornamenti alla stessa risorsa principale in intervalli discontinui in un job o in job simultanei.
Evitare problemi di concorrenza
Quando invii più job simultanei per lo stesso account, riduci la probabilità che i job operino sugli stessi oggetti contemporaneamente mantenendo dimensioni elevate dei job. Molti job non completati con lo stato
RUNNINGche tentano di modificare lo stesso insieme di oggetti possono portare a condizioni di deadlock, con conseguente rallentamento e persino errori del job.Non inviare più operazioni che modificano lo stesso oggetto nello stesso job, in quanto il risultato può essere imprevedibile.
Recuperare i risultati in modo ottimale
Non eseguire il polling dello stato del job troppo spesso, altrimenti rischi di raggiungere il limite di frequenza e ricevere errori.
Lascia
page_sizenon impostato (o impostalo sul valore massimo di1000) quando chiamiListBatchJobResultsper ridurre al minimo i round trip di paginazione e impostaresponse_content_typesolo suMUTABLE_RESOURCEse la tua applicazione ispeziona i campi delle risorse restituite oltreresource_name.L'ordine dei risultati è lo stesso dell'ordine di caricamento.
Indicazioni aggiuntive per l'utilizzo
Puoi impostare un limite superiore per la durata di esecuzione di un job batch prima che venga annullato. Quando crei un nuovo job batch, imposta il campo
metadata.execution_limit_secondssul limite di tempo che preferisci, in secondi. Semetadata.execution_limit_secondsnon è impostato, non è previsto un limite di tempo predefinito.Sebbene il limite del protocollo sia di 10.000 operazioni per richiesta, ti consigliamo di aggiungere non più di 1000 operazioni per
AddBatchJobOperationsRequeste di utilizzaresequence_tokenper caricare il resto delle operazioni nello stesso job. A seconda delle dimensioni delle operazioni, l'invio di un numero eccessivo di operazioni in un singoloAddBatchJobOperationsRequestpuò causare un erroreBatchJobError.REQUEST_TOO_LARGE. Puoi gestire questo errore riducendo il numero di operazioni e riprovando aAddBatchJobOperationsRequest.
Limitazioni
Ogni
BatchJobsupporta fino a un milione di operazioni. Il superamento di questo limite durante la chiamata diAddBatchJobOperationsrestituisce un erroreResourceCountLimitExceededError.RESOURCE_LIMIT(conResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBinErrorDetails.resource_count_details).Ogni account può avere fino a 100 job attivi o in attesa contemporaneamente. Il superamento di questo limite durante la creazione di un job batch con
MutateBatchJobrestituisce un erroreResourceCountLimitExceededError.RESOURCE_LIMIT(conResourceLimitType.BATCH_JOBS_PER_CUSTOMERinErrorDetails.resource_count_details).I lavori in attesa più vecchi di 7 giorni vengono rimossi automaticamente.
Ogni
AddBatchJobOperationsRequestha un limite rigido di 10.000 operazioni di modifica per richiesta. Il superamento di 10.000 operazioni in una singola richiesta restituisce un erroreBatchJobError.REQUEST_TOO_LARGE.Per il campo
page_sizeinListBatchJobResultsRequest:- Se
page_sizenon è impostato o è0, il valore predefinito è il massimo di1000. - Se
page_sizesupera1000o è inferiore a0, l'API restituisce un erroreBatchJobError.INVALID_PAGE_SIZE.
- Se
Ogni
AddBatchJobOperationsRequestha una dimensione massima di 41.937.920 byte. Se superi questo limite, ricevi un erroreBatchJobError.REQUEST_TOO_LARGE(o un erroreINTERNAL_ERRORse il rifiuto avviene a livello di trasporto). Puoi determinare le dimensioni serializzate della richiesta prima dell'invio e intraprendere l'azione appropriata se è troppo grande:Java
static final int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.getSerializedSize();C#
const int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.CalculateSize();PHP
const MAX_REQUEST_BYTES = 41937920; // ... (code to get the AddBatchJobOperationsRequest object) $size_in_bytes = $request->byteSize();Python
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = type(request).pb(request).ByteSize()Ruby
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = request.to_proto.bytesizePerl
use JSON::XS; use constant MAX_REQUEST_BYTES => 41937920; # ... (code to get the AddBatchJobOperationsRequest object) # The Perl client library uses REST/JSON; UTF-8 JSON byte length provides a # conservative upper-bound estimate of the serialized request size. my $json_encoder = JSON::XS->new->utf8->convert_blessed; my $size_in_bytes = length($json_encoder->encode($request));
Dimensioni di una singola operazione di modifica
Sebbene la richiesta complessiva possa essere di massimo 41.937.920 byte, la dimensione serializzata di un singolo MutateOperation all'interno del batch è limitata a 10.484.504 byte (10 MiB meno 1256 byte). Il superamento di questo limite restituisce un errore
BatchJobError.REQUEST_TOO_LARGE. Tieni presente che, sebbene
la documentazione di riferimento per BatchJobError.REQUEST_TOO_LARGE citi la
soglia di 10.484.504 byte, AddBatchJobOperations restituisce lo stesso codice di errore
quando viene superata una delle tre soglie di richiesta (41.937.920 byte totali della richiesta,
10.484.504 byte per singola operazione o 10.000 operazioni per chiamata),
con il campo message dell'errore che specifica quale limite è stato violato.