Prácticas recomendadas

Las siguientes prácticas recomendadas te proporcionarán técnicas para desarrollar consultas eficaces y centradas en la privacidad.

Privacidad y precisión de los datos

Desarrollar consultas sobre los datos de la zona de pruebas

Práctica recomendada: Consulta solo los datos de producción cuando estás en producción.

Utiliza datos de la zona de pruebas durante el desarrollo de las consultas siempre que sea posible. Los trabajos que usan datos de la zona de pruebas no presentan oportunidades adicionales para que se filtren los resultados de las consultas mediante verificaciones de diferencias. 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 las consultas.

Si tienes que desarrollar consultas sobre tus datos reales (como cuando usas tablas de coincidencias), para reducir la probabilidad de que se superpongan las 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 que el conjunto de resultados se superponga entre las consultas ejecutadas recientemente.

Ten en cuenta que la tasa de cambio entre los resultados de la búsqueda afectará la probabilidad de que los resultados se omitan más adelante debido a verificaciones de privacidad. Es probable que se descarte un segundo conjunto de resultados que se parezca mucho a un conjunto de resultados que se mostró recientemente.

En su lugar, modifica los parámetros clave de tu búsqueda, como los períodos o los IDs de las campañas, para disminuir las probabilidades de que haya 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.

Si ejecutas varias consultas con fechas de finalización iguales a las de hoy, es posible que se filtren las filas. Esta guía también se aplica a las consultas que se ejecutan 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 estrechamente vinculadas.
  • 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 la 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 puedes consultar los mismos datos. Por lo tanto, debes intentar limitar la cantidad 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
  • Volver a escribir las consultas para combinar agregaciones cuando sea posible

El Centro de Datos de Anuncios limita a 100 la cantidad de agregaciones de varios usuarios que se pueden utilizar en una subconsulta. Por lo tanto, en general 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 amplias 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 según el mismo conjunto de campos se deben reescribir con 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, se deben volver a escribir 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 distintas combinaciones de campos en diferentes agregaciones se pueden reescribir 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 las siguientes maneras:

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 separadas, crear y unir las tablas en una sola consulta o combinarlas con una función UNION si los esquemas son compatibles.

Optimiza y comprende uniones

Práctica recomendada: Utiliza LEFT JOIN en lugar de INNER JOIN para unir los clics o las conversiones con las impresiones.

No todas las impresiones se asocian con clics o conversiones. Por lo tanto, si INNER JOIN clics o conversiones en las impresiones, las impresiones que no estén vinculadas a clics o conversiones se filtrarán de tus resultados.

Imagen que muestra varios tipos de unión mediante diagramas de Venn

Únete a algunos resultados finales en BigQuery

Práctica recomendada: Evita las consultas del Centro de Datos de Anuncios que unen 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 sus resultados. Por lo tanto, si tu consulta une una fila que no tiene la agregación suficiente con una que sí lo tiene, se filtrará la fila resultante. Además, las consultas con múltiples agregaciones tienen menos rendimiento en el Centro de Datos de Anuncios.

Puedes unir resultados (en BigQuery) desde varias consultas de agregación (desde el Centro de Datos de Anuncios). Los resultados calculados mediante 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 filtrados

Práctica recomendada: Agrega resúmenes de filas filtrados a tus consultas.

Los resúmenes de filas filtrados contabilizan 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, proporciona un resumen de cuántos datos se filtraron de los resultados.

Considerar los IDs de usuario con ceros

Práctica recomendada: Ten en cuenta los IDs de usuario con ceros en tus resultados.

El ID de un usuario final puede establecerse en 0 por varios motivos, como la inhabilitación de la personalización de anuncios, los motivos regulatorios, entre otros. Por lo tanto, los datos que se originen de varios usuarios se asociarán con 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, si realizas este tipo de análisis, debes filtrarlos.

Para excluir estos datos de los resultados, agrega WHERE user_id != "0" a tus consultas.


Rendimiento

Evita la reagregación

Práctica recomendada: evita varias 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 su procesamiento.

A menudo, las consultas con múltiples 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 volver a escribir para que usen una sola capa de agregación.

(SELECT ... GROUP BY ... )
JOIN USING (...)
(SELECT ... GROUP BY ... )

Las consultas que se pueden dividir con facilidad deben dividirse. Puedes unir resultados en BigQuery.

Optimización para BigQuery

Por lo general, las consultas que tienen menos rendimiento funcionan mejor. Cuando se evalúa el rendimiento de las consultas, la cantidad de trabajo requerido depende de los siguientes factores:

Si la ejecución de la consulta no cumple con tus Acuerdos de Nivel de Servicio o si se producen errores debido al agotamiento de los recursos o al tiempo de espera, considera lo siguiente:

  • Usar los resultados de consultas anteriores en lugar de volver a procesarlos Por ejemplo, el total semanal podría ser la suma calculada en BigQuery de 7 consultas agregadas de un solo día.
  • Dividir consultas en subconsultas lógicas (por ejemplo, dividir múltiples uniones en varias consultas) o restringir, de otro modo, el conjunto de datos que se procesa. Puedes combinar los resultados de trabajos individuales en un único conjunto de datos en BigQuery. Aunque esto podría contribuir al agotamiento de los recursos, podría ralentizar tu consulta.
  • Si recibes 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 la consulta falle.
  • Volver a escribir tus consultas para que unan menos tablas de usuarios
  • Volver a escribir tus consultas para evitar unir la misma tabla

Asesor de consultas

Si tu SQL es válido, pero podría activar un filtrado excesivo, el asesor de consultas te muestra consejos prácticos durante el proceso de desarrollo de la consulta para ayudarte a evitar resultados no deseados.

Los activadores incluyen los siguientes patrones:

Para usar el asesor de consultas, haz lo siguiente: