En esta página, se describen las prácticas recomendadas para controlar los costos en BigQuery.
Evita SELECT *
Práctica recomendada: consulta solo las columnas que necesitas.
Usar SELECT *
es la forma más costosa de consultar datos. Cuando usas SELECT *
, BigQuery realiza un análisis completo de cada columna de la tabla.
Si realizas experimentos o exploración en los datos, usa una de las opciones de vista previa de datos en lugar de SELECT *
.
La aplicación de una cláusula LIMIT
a una consulta SELECT *
no afecta la cantidad de datos leídos. Se te cobra por leer todos los bytes en la tabla completa y la consulta cuenta para tu cuota de nivel gratuito.
En su lugar, consulta solo las columnas que necesitas. Por ejemplo, usa SELECT * EXCEPT
para excluir una o más columnas de los resultados.
Si realmente necesitas consultar todas las columnas de una tabla, pero solo en un subconjunto de datos, considera estas opciones:
- Materializar los resultados en una tabla de destino y consultar esa tabla en su lugar
- Particionar tus tablas por fecha y consultar la partición relevante; por ejemplo,
WHERE _PARTITIONDATE="2017-01-01"
solo analiza la partición del 1 de enero de 2017
Realiza un muestreo de los datos con las opciones de vista previa
Recomendación: No ejecutes consultas para explorar los datos de las tablas ni obtener una vista previa de ellos.
Si exploras tus datos o experimentas con ellos, puedes usar las opciones de vista previa de tablas de forma gratuita sin afectar las cuotas.
BigQuery es compatible con las siguientes opciones de vista previa de datos:
- En la página de detalles de la tabla en Cloud Console, haz clic en la pestaña Vista previa para probar los datos.
- En la herramienta de línea de comandos de
bq
, usa el comandobq head
y especifica la cantidad de filas para la vista previa. - En la API, usa
tabledata.list
para recuperar los datos de tabla de un conjunto específico de filas.
Obtén el precio de tus consultas antes de ejecutarlas
Recomendación: Antes de ejecutar consultas, obtén una vista previa para estimar los costos.
Las consultas se facturan según el número de bytes leídos. Para estimar los costos antes de ejecutar una consulta, haz lo siguiente:
- Visualiza el validador de búsquedas en Cloud Console
- Usa la calculadora de precios de Google Cloud Platform
- Realiza una ejecución de prueba mediante estos elementos:
- La marca
--dry_run
en la herramienta de línea de comandos debq
- El parámetro
dryRun
cuando se envía un trabajo de consulta mediante la API
- La marca
Usa el validador de consultas
Cuando ingresas una consulta en Cloud Console, el validador de consultas verifica la sintaxis de la consulta y proporciona una estimación del número de bytes leídos. Puedes usar esta estimación para calcular el costo de la consulta en la calculadora de precios.
Realiza una ejecución de prueba
Para realizar una ejecución de prueba, haz lo siguiente:
Console
En la actualidad, no puedes realizar una ejecución de prueba con Cloud Console.
bq
Ingresa una consulta como la siguiente con la marca --dry_run
.
bq query \ --use_legacy_sql=false \ --dry_run \ 'SELECT COUNTRY, AIRPORT, IATA FROM `project_id`.dataset.airports LIMIT 1000'
El comando genera la siguiente respuesta:
Query successfully validated. Assuming the tables are not modified, running this query will process 10918 bytes of data.
API
Para realizar una ejecución de prueba mediante la API, envía un trabajo de consulta con dryRun
configurado como true
en el tipo JobConfiguration.
Comienza a usarlo
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Python
Para realizar una ejecución de prueba con la biblioteca cliente de Python, configura la propiedad QueryJobConfig.dry_run como True
.
Client.query() siempre muestra un QueryJob completo cuando se proporciona una configuración de consulta de ejecución de prueba.
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la Guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Usa la calculadora de precios
Para estimar los costos de consulta de en la calculadora de precios de Google Cloud Platform, ingresa la cantidad de bytes que se procesarán por consulta, en MB, GB, TB o PB. Si tu consulta procesa menos de 1 TB, la estimación es de $0 porque BigQuery proporciona 1 TB de procesamiento de consultas a pedido gratis por mes.
Restringe la cantidad de bytes facturados para limitar los costos de consulta
Recomendación: Usa la configuración de máximo de bytes facturados para limitar los costos de consulta.
Puedes limitar la cantidad de bytes facturados para una consulta mediante la configuración de máximo de bytes facturados. Cuando estableces un máximo de bytes facturados, si la consulta lee más bytes que el máximo, esta falla sin incurrir en un cargo.
Si una consulta falla debido a la configuración de máximo de bytes facturados, se muestra un error como el siguiente:
Error: Query exceeded limit for bytes billed: 1000000. 10485760 or higher
required.
Para configurar el máximo de bytes facturados, haz lo siguiente:
Console
- En el Editor de consultas, haz clic en Más, luego en Configuración de consulta y, a continuación, haz clic en Opciones avanzadas.
- En el campo Máximo de bytes facturados, ingresa un número entero.
- Haga clic en Save.
bq
Usa el comando bq query
con la marca --maximum_bytes_billed
.
bq query --maximum_bytes_billed=1000000 \ --use_legacy_sql=false \ 'SELECT word FROM `bigquery-public-data`.samples.shakespeare'
API
Establece la propiedad maximumBytesBilled
en JobConfigurationQuery
o QueryRequest
.
Usa tablas agrupadas en clústeres o particionadas
Práctica recomendada: Usa el agrupamiento en clústeres y las particiones para reducir la cantidad de datos analizados.
El agrupamiento en clústeres y las particiones pueden ayudar a reducir la cantidad de datos que se procesan en las consultas. Para limitar la cantidad de particiones analizadas cuando se consultan tablas agrupadas o particionadas, usa un filtro de predicado.
Si ejecutas una consulta en una tabla agrupada en clústeres, y la consulta tiene un filtro en las columnas agrupadas en clústeres, entonces, BigQuery usa la expresión de filtro y los metadatos del bloque a fin de reducir la cantidad de bloques que analiza la consulta. Para obtener más información, visita Consulta tablas agrupadas en clústeres.
Cuando se consultan tablas particionadas, los filtros en la columna de partición se usan para reducir las particiones y, por lo tanto, pueden minimizar el costo de la consulta. Para obtener más información, ve a Consulta tablas particionadas.
No uses LIMIT para controlar los costos de las tablas no agrupadas en clústeres
Práctica recomendada: Para tablas no agrupadas en clústeres, no uses una cláusula LIMIT
como método para el control de costos.
En el caso de las tablas no agrupadas en clústeres, si aplicas una cláusula LIMIT
a una consulta, no se afecta la cantidad de datos leídos. Se te cobra por leer todos los bytes en la tabla completa según lo indica la consulta, aunque esta solo muestre un subconjunto. Con una tabla agrupada en clústeres, una cláusula LIMIT
puede reducir la cantidad de bytes analizados.
Visualiza los costos con un panel y consulta tus registros de auditoría
Recomendación: Crea un panel a fin de ver tus datos de facturación para poder realizar ajustes en tu uso de BigQuery. También considera transmitir tus registros de auditoría a BigQuery para poder analizar los patrones de uso.
Puedes exportar tus datos de facturación a BigQuery y visualizarlos en una herramienta como Google Data Studio. Para ver un instructivo acerca de cómo crear un panel de facturación, consulta Visualiza la facturación de GCP con BigQuery y Google Data Studio.
También puedes transmitir tus registros de auditoría a BigQuery y analizarlos en busca de patrones de uso, como los costos de consulta por usuario.
Haz particiones de los datos por fecha
Recomendación: Haz particiones a tus tablas por fecha.
Si es posible, haz particiones de tus tablas de BigQuery por fecha. La partición de tus tablas te permite consultar subconjuntos de datos relevantes, lo que mejora el rendimiento y reduce los costos.
Por ejemplo, cuando consultes tablas particionadas, usa la seudocolumna _PARTITIONTIME
para filtrar por fecha o período. La consulta procesa datos solo en las particiones que especifican la fecha o el período.
Materializa los resultados de la consulta en etapas
Recomendación: Si es posible, materializa los resultados de tu consulta en etapas.
Si creas una consulta grande de varias etapas, BigQuery lee todos los datos que requiere cada vez que la ejecutas. Se te factura por todos los datos que se leen cada vez que se ejecuta la consulta.
En su lugar, divide tu consulta en etapas que materialicen los resultados de la consulta mediante la escritura en una tabla de destino. Consultar la tabla de destino más pequeña reduce los costos y la cantidad de datos que se leen. El costo de almacenar los resultados materializados es mucho menor que el de procesar grandes cantidades de datos.
Considera el costo de conjuntos de resultados de gran tamaño
Recomendación: Si escribes resultados de consulta de gran tamaño en una tabla de destino, usa el tiempo de vencimiento de tabla predeterminado para quitar los datos cuando ya no sean necesarios.
Mantener conjuntos de resultados de gran tamaño en el almacenamiento de BigQuery tiene un costo. Si no necesitas acceso permanente a los resultados, usa el vencimiento de tabla predeterminado para borrar los datos de forma automática.
Para obtener más información, consulta los precios de almacenamiento.
Usa las inserciones de transmisión con cuidado
Recomendación: Usa las inserciones de transmisión solo si tus datos deben estar disponibles de inmediato.
Subir datos en BigQuery no tiene costo. Sin embargo, la transmisión de datos a BigQuery sí genera un costo. A menos que tus datos deban estar disponibles de inmediato, súbelos en lugar de transmitirlos.