Estima y controla los costos

En esta página, se describe cómo estimar el costo y se enumeran las prácticas recomendadas para controlar los costos en BigQuery. BigQuery ofrece dos tipos de modelos de precios: según demanda y basados en la capacidad. Para obtener más información sobre los precios, consulta Precios de BigQuery.

Con BigQuery, puedes estimar el costo de ejecutar una consulta, calcular el byte que procesan varias consultas y obtener una estimación del costo mensual en función del uso previsto. Para controlar el costo, también debes seguir las prácticas recomendadas para optimizar el procesamiento de las consultas y el almacenamiento de BigQuery. Para conocer las prácticas recomendadas específicas de los costos, consulta Controla los costos de consulta.

Para supervisar los costos de consulta y el uso de BigQuery, analiza los registros de auditoría de BigQuery.

Estima los costos de las consultas

BigQuery proporciona varios métodos para estimar los costos:

Cálculo del tamaño de la consulta según demanda

Para calcular la cantidad de bytes que procesan los diversos tipos de consultas mediante el modelo de facturación según demanda, consulta las siguientes secciones:

Consulta formatos de columna en Cloud Storage

Si tus datos externos se almacenan en ORC o Parquet, la cantidad de bytes que se cobran está limitada por las columnas que BigQuery lee. Debido a que la consulta convierte los tipos de datos de una fuente externa en tipos de datos de BigQuery, la cantidad de bytes leídos se calcula según el tamaño de los tipos de datos de BigQuery. Para obtener más información sobre las conversiones de tipos de datos, consulta las siguientes páginas:

Usa la calculadora de precios de Google Cloud.

La calculadora de precios de Google Cloud puede ayudarte a crear una estimación del costo mensual general para BigQuery en función del uso proyectado.

A pedido

Para estimar los costos en la calculadora de precios de Google Cloud con el modelo de precios según demanda, sigue estos pasos:

  1. Abre la calculadora de precios de Google Cloud.
  2. Haz clic en BigQuery.
  3. Haz clic en la pestaña On-Demand (A pedido).
  4. En Precios de almacenamiento, ingresa el tamaño estimado de la tabla en los campos de almacenamiento. Solo debes estimar el almacenamiento físico o el almacenamiento lógico, según el modelo de facturación de almacenamiento del conjunto de datos.
  5. En Query Pricing (Precios de las consultas), ingresa los bytes leídos estimados de tu ejecución de prueba o el validador de consultas.
  6. Haz clic en Add To Estimate (Agregar a la estimación).
  7. La estimación aparece a la derecha. Ten en cuenta que puedes guardar o enviar la estimación por correo electrónico.

Para obtener más información, consulta los precios según demanda.

Ediciones

Para estimar los costos en la calculadora de precios de Google Cloud con el modelo de precios basado en la capacidad con las ediciones de BigQuery, sigue estos pasos:

  1. Abre la calculadora de precios de Google Cloud.
  2. Haz clic en BigQuery.
  3. Haz clic en la pestaña Ediciones.
  4. Elige la ubicación en la que se usarán las ranuras.
  5. Elige tu edición.
  6. Elige las Cantidad máxima de ranuras, Ranuras base, Compromiso opcional y Uso estimado del ajuste de escala automático.
  7. Elige la ubicación en la que se almacenarán los datos.
  8. Ingresa tus estimaciones de uso del almacenamiento para Almacenamiento activo, Almacenamiento a largo plazo, Inserciones de transmisión y Lecturas de transmisión. Solo debes estimar el almacenamiento físico o el almacenamiento lógico, según el modelo de facturación de almacenamiento del conjunto de datos.
  9. Haz clic en Agregar a la estimación.

Para obtener más información, consulta Precios por capacidad.

Controla los costos de las consultas

Para optimizar los costos de las consultas, asegúrate de tener almacenamiento optimizado y cálculo de consulta. Para conocer métodos adicionales a fin de controlar el costo de las consultas, visita las siguientes secciones:

Comprueba el costo de las 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:

Usa el validador de consultas

Cuando ingresas una consulta en la consola de Google Cloud, 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.

  • Si tu consulta no es válida, el validador de consultas muestra un mensaje de error. Por ejemplo:

    Not found: Table myProject:myDataset.myTable was not found in location US

  • Si tu consulta es válida, el validador de consultas proporciona una estimación de la cantidad de bytes necesarios para procesar la consulta. Por ejemplo:

    This query will process 623.1 KiB when run.

Realiza una ejecución de prueba

Para realizar una prueba de validación, sigue estos pasos:

Console

  1. Dirígete a la página de BigQuery.

    Ir a BigQuery

  2. Ingresa tu consulta en el Editor de consultas.

    Si la consulta es válida, aparecerá de forma automática una marca de verificación junto con la cantidad de datos que la consulta procesará. Si la consulta no es válida, aparece un signo de exclamación junto con un mensaje de error.

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'
 

Para una consulta válida, 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.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas 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 Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// queryDryRun demonstrates issuing a dry run query to validate query structure and
// provide an estimate of the bytes scanned.
func queryDryRun(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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 := status.Err(); err != nil {
		return err
	}
	fmt.Fprintf(w, "This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas 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.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to run dry query on the table
public class QueryDryRun {

  public static void runQueryDryRun() {
    String query =
        "SELECT name, COUNT(*) as name_count "
            + "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
            + "WHERE state = 'WA' "
            + "GROUP BY name";
    queryDryRun(query);
  }

  public static void queryDryRun(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setDryRun(true).setUseQueryCache(false).build();

      Job job = bigquery.create(JobInfo.of(queryConfig));
      JobStatistics.QueryStatistics statistics = job.getStatistics();

      System.out.println(
          "Query dry run performed successfully." + statistics.getTotalBytesProcessed());
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas 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 Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryDryRun() {
  // Runs a dry query of the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
    dryRun: true,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  // Print the status and statistics
  console.log('Status:');
  console.log(job.metadata.status);
  console.log('\nJob Statistics:');
  console.log(job.metadata.statistics);
}

PHP

Antes de probar este ejemplo, sigue las instrucciones de configuración para PHP incluidas 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 PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

// Construct a BigQuery client object.
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

// Set job configs
$jobConfig = $bigQuery->query($query);
$jobConfig->useQueryCache(false);
$jobConfig->dryRun(true);

// Extract query results
$queryJob = $bigQuery->startJob($jobConfig);
$info = $queryJob->info();

printf('This query will process %s bytes' . PHP_EOL, $info['statistics']['totalBytesProcessed']);

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 para Python incluidas 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 Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

job_config = bigquery.QueryJobConfig(dry_run=True, use_query_cache=False)

# Start the query, passing in the extra configuration.
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"
    ),
    job_config=job_config,
)  # Make an API request.

# A dry run query completes immediately.
print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Evita ejecutar consultas para explorar los datos de la tabla

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 consola de Google Cloud, en la página de detalles de la tabla, haz clic en la pestaña Vista previa para hacer un muestreo de los datos.
  • En la herramienta de línea de comandos de bq, usa el comando bq 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.
  • Evita usar LIMIT en tablas no agrupadas en clústeres. En el caso de las tablas no agrupadas en clústeres, una cláusula LIMIT no reducirá los costos de procesamiento.

Restringe la cantidad de bytes facturados

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, antes de la ejecución de la consulta se estima la cantidad de bytes que lee la consulta. Si la cantidad de bytes estimados supera el límite, la consulta falla sin incurrir en un cargo.

En el caso de las tablas agrupadas en clústeres, la estimación de la cantidad de bytes facturados para una consulta es un límite superior y puede ser mayor que la cantidad real de bytes facturados después de ejecutar la consulta. Por lo tanto, en algunos casos, si estableces el máximo de bytes facturados, una consulta en una tabla agrupada en clústeres puede fallar, aunque los bytes reales facturados no excedan la configuración máxima de bytes facturados.

Si una consulta falla debido a la configuración de máximo de bytes facturados, se muestra un error similar al 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

  1. En el Editor de consultas, haz clic en Más > Configuración de consultas > Opciones avanzadas.
  2. En el campo Máximo de bytes facturados, ingresa un número entero.
  3. Haz clic en Guardar.

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.

Evita usar LIMIT en 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, aplicar una cláusula LIMIT a una consulta no 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, ya que el análisis se detiene cuando se analizan suficientes bloques para obtener el resultado. Solo se te cobrarán los 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 Looker Studio. Para ver un instructivo sobre cómo crear un panel de facturación, consulta Visualiza la Facturación de Google Cloud mediante BigQuery y Looker 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.

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.

Usa el vencimiento de tablas para las tablas de destino

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.

¿Qué sigue?