Prácticas recomendadas

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

Privacidad y precisión de los datos

Desarrolla las consultas con datos del entorno aislado

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

Utiliza datos del entorno aislado durante el desarrollo de la consulta siempre que sea posible. Las tareas que utilizan datos del entorno aislado no presentan oportunidades adicionales de comprobación de diferencias para filtrar los resultados de las consultas. Además, puesto que las consultas en el entorno aislado no están sujetas a comprobaciones de privacidad, se ejecutan más deprisa, lo que permite una iteración más rápida durante su desarrollo.

Si tienes que desarrollar consultas con tus datos reales (por ejemplo, al usar tablas de coincidencias), selecciona periodos y otros parámetros que sea poco probable que se superpongan en cada iteración de la consulta. Así, habrá menos probabilidades de que se superpongan las filas. Por último, ejecuta la consulta en el intervalo de datos deseado.

Estudia detenidamente el historial de resultados

Práctica recomendada: Reduce las probabilidades de superposición entre los conjuntos de resultados de las consultas ejecutadas recientemente.

Recuerda que el porcentaje de cambio entre los resultados de una consulta influirá en la probabilidad de que los resultados se omitan más tarde debido a las comprobaciones de privacidad. Si un segundo conjunto de resultados se parece mucho a uno devuelto recientemente, es probable que se descarte.

Es mejor que modifiques los parámetros clave de la consulta, como los periodos o los IDs de campaña, para reducir la probabilidad de que se produzcan superposiciones significativas.

No consultes los datos de la fecha actual

Práctica recomendada: No ejecutes varias consultas cuya fecha de finalización sea la fecha actual.

Si ejecutas varias consultas cuya fecha de finalización sea la fecha actual, es probable que se filtren las filas. Esta recomendación también es aplicable a la ejecución de consultas poco después de la medianoche sobre datos del día anterior.

No consultes los mismos datos más de lo necesario

Prácticas recomendadas:

  • Selecciona fechas de inicio y de finalización que estén estrechamente vinculadas.
  • En lugar de consultar periodos que se superpongan, ejecuta las consultas con conjuntos de datos inconexos y, luego, agrega los resultados en BigQuery.
  • Utiliza los resultados guardados en lugar de volver a ejecutar la consulta.
  • Crea tablas temporales para cada periodo que estés consultando.

El Centro de Datos de Anuncios restringe el número total de veces que se pueden consultar los mismos datos. Por eso, deberías limitar el número de veces que accedes a un determinado dato.

No uses más agregaciones de las que se necesitan en la misma consulta

Prácticas recomendadas:

  • Minimiza el número de agregaciones de cada consulta
  • Reescribe consultas para combinar agregaciones cuando sea posible

El Centro de Datos de Anuncios limita a 100 el número de agregaciones entre usuarios que se pueden usar en una subconsulta. Por lo tanto, solemos recomendar consultas que generen más filas con claves de agrupaciones específicas y agregaciones simples, en lugar de más columnas con claves de agrupaciones generales 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 contabilicen eventos basándose en el mismo conjunto de campos deben reescribirse con la instrucción GROUP BY.

SELECT
  field_1,
  field_2,
  COUNT(1) AS cnt
FROM
  table
GROUP BY
  1, 2

El resultado puede agregarse de la misma forma en BigQuery.

Las consultas que crean columnas a partir de un array y las agregan después se deben reescribir para combinar ambos 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 agregaciones distintas se pueden reescribir en varias consultas más específicas.

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 en:

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 UNION si los esquemas son compatibles.

Optimiza y comprende las uniones

Práctica recomendada: Usa LEFT JOIN en lugar de INNER JOIN para asociar clics o conversiones a impresiones.

No todas las impresiones están asociadas a clics o conversiones. Por lo tanto, si usas INNER JOIN para asociar clics o conversiones a impresiones, las impresiones que no estén vinculadas a clics o a conversiones se excluirán de los resultados.

Imagen que muestra varios tipos de uniones mediante diagramas de Venn

Une algunos resultados finales en BigQuery

Práctica recomendada: Evita hacer consultas en el Centro de Datos de Anuncios que unan resultados agregados. Es mejor que escribas dos consultas distintas y unas los resultados en BigQuery.

Las filas que no cumplen los requisitos de agregación se excluyen de los resultados. Por lo tanto, si la consulta une una fila no suficientemente agregada a una fila suficientemente agregada, se excluirá la fila resultante. Además, las consultas con varias agregaciones tienen un peor rendimiento en el Centro de Datos de Anuncios.

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

Práctica recomendada: Añade resúmenes de filas excluidas a tus consultas.

Los resúmenes de filas excluidas calculan los datos que se han dejado fuera debido a comprobaciones de privacidad. Los datos de las filas excluidas se suman y se añaden a una fila general. Aunque los datos excluidos no se pueden analizar más a fondo, se ve un resumen de cuántos se han excluido de los resultados.

Incluye los IDs de usuario nulos

Práctica recomendada: Incluye los IDs de usuario nulos en tus resultados.

El ID de un usuario final puede tener el valor 0 por varios motivos, como la inhabilitación de la personalización de anuncios, motivos normativos, etc. Por lo tanto, los datos procedentes de varios usuarios estarán asociados a un user_id de 0.

Si quieres conocer los totales de los datos, como el total de impresiones o de clics, deberías incluir estos eventos. Sin embargo, estos datos no serán útiles para obtener estadísticas sobre los clientes, y se deben excluir si estás haciendo este análisis.

Puedes excluir estos datos de los resultados añadiendo WHERE user_id != "0" a tus consultas.


Rendimiento

Evita la reagregación

Práctica recomendada: Evita usar varias capas de agregación entre los usuarios.

Las consultas que combinan resultados que ya se han agregado, como una consulta con varios GROUP BY o una agregación anidada, requieren más recursos para procesarse.

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 de evento o de usuario mientras se procesan y luego combinarlas con una sola agregación.

Debes 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 deben reescribirse de modo que utilicen una sola capa de agregación.

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

Las consultas que se pueden dividir fácilmente deben dividirse. Puedes unir resultados en BigQuery.

Optimiza las consultas para BigQuery

Por lo general, las consultas que requieren menos trabajo tienen un mejor rendimiento. A la hora de evaluar el rendimiento de una consulta, el volumen de trabajo necesario depende de los siguientes factores:

Si la ejecución de una consulta no cumple tus acuerdos de nivel de servicio, o si se producen errores debido al agotamiento de recursos o al tiempo de espera, puedes hacer lo siguiente:

  • Usa los resultados de consultas anteriores en lugar de repetir los cálculos. Por ejemplo, el total semanal podría ser la suma calculada en BigQuery de 7 consultas agregadas de un solo día.
  • Descompón las consultas en subconsultas lógicas (por ejemplo, divide varias uniones en varias consultas) o restringe de cualquier otra forma el conjunto de datos que se procesa. Puedes combinar los resultados de tareas individuales en un único conjunto de datos de BigQuery. Aunque esto puede evitar que se agoten los recursos, también puede ralentizar tu consulta.
  • Si se producen errores de recursos excedidos en BigQuery, prueba a usar tablas temporales para dividir la consulta en varias consultas de BigQuery.
  • Haz referencia a menos tablas en una sola consulta, ya que esto utiliza una gran cantidad de memoria y puede provocar un error en la consulta.
  • Reescribe tus consultas para que unan menos tablas de usuarios.
  • Reescribe tus consultas para evitar que una tabla se una a sí misma.

Asesor de consultas

Si tu SQL es válido, pero puede provocar demasiadas exclusiones, el asesor de consultas mostrará acciones recomendadas 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: