Recomendaciones de BigQuery: controla los costos

En esta página, se describen las recomendaciones para controlar los costos en BigQuery.

Evita SELECT *

Recomendación: 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 en la tabla.

Si exploras datos o experimentas con ellos, usa una de las opciones de vista previa de datos en lugar de SELECT *.

Aplicar 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 es obligatorio consultar todas las columnas de una tabla, pero solo en un subconjunto de datos, considera las opciones siguientes:

  • Materializar los resultados en una tabla de destino y consultar esa tabla en su lugar
  • Hacerle particiones a 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

Analiza datos con 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 GCP Console o en la IU web clásica, en la página de detalles de la tabla, haz clic en la pestaña Vista previa para probar los datos.
  • En la CLI, usa el comando bq head y especifica el número de filas para obtener una vista previa.
  • En la API, usa tabledata.list para recuperar datos de tablas 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 consultas en GCP Console o la IU web clásica
  • Usa la calculadora de precios de Google Cloud Platform
  • Realiza una ejecución de prueba mediante estos elementos:
    • la marca --dry_run en la CLI
    • el parámetro dryRun cuando envías un trabajo de consulta con la API

Usa el validador de consultas

Cuando ingresas una consulta en GCP Console o en la IU web clásica, el validador de consultas verifica la sintaxis de la consulta y proporciona una estimación de la cantidad de bytes leídos. Puedes usar esta estimación para calcular el costo de la consulta en la calculadora de precios.

Validador de consultas

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 GCP Console.

IU clásica

En la actualidad, no puedes realizar una ejecución de prueba con la IU web.

CLI

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 con la API, envía un trabajo de consulta con dryRun configurado como true en la configuración del trabajo.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración de Go incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Go de BigQuery.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
q := client.Query(`
SELECT
	name,
	COUNT(*) as name_count
FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
WHERE state = 'WA'
GROUP BY name`)
q.DryRun = true
// Location must match that of the dataset(s) referenced in the query.
q.Location = "US"

job, err := q.Run(ctx)
if err != nil {
	return err
}
// Dry run is not asynchronous, so get the latest status and statistics.
status := job.LastStatus()
if err != nil {
	return err
}
fmt.Printf("This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)

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 este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

# from google.cloud import bigquery
# client = bigquery.Client()

job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
    job_config=job_config,
)  # API request

# A dry run query completes immediately.
assert query_job.state == "DONE"
assert query_job.dry_run

print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Usa la calculadora de precios

Para estimar los costos de consulta en la calculadora de precios de Google Cloud Platform, ingresa la cantidad de bytes que procesa la 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.

Calculadora de precios

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:

  • En la IU web clásica de BigQuery, ingresa un número entero en el campo Máximo de bytes facturados (Maximum Bytes Billed) en las opciones de consulta. En la actualidad, GCP Console no admite la opción Máximo de bytes facturados. Máximo de bytes facturados
  • En la CLI, 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'
    
  • En la API, configura la propiedad maximumBytesBilled en la configuración del trabajo query.

LIMIT no afecta el costo

Recomendación: No uses una cláusula LIMIT como método de control de costos.

Aplicar una cláusula LIMIT a una consulta no afecta la cantidad de datos leídos. Solo limita la salida del conjunto de resultados. Se te cobra por leer todos los bytes en la tabla completa según lo indica la consulta.

La cantidad de datos que lee la consulta cuenta para tu cuota de nivel gratuito a pesar de la presencia de una cláusula LIMIT.

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 la página sobre cómo visualizar 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. Realizar particiones a tus tablas te permite consultar subconjuntos de datos relevantes, lo que mejora el rendimiento y reduce los costos.

Por ejemplo, cuando consultes tablas de particiones, usa la pseudocolumna _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.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.