Realiza una ejecución de prueba de una consulta

Cuando ejecutas una consulta en la CLI, puedes usar la marca --dry_run para estimar la cantidad de bytes que leerá la consulta. También puedes usar el parámetro dryRun cuando envíes un trabajo de consulta mediante la API o las bibliotecas cliente.

Puedes usar la estimación que muestra la ejecución de prueba para calcular los costos de consulta en la calculadora de precios. No se te cobrará por realizar la ejecución de prueba.

Permisos necesarios

Como mínimo, para ejecutar un trabajo de consulta, debes tener los permisos bigquery.jobs.create. Para que el trabajo de consulta se complete con éxito, también debes tener acceso a los conjuntos de datos que contienen las tablas o vistas a las que hace referencia la consulta. Si deseas obtener más información sobre los controles de acceso a conjuntos de datos, consulta la página Controla el acceso a los conjuntos de datos.

Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Además, si un usuario tiene permisos bigquery.datasets.create, cuando crea un conjunto de datos, se le otorga el acceso bigquery.dataOwner. El acceso bigquery.dataOwner permite al usuario realizar consultas sobre las tablas y vistas en el conjunto de datos.

Para obtener más información sobre las funciones de Cloud IAM en BigQuery, consulta los permisos y funciones predefinidas.

Realiza ejecuciones de prueba

Puedes realizar una ejecución de prueba de un trabajo de consulta mediante las siguientes opciones:

  • La marca --dry_run con el comando query en la CLI
  • El parámetro dryRun en la configuración de trabajo cuando usas la API o las bibliotecas cliente

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.

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 establecido en true en la configuración del trabajo.

Go

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.

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

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

from google.cloud import bigquery

# TODO(developer): 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))