Las siguientes mejores prácticas te proporcionarán técnicas para desarrollar y las búsquedas de alto rendimiento y centradas en la privacidad.
Privacidad y precisión de los datos
Desarrolla consultas en datos de la zona de pruebas
Práctica recomendada: Solo consulta los datos de producción cuando estés en producción.
Siempre que sea posible, usa datos de la zona de pruebas durante el desarrollo de tu consulta. Los trabajos que usan datos de la zona de pruebas no presentan oportunidades adicionales para realizar verificaciones de diferencias para filtrar los resultados de la consulta. Además, debido a la falta de verificaciones de privacidad, las consultas de la zona de pruebas se ejecutan más rápido, lo que permite una iteración más rápida durante el desarrollo de la consulta.
Si tienes que desarrollar consultas en tus datos reales (como cuando usas tablas de coincidencias), para que sea menos probable que superpongas filas, elige períodos y otros parámetros que tengan pocas probabilidades de superponerse en cada iteración de tu consulta. Por último, ejecuta tu consulta en el rango de datos deseado.
Considera cuidadosamente los resultados históricos
Práctica recomendada: Disminuye la probabilidad de superposición del conjunto de resultados entre las consultas ejecutadas recientemente.
Ten en cuenta que la tasa de cambio entre los resultados de una consulta afectará la probabilidad de que los resultados se omitan más adelante debido a las verificaciones de privacidad. Es probable que se descarte un segundo conjunto de resultados que se parezca mucho a un conjunto de resultados devuelto recientemente.
En su lugar, modifica los parámetros clave de tu consulta, como períodos o IDs de campaña, para disminuir las probabilidades de que se produzca una superposición significativa.
No consultar los datos de hoy
Práctica recomendada: No ejecutes varias consultas si la fecha de finalización es hoy.
La ejecución de varias consultas con fechas de finalización iguales a hoy suele provocar que se filtren las filas. Esta guía también se aplica a la ejecución de consultas poco después de la medianoche en los datos del día anterior.
No consultes los mismos datos más de lo necesario
Recomendaciones:
- Selecciona fechas de inicio y finalización muy limitadas.
- En lugar de consultar ventanas superpuestas, ejecuta tus consultas en conjuntos de datos inconexos y, luego, agrega los resultados en BigQuery.
- Usa los resultados guardados en lugar de volver a ejecutar tu consulta.
- Crea tablas temporales para cada período que estés consultando.
El Centro de Datos de Anuncios restringe la cantidad total de veces que se pueden buscar los mismos datos. Por lo tanto, debes intentar limitar el número de veces que accedes a un dato determinado.
No uses más agregaciones de las necesarias en la misma consulta
Prácticas recomendadas
- Minimiza la cantidad de agregaciones en una consulta
- Vuelve a escribir las consultas para combinar agregaciones cuando sea posible
El Centro de Datos de Anuncios limita a 100 la cantidad de agregaciones entre usuarios que se permite utilizar en una subconsulta. Por lo tanto, recomendamos escribir consultas que generen más filas con claves de agrupación enfocadas y agregaciones simples, en lugar de más columnas con claves de agrupación amplia y agregaciones complejas. Se debe evitar el siguiente patrón:
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
Las consultas que cuentan eventos que dependen del mismo conjunto de campos deben volver a escribirse a través de la instrucción GROUP BY.
SELECT
field_1,
field_2,
COUNT(1) AS cnt
FROM
table
GROUP BY
1, 2
El resultado se puede agregar de la misma manera en BigQuery.
Las consultas que crean columnas a partir de un array y, luego, las agregan después deben reescribirse para combinar estos pasos.
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 consulta anterior se puede reescribir de la siguiente manera:
SELECT f, COUNT(1) FROM table, UNNEST(field) AS f GROUP BY 1
Las consultas que usan diferentes combinaciones de campos en diferentes agregaciones se pueden volver a escribir en varias consultas más enfocadas.
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 consulta anterior se puede dividir de la siguiente manera:
SELECT
field_1, COUNT(*) AS cnt
FROM table
GROUP BY 1
y
SELECT
field_2, COUNT(*) AS cnt
FROM table
GROUP BY 1
Puedes dividir estos resultados en consultas independientes, crear y unir las tablas en una única consulta o combinarlas con una función UNION si los esquemas son compatibles.
Optimiza y comprende las uniones
Práctica recomendada: Usa un LEFT JOIN
en lugar de un INNER JOIN
para unir los clics o las conversiones a las impresiones.
No todas las impresiones se asocian con clics o conversiones. Por lo tanto, si INNER JOIN
los clics o las conversiones en las impresiones, las impresiones que no estén vinculadas a clics o conversiones se filtrarán de los resultados.
Une algunos resultados finales en BigQuery
Práctica recomendada: Evita las consultas del Centro de Datos de Anuncios que unan resultados agregados. En su lugar, escribe 2 consultas separadas y une los resultados en BigQuery.
Las filas que no cumplen con los requisitos de agregación se filtran de tus resultados. Por lo tanto, si tu consulta une una fila que se agregó de manera insuficiente con una fila que se agregó lo suficiente, se filtrará la fila resultante. Además, las consultas con varias agregaciones tienen menos rendimiento en el Centro de Datos de Anuncios.
Puedes unir los resultados (en BigQuery) de varias consultas de agregación (desde el Centro de Datos de Anuncios). Los resultados calculados con consultas comunes compartirán los esquemas finales.
La siguiente consulta toma resultados individuales del Centro de Datos de Anuncios (campaign_data_123
y campaign_data_456
) y los une en 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)
Usa resúmenes de filas filtradas
Práctica recomendada: Agrega resúmenes de filas filtradas a tus consultas.
Los resúmenes de filas filtradas registran los datos que se filtraron debido a verificaciones de privacidad. Los datos de las filas filtradas se suman y se agregan a una fila genérica. Si bien los datos filtrados no se pueden analizar más a fondo, proporcionan un resumen de la cantidad de datos que se filtraron de los resultados.
Cuenta para los ID de usuario en cero
Práctica recomendada: ten en cuenta los IDs de usuario en cero en tus resultados.
El ID de un usuario final puede establecerse en 0 por varias razones, como la inhabilitación de la personalización de anuncios, los motivos regulatorios, etc. Por lo tanto, los datos que provengan de varios usuarios se agregarán como claves a un user_id
de 0.
Si deseas comprender los totales de datos, como las impresiones o los clics totales, debes incluir estos eventos. Sin embargo, estos datos no serán útiles para obtener estadísticas sobre los clientes y deberían filtrarse si realizas ese análisis.
Puedes excluir estos datos de los resultados si agregas WHERE user_id != "0"
a tus consultas.
Rendimiento
Evita la agregación adicional
Práctica recomendada: Evita múltiples capas de agregación entre usuarios.
Las consultas que combinan resultados que ya se agregaron, como en el caso de una consulta con varios GROUP BY
o una agregación anidada, requieren más recursos para procesar.
A menudo, las consultas con varias capas de agregación se pueden dividir, lo que mejora el rendimiento. Debes intentar mantener las filas a nivel del evento o del usuario durante el procesamiento y, luego, combinarlas con una sola agregación.
Se deben evitar los siguientes patrones:
SELECT SUM(count)
FROM
(SELECT campaign_id, COUNT(0) AS count FROM ... GROUP BY 1)
Las consultas que usan varias capas de agregación se deben reescribir para usar una sola capa de agregación.
(SELECT ... GROUP BY ... )
JOIN USING (...)
(SELECT ... GROUP BY ... )
Las consultas que se pueden dividir fácilmente deben hacerlo. Puedes unir los resultados en BigQuery.
Optimiza para BigQuery
Por lo general, las consultas que tienen menos rendimiento tienen un mejor rendimiento. Cuando se evalúa el rendimiento de las consultas, la cantidad de trabajo requerido depende de los siguientes factores:
- Datos de entrada y fuentes de datos (E/S): ¿cuántos bytes lee tu consulta?
- Comunicación entre nodos (redistribución): ¿cuántos bytes pasa tu consulta a la siguiente etapa?
- Procesamiento: ¿cuánto trabajo de CPU requiere tu consulta?
- Salidas (materialización): ¿cuántos bytes escribe tu consulta?
- Antipatrones de consulta: tus consultas ¿siguen las recomendaciones de SQL?
Si la ejecución de la consulta no cumple con tus acuerdos de nivel de servicio o si se producen errores debido al agotamiento o el tiempo de espera de los recursos, considera lo siguiente:
- Usar los resultados de consultas anteriores en lugar de volver a procesar Por ejemplo, tu total semanal podría ser la suma calculada en BigQuery de 7 consultas agregadas en un solo día.
- Descomponer consultas en subconsultas lógicas (por ejemplo, dividir varias uniones en varias consultas) o restringir, de otro modo, el conjunto de datos que se procesan Puedes combinar los resultados de trabajos individuales en un solo conjunto de datos en BigQuery. Aunque esto puede ayudar con el agotamiento de los recursos, es posible que ralentice tu consulta.
- Si te encuentras con errores de recursos excedidos en BigQuery, intenta usar tablas temporales para dividir tu consulta en varias consultas de BigQuery.
- Hacer referencia a menos tablas en una sola consulta, ya que esto usa grandes cantidades de memoria y puede hacer que tu consulta falle.
- Volver a escribir tus consultas para que unan menos tablas de usuarios
- Volver a escribir las consultas para evitar volver a unir la misma tabla sobre sí misma
Asesor de consultas
Si tu SQL es válido, pero podría activar filtros excesivos, la consulta asesor muestra consejos prácticos durante el proceso de desarrollo de consultas ayudarte a evitar resultados no deseados.
Los activadores incluyen los siguientes patrones:
- Une subconsultas agregadas
- Unir datos no agregados con usuarios potencialmente diferentes
- Tablas temporales definidas de manera recursiva
Para usar el asesor de consultas, sigue estos pasos:
- IU: Las recomendaciones aparecerán en el editor de consultas, arriba el texto de la consulta.
- API. Usa el método
customers.analysisQueries.validate
.