Administrar los resultados de consultas

Cuando evalúes los datos de salida, ten en cuenta el número de bytes escritos para tu consulta. ¿Cuántos bytes están escritos para tu conjunto de resultados? ¿Estás limitando adecuadamente la cantidad de datos escritos? ¿Estás escribiendo repetidamente los mismos datos? La cantidad de datos escritos por una consulta afecta el rendimiento de la consulta (E/S). Si escribes los resultados en una tabla permanente (destino), la cantidad de datos escritos también tiene un costo.

Las siguientes recomendaciones proporcionan orientación para controlar tus datos de salida.

Cómo evitar las uniones y subconsultas repetidas

Recomendación: Evita unir repetidamente las mismas tablas y usar las mismas subconsultas.

Si unes repetidamente las mismas tablas, considera revisar tu esquema. En lugar de unir repetidamente los datos, podría ser más eficaz usar los datos repetidos anidados para representar las relaciones. Los datos repetidos anidados te ahorran el impacto en el rendimiento del ancho de banda de comunicación que requiere una unión. También te ahorra los costos de E/S en los que se incurre cuando lees y escribes repetidamente los mismos datos. Para obtener más información, consulta usar campos anidados y repetidos.

De manera similar, la repetición de las mismas subconsultas afecta el rendimiento a través del procesamiento repetitivo de consultas. Si usas las mismas subconsultas en varias consultas, considera materializar los resultados de la subconsulta en una tabla. Luego consume los datos materializados en tus consultas.

La materialización de los resultados de tu subconsulta mejora el rendimiento y reduce la cantidad total de datos que BigQuery lee y escribe. El pequeño costo de almacenar los datos materializados supera el impacto en el rendimiento del proceso repetido de E/S y de consultas.

Considera cuidadosamente materializar grandes conjuntos de resultados

Recomendación: Considera cuidadosamente materializar grandes conjuntos de resultados en una tabla de destino. Escribir grandes conjuntos de resultados tiene un impacto en el rendimiento y en los costos.

BigQuery limita los resultados almacenados en caché a aproximadamente 128 MB comprimidos. Las consultas que muestran resultados más grandes superan este límite y con frecuencia dan como resultado el siguiente error: Response too large.

Este error ocurre a menudo cuando seleccionas una gran cantidad de campos de una tabla con una cantidad considerable de datos. Los problemas cuando se escriben resultados en caché también pueden ocurrir en consultas de estilo ETL que normalizan los datos sin reducción ni agregación.

Puedes superar la limitación en el tamaño del resultado almacenado en caché mediante lo siguiente:

  • Usar filtros para limitar el conjunto de resultados.
  • Usar una cláusula LIMIT para reducir el conjunto de resultados, especialmente si usas una cláusula ORDER BY
  • Escribir los datos de salida en una tabla de destino.

Ten en cuenta que la escritura de conjuntos de resultados muy grandes en las tablas de destino afecta el rendimiento de las consultas (E/S). Además, incurrirás en un pequeño costo por almacenar la tabla de destino. Puedes borrar automáticamente una tabla de destino grande con el vencimiento predeterminado de la tabla del conjunto de datos. Para obtener más información, consulta Uso de la configuración de vencimiento en las recomendaciones de almacenamiento.

Cómo usar una cláusula LIMIT con órdenes grandes

Recomendación: Si ordenas un gran número de valores, usa una cláusula LIMIT.

Escribir resultados para una consulta con una cláusula ORDER BY puede dar como resultado errores de Resources exceeded. Debido a que la clasificación final se debe realizar en una ranura única, si intentas ordenar un conjunto de resultados muy grande, la clasificación final puede sobrecargar la ranura que procesa los datos. Si usas una cláusula ORDER BY, también usa una cláusula LIMIT.

Por ejemplo, la siguiente consulta ordena un conjunto de resultados muy grande y arroja un error de Resources exceeded. La consulta se ordena por la columna de title en la tabla Wiki1B. La columna de title contiene millones de valores.

SELECT title
FROM `bigquery-samples.wikipedia_benchmark.Wiki1B`
ORDER BY title

Para quitar el error, usa una consulta como la siguiente:

SELECT title
FROM bigquery-samples.wikipedia_benchmark.Wiki1B
ORDER BY title DESC
LIMIT 1000
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.