Le best practice riportate di seguito ti illustreranno tecniche per sviluppare query ad alte prestazioni e incentrate sul rispetto della privacy.
Privacy e accuratezza dei dati
Sviluppare query sui dati sandbox
Best practice: esegui le query sui dati di produzione solo in ambienti di produzione.
Utilizza il più possibile i dati sandbox durante lo sviluppo delle query. I job che utilizzano i dati sandbox non introducono ulteriori opportunità di eseguire controlli delle differenze per filtrare i risultati delle query. Inoltre, a causa della mancanza di controlli per la privacy, le query sandbox vengono eseguite più velocemente, consentendo un'iterazione più rapida durante il loro sviluppo.
Se devi sviluppare query sui tuoi dati effettivi (ad esempio quando utilizzi le tabelle delle corrispondenze), per ridurre le probabilità di sovrapposizione di righe, scegli intervalli di date e altri parametri che difficilmente si sovrappongono per ogni iterazione della query. Infine, esegui la query sull'intervallo di dati che ti interessa.
Valutare attentamente i risultati storici
Best practice: riduci la probabilità di sovrapposizione del set di risultati tra le query eseguite di recente.
Tieni presente che la frequenza di modifica dei risultati di una query influisce sulla probabilità che i risultati vengano omessi in un secondo momento a causa dei controlli per la privacy. È probabile che venga eliminato un secondo set di risultati molto simile a uno restituito di recente.
Piuttosto, modifica i parametri chiave della query, ad esempio intervalli di date o ID campagna, per ridurre le probabilità di una sovrapposizione significativa.
Non eseguire query sui dati del giorno corrente
Best practice: non eseguire più query la cui data di fine è il giorno corrente.
L'esecuzione di più query con date di fine corrispondenti al giorno corrente spesso causa il filtraggio delle righe. Queste indicazioni valgono anche per le query eseguite poco dopo la mezzanotte sui dati del giorno precedente.
Non eseguire query sugli stessi dati più del necessario
Best practice:
- seleziona date di inizio e fine strettamente legate.
- Anziché eseguire query su finestre sovrapposte, eseguile su set di dati distinti, quindi aggrega i risultati in BigQuery.
- Utilizza i risultati salvati anziché eseguire di nuovo la query.
- Crea tabelle temporanee per ogni intervallo di date per il quale stai eseguendo la query.
Ads Data Hub limita il numero totale di volte in cui puoi eseguire query sugli stessi dati. Di conseguenza, devi cercare di limitare il numero di accessi a un determinato dato.
Non utilizzare più aggregazioni del necessario nella stessa query
Best practice:
- Riduci al minimo il numero di aggregazioni in una query
- Se possibile, riscrivi le query per combinare le aggregazioni
Ads Data Hub limita a 100 le aggregazioni tra utenti che è possibile utilizzare in una sottoquery. In generale, consigliamo di scrivere query che generino più righe con chiavi di raggruppamento specifiche e semplici aggregazioni, anziché più colonne con chiavi di raggruppamento generiche e aggregazioni complesse. Evita quanto segue:
SELECT
COUNTIF(field_1 = a_1 AND field_2 = b_1) AS cnt_1,
COUNTIF(field_1 = a_2 AND field_2 = b_2) AS cnt_2
FROM
table
Le query che conteggiano gli eventi in base allo stesso insieme di campi devono essere riscritte utilizzando l'istruzione GROUP BY.
SELECT
field_1,
field_2,
COUNT(1) AS cnt
FROM
table
GROUP BY
1, 2
Il risultato può essere aggregato nello stesso modo in BigQuery.
Le query che creano colonne da un array e le aggregano dopo devono essere riscritte per unire questi passaggi.
SELECT
COUNTIF(a_1) AS cnt_1,
COUNTIF(a_2) AS cnt_2
FROM
(SELECT
1 IN UNNEST(field) AS a_1,
2 IN UNNEST(field) AS a_2,
FROM
table)
La query precedente può essere riscritta come:
SELECT f, COUNT(1) FROM table, UNNEST(field) AS f GROUP BY 1
Le query che utilizzano combinazioni diverse di campi in aggregazioni diverse possono essere riscritte in più query mirate.
SELECT
COUNTIF(field_1 = a_1) AS cnt_a_1,
COUNTIF(field_1 = b_1) AS cnt_b_1,
COUNTIF(field_2 = a_2) AS cnt_a_2,
COUNTIF(field_2 = b_2) AS cnt_b_2,
FROM table
La query precedente può essere suddivisa:
SELECT
field_1, COUNT(*) AS cnt
FROM table
GROUP BY 1
e
SELECT
field_2, COUNT(*) AS cnt
FROM table
GROUP BY 1
Puoi suddividere questi risultati in query separate, creare e unire le tabelle in una singola query o combinarle con un'istruzione UNION se gli schemi sono compatibili.
Ottimizzare e comprendere i join
Best practice: utilizza un LEFT JOIN
anziché un INNER JOIN
per unire i clic o le conversioni alle impressioni.
Non tutte le impressioni sono associate a clic o conversioni. Di conseguenza, se utilizzi un INNER JOIN
per unire i clic o le conversioni alle impressioni, le impressioni che non sono legate a clic o conversioni verranno filtrate dai risultati.
Unire alcuni risultati finali in BigQuery
Best practice: evita le query di Ads Data Hub che uniscono i risultati aggregati. Scrivi invece due query distinte e unisci i risultati in BigQuery.
Le righe che non soddisfano i requisiti di aggregazione vengono filtrate dai risultati. Di conseguenza, se la tua query unisce una riga non sufficientemente aggregata a un'altra che lo è a sufficienza, la riga risultante verrà filtrata. Inoltre, le query con più aggregazioni hanno prestazioni inferiori in Ads Data Hub.
Puoi unire i risultati (in BigQuery) di più query di aggregazione (da Ads Data Hub). I risultati calcolati utilizzando le query comuni condivideranno gli schemi finali.
La query seguente prende i singoli risultati di Ads Data Hub (campaign_data_123
e campaign_data_456
) e li unisce in BigQuery:
SELECT t1.campaign_id, t1.city, t1.X, t2.Y
FROM `campaign_data_123` AS t1
FULL JOIN `campaign_data_456` AS t2
USING (campaign_id, city)