Ejecuta una consulta

En este documento, se muestra cómo ejecutar una consulta en BigQuery y comprender cuántos datos procesará la consulta antes de ejecutarla a través de una prueba de validación.

Tipos de consultas

Puedes consultar datos de BigQuery a través de uno de los siguientes tipos de trabajos de consulta:

  • Trabajos de consultas interactivas. De manera predeterminada, BigQuery ejecuta trabajos de consultas interactivas (a pedido) lo antes posible.
  • Trabajos de consulta continua (Vista previa). Con estos trabajos, la consulta se ejecuta de forma continua, lo que te permite analizar datos entrantes en BigQuery en tiempo real y, luego, escribir los resultados en una tabla de BigQuery o exportar los resultados a Bigtable o Pub/Sub. Puedes usar esta capacidad para realizar tareas sensibles urgentes, como crear y tomar medidas inmediatas sobre las estadísticas, aplicar inferencias de aprendizaje automático (AA) en tiempo real y compilar canalizaciones de datos controladas por eventos.

  • Trabajos de consultas Batch. Con estos trabajos, BigQuery pone en cola cada consulta por lotes en tu nombre y, luego, inicia la consulta cuando los recursos inactivos están disponibles, por lo general, en el plazo de unos minutos.

Puedes ejecutar trabajos de consulta con los siguientes métodos:

De forma predeterminada, BigQuery ejecuta tus consultas como trabajos de consulta interactivos, que se ejecutan lo antes posible. BigQuery calcula de forma dinámica el límite de consultas simultáneas según la disponibilidad de recursos y favorece la ejecución de consultas interactivas más simultáneas que las consultas por lotes. Una vez que alcanzas el límite de consultas simultáneas, las consultas adicionales esperan en una cola. Para obtener más información, consulta las colas de consultas.

BigQuery guarda los resultados de las consultas en una tabla temporal (predeterminada) o en una tabla permanente. Cuando especificas una tabla permanente como la tabla de destino para los resultados, puedes elegir si deseas agregar o reemplazar una tabla existente o crear una tabla nueva con un nombre único.

Roles obligatorios

Para obtener los permisos que necesitas para ejecutar un trabajo de consulta, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para ejecutar un trabajo de consulta. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para ejecutar un trabajo de consulta:

  • bigquery.jobs.create en el proyecto desde el que se ejecuta la consulta, independientemente de dónde se almacenen los datos.
  • bigquery.tables.getData en todas las tablas y vistas a las que hace referencia la consulta. Para consultar las vistas, también necesitas este permiso en todas las tablas y vistas subyacentes. Si usas vistas autorizadas o conjuntos de datos autorizados, no necesitas acceso a los datos de origen subyacentes.

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Soluciona problemas

Access Denied: Project [project_id]: User does not have bigquery.jobs.create
permission in project [project_id].

Este error ocurre cuando un principal no tiene permiso para crear trabajos de consulta en el proyecto.

Solución: Un administrador debe otorgarte el permiso bigquery.jobs.create en el proyecto que consultas. Este permiso es necesario además de cualquier permiso necesario para acceder a los datos consultados.

Para obtener más información sobre IAM de BigQuery, consulta Control de acceso con IAM.

Ejecuta una consulta interactiva

Para ejecutar una consulta interactiva, selecciona una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Consulta en SQL.

  3. En el Editor de consultas, ingresa una consulta de GoogleSQL válida.

    Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Especifica la tabla de destino y la ubicación para los resultados de la consulta (opcional):

    1. En el editor de consultas, haz clic en Más y, luego, en Configuración de consulta.
    2. En la sección Destino, marca Establecer una tabla de destino para los resultados de la consulta.
    3. En Conjunto de datos, ingresa el nombre de un conjunto de datos existente para la tabla de destino, por ejemplo, myProject.myDataset.
    4. En ID de tabla, ingresa un nombre para la tabla de destino, por ejemplo, myTable.
    5. Si la tabla de destino es una tabla existente, en Preferencia de escritura para la tabla de destino, selecciona si deseas agregar o reemplazar la tabla con los resultados de la consulta.

      Si la tabla de destino es una tabla nueva, BigQuery crea la tabla cuando ejecutas la consulta.

    6. En la sección Configuración adicional, haz clic en el menú Ubicación de los datos y, luego, selecciona una opción.

      En este ejemplo, el conjunto de datos usa_names se almacena en la ubicación multirregión de EE.UU. Si especificas una tabla de destino para esta consulta, el conjunto de datos que contiene la tabla de destino también debe estar en la multirregión de EE.UU. No puedes consultar un conjunto de datos en una ubicación y escribir los resultados en una tabla de destino en otra ubicación.

    7. Haz clic en Guardar.

  5. Haz clic en Ejecutar.

    Si no especificas una tabla de destino, el trabajo de consulta escribe el resultado en una tabla temporal (en caché).

    Ahora puedes explorar los resultados de la consulta en la pestaña Resultados del panel Resultados de la consulta.

  6. Opcional: para ordenar los resultados de la consulta, haz clic en Abrir el menú de ordenamiento junto al nombre de la columna y selecciona un orden. Si la estimación de bytes procesados del orden es mayor que cero, la cantidad de bytes se muestra en la parte superior del menú.

  7. Opcional: Para ver los resultados de tu consulta, ve a la pestaña Gráfico. Puedes acercar o alejar el gráfico, descargarlo como un archivo PNG, o activar o desactivar la visibilidad de la leyenda.

    En el panel Configuración del gráfico, puedes cambiar el tipo de gráfico (línea, barra o de dispersión) y configurar sus medidas y dimensiones. Los campos de este panel se completan previamente con la configuración inicial deducida del esquema de tabla de destino de la consulta. La configuración se conserva entre las siguientes ejecuciones de consultas en el mismo editor de consultas. Las dimensiones admiten INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME y los tipos de datos STRING, mientras que las medidas admiten INTEGER, INT64, FLOAT, FLOAT64, NUMERIC y los tipos de datos BIGNUMERIC.

  8. Opcional: En la pestaña JSON, puedes explorar los resultados de la consulta en formato JSON, en el que la clave es el nombre de la columna y el valor es el resultado de esa columna.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Usa el comando bq query En la siguiente marca, la marca --use_legacy_sql=false te permite usar la sintaxis de GoogleSQL.

    bq query \
        --use_legacy_sql=false \
        'QUERY'

    Reemplaza QUERY por una consulta de GoogleSQL válida. Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    bq query \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    El trabajo de consulta escribe el resultado en una tabla temporal (en caché).

    De manera opcional, puedes especificar la tabla y la ubicación de destino para los resultados de la consulta. Si deseas escribir los resultados en una tabla existente, incluye la marca adecuada para agregar (--append_table=true) o reemplazar (--replace=true) la tabla.

    bq query \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'

    Reemplaza lo siguiente:

    • LOCATION: Es la región o multirregión para la tabla de destino, por ejemplo, US.

      En este ejemplo, el conjunto de datos usa_names se almacena en la ubicación multirregión de EE.UU. Si especificas una tabla de destino para esta consulta, el conjunto de datos que contiene la tabla de destino también debe estar en la multirregión de EE.UU. No puedes consultar un conjunto de datos en una ubicación y escribir los resultados en una tabla de destino en otra ubicación.

      Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.

    • TABLE: Es un nombre para la tabla de destino, por ejemplo, myDataset.myTable.

      Si la tabla de destino es una tabla nueva, BigQuery crea la tabla cuando ejecutas la consulta. Sin embargo, debes especificar un conjunto de datos existente.

      Si la tabla no está en tu proyecto actual, agrega el ID del proyecto de Google Cloud con el formato PROJECT_ID:DATASET.TABLE, por ejemplo, myProject:myDataset.myTable. Si no se especifica --destination_table, se genera un trabajo de consulta que escribe el resultado en una tabla temporal.

API

Para ejecutar una consulta con la API, inserta un nuevo trabajo y propaga la propiedad de configuración del trabajo query. Opcionalmente, especifica tu locationubicaciónjobReference en la propiedad de la sección del recurso de trabajo.

Busca resultado mediante una llamada a getQueryResults. Busca hasta que jobComplete sea igual a true. Verifica si hay errores y advertencias en la lista errors.

C#

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

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.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQuery
{
    public void Query(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013`
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseQueryCache = false });
        // Wait for the job to complete.
        job = job.PollUntilCompleted().ThrowOnAnyError();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

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"
	"google.golang.org/api/iterator"
)

// queryBasic demonstrates issuing a query and reading results.
func queryBasic(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 FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
			"WHERE state = \"TX\" " +
			"LIMIT 100")
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"
	// Run the query and print results when the query job is completed.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	it, err := job.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	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.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

public class SimpleQuery {

  public static void runSimpleQuery() {
    // TODO(developer): Replace this query before running the sample.
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    simpleQuery(query);
  }

  public static void simpleQuery(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();

      // Create the query job.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // Execute the query.
      TableResult result = bigquery.query(queryConfig);

      // Print the results.
      result.iterateAll().forEach(rows -> rows.forEach(row -> System.out.println(row.getValue())));

      System.out.println("Query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query did not run \n" + e.toString());
    }
  }
}

Para ejecutar una consulta con un proxy, visita Configura un proxy.

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 using default credentials
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function query() {
  // Queries 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',
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);
  console.log(`Job ${job.id} started.`);

  // Wait for the query to finish
  const [rows] = await job.getQueryResults();

  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

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;
use Google\Cloud\Core\ExponentialBackoff;

/** 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`';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

Python

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()

query = """
    SELECT name, SUM(number) as total_people
    FROM `bigquery-public-data.usa_names.usa_1910_2013`
    WHERE state = 'TX'
    GROUP BY name, state
    ORDER BY total_people DESC
    LIMIT 20
"""
rows = client.query_and_wait(query)  # Make an API request.

print("The query data:")
for row in rows:
    # Row values can be accessed by field name or index.
    print("name={}, count={}".format(row[0], row["total_people"]))

Ruby

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

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.

require "google/cloud/bigquery"

def query
  bigquery = Google::Cloud::Bigquery.new
  sql = "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " \
        "WHERE state = 'TX' " \
        "LIMIT 100"

  # Location must match that of the dataset(s) referenced in the query.
  results = bigquery.query sql do |config|
    config.location = "US"
  end

  results.each do |row|
    puts row.inspect
  end
end

Ejecuta una consulta continua

Ejecutar un trabajo de consulta continua requiere una configuración adicional. Para obtener más información, consulta Crea consultas continuas.

Ejecuta una consulta por lotes

Para ejecutar una consulta por lotes, selecciona una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Consulta en SQL.

  3. En el Editor de consultas, ingresa una consulta de GoogleSQL válida.

    Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Haz clic en Más y, luego, en Configuración de consulta.

  5. En la sección Administración de recursos, selecciona Por lotes.

  6. Especifica la tabla de destino y la ubicación para los resultados de la consulta (opcional):

    1. En la sección Destino, marca Establecer una tabla de destino para los resultados de la consulta.
    2. En Conjunto de datos, ingresa el nombre de un conjunto de datos existente para la tabla de destino, por ejemplo, myProject.myDataset.
    3. En ID de tabla, ingresa un nombre para la tabla de destino, por ejemplo, myTable.
    4. Si la tabla de destino es una tabla existente, en Preferencia de escritura para la tabla de destino, selecciona si deseas agregar o reemplazar la tabla con los resultados de la consulta.

      Si la tabla de destino es una tabla nueva, BigQuery crea la tabla cuando ejecutas la consulta.

    5. En la sección Configuración adicional, haz clic en el menú Ubicación de los datos y, luego, selecciona una opción.

      En este ejemplo, el conjunto de datos usa_names se almacena en la ubicación multirregión de EE.UU. Si especificas una tabla de destino para esta consulta, el conjunto de datos que contiene la tabla de destino también debe estar en la multirregión de EE.UU. No puedes consultar un conjunto de datos en una ubicación y escribir los resultados en una tabla de destino en otra ubicación.

  7. Haz clic en Guardar.

  8. Haz clic en Ejecutar.

    Si no especificas una tabla de destino, el trabajo de consulta escribe el resultado en una tabla temporal (en caché).

  9. Opcional: para ordenar los resultados de la consulta, haz clic en Abrir el menú de ordenamiento junto al nombre de la columna y selecciona un orden. Si la estimación de bytes procesados del orden es mayor que cero, la cantidad de bytes se muestra en la parte superior del menú.

  10. Opcional: Para ver los resultados de tu consulta, ve a la pestaña Gráfico. Puedes acercar o alejar el gráfico, descargarlo como un archivo PNG, o activar o desactivar la visibilidad de la leyenda.

    En el panel Configuración del gráfico, puedes cambiar el tipo de gráfico (línea, barra o de dispersión) y configurar sus medidas y dimensiones. Los campos de este panel se completan previamente con la configuración inicial deducida del esquema de tabla de destino de la consulta. La configuración se conserva entre las siguientes ejecuciones de consultas en el mismo editor de consultas. Las dimensiones admiten INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME y los tipos de datos STRING, mientras que las medidas admiten INTEGER, INT64, FLOAT, FLOAT64, NUMERIC y los tipos de datos BIGNUMERIC.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Usa el comando bq query y especifica la marca --batch. En la siguiente marca, la marca --use_legacy_sql=false te permite usar la sintaxis de GoogleSQL.

    bq query \
        --batch \
        --use_legacy_sql=false \
        'QUERY'

    Reemplaza QUERY por una consulta de GoogleSQL válida. Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    bq query \
        --batch \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    El trabajo de consulta escribe el resultado en una tabla temporal (en caché).

    De manera opcional, puedes especificar la tabla y la ubicación de destino para los resultados de la consulta. Si deseas escribir los resultados en una tabla existente, incluye la marca adecuada para agregar (--append_table=true) o reemplazar (--replace=true) la tabla.

    bq query \
        --batch \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'

    Reemplaza lo siguiente:

    • LOCATION: Es la región o multirregión para la tabla de destino, por ejemplo, US.

      En este ejemplo, el conjunto de datos usa_names se almacena en la ubicación multirregión de EE.UU. Si especificas una tabla de destino para esta consulta, el conjunto de datos que contiene la tabla de destino también debe estar en la multirregión de EE.UU. No puedes consultar un conjunto de datos en una ubicación y escribir los resultados en una tabla de destino en otra ubicación.

      Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.

    • TABLE: Es un nombre para la tabla de destino, por ejemplo, myDataset.myTable.

      Si la tabla de destino es una tabla nueva, BigQuery crea la tabla cuando ejecutas la consulta. Sin embargo, debes especificar un conjunto de datos existente.

      Si la tabla no está en tu proyecto actual, agrega el ID del proyecto de Google Cloud con el formato PROJECT_ID:DATASET.TABLE, por ejemplo, myProject:myDataset.myTable. Si no se especifica --destination_table, se genera un trabajo de consulta que escribe el resultado en una tabla temporal.

API

Para ejecutar una consulta con la API, inserta un nuevo trabajo y propaga la propiedad de configuración del trabajo query. Opcionalmente, especifica tu locationubicaciónjobReference en la propiedad de la sección del recurso de trabajo.

Cuando propagues las propiedades del trabajo de consulta, incluye la propiedad configuration.query.priority y establece el valor en BATCH.

Busca resultado mediante una llamada a getQueryResults. Busca hasta que jobComplete sea igual a true. Verifica si hay errores y advertencias en la lista errors.

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"
	"time"

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

// queryBatch demonstrates issuing a query job using batch priority.
func queryBatch(w io.Writer, projectID, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// dstDatasetID := "mydataset"
	// dstTableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// Build an aggregate table.
	q := client.Query(`
		SELECT
  			corpus,
  			SUM(word_count) as total_words,
  			COUNT(1) as unique_words
		FROM ` + "`bigquery-public-data.samples.shakespeare`" + `
		GROUP BY corpus;`)
	q.Priority = bigquery.BatchPriority
	q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)

	// Start the job.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Job is started and will progress without interaction.
	// To simulate other work being done, sleep a few seconds.
	time.Sleep(5 * time.Second)
	status, err := job.Status(ctx)
	if err != nil {
		return err
	}

	state := "Unknown"
	switch status.State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	// You can continue to monitor job progress until it reaches
	// the Done state by polling periodically.  In this example,
	// we print the latest status.
	fmt.Fprintf(w, "Job %s in Location %s currently in state: %s\n", job.ID(), job.Location(), state)

	return nil

}

Java

Para ejecutar una consulta por lotes, establece la prioridad de consulta en QueryJobConfiguration.Priority.BATCH cuando crees una QueryJobConfiguration.

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.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to query batch in a table
public class QueryBatch {

  public static void runQueryBatch() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String query =
        "SELECT corpus"
            + " FROM `"
            + projectId
            + "."
            + datasetName
            + "."
            + tableName
            + " GROUP BY corpus;";
    queryBatch(query);
  }

  public static void queryBatch(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)
              // Run at batch priority, which won't count toward concurrent rate limit.
              .setPriority(QueryJobConfiguration.Priority.BATCH)
              .build();

      TableResult results = bigquery.query(queryConfig);

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query batch performed successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query batch 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 and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryBatch() {
  // Runs a query at batch priority.

  // Create query job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationquery
  const queryJobConfig = {
    query: `SELECT corpus
            FROM \`bigquery-public-data.samples.shakespeare\` 
            LIMIT 10`,
    useLegacySql: false,
    priority: 'BATCH',
  };

  // Create job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfiguration
  const jobConfig = {
    // Specify a job configuration to set optional job resource properties.
    configuration: {
      query: queryJobConfig,
    },
  };

  // Make API request.
  const [job] = await bigquery.createJob(jobConfig);

  const jobId = job.metadata.id;
  const state = job.metadata.status.state;
  console.log(`Job ${jobId} is currently in state ${state}`);
}

Python

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(
    # Run at batch priority, which won't count toward concurrent rate limit.
    priority=bigquery.QueryPriority.BATCH
)

sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config)  # Make an API request.

# Check on the progress by getting the job's updated state. Once the state
# is `DONE`, the results are ready.
query_job = client.get_job(
    query_job.job_id, location=query_job.location
)  # Make an API request.

print("Job {} is currently in state {}".format(query_job.job_id, query_job.state))

Modo optimizado de consultas cortas

El modo optimizado de consultas cortas está diseñado para mejorar la latencia general de las consultas cortas que son comunes en cargas de trabajo, como paneles o exploración de datos. Ejecuta la consulta y muestra los resultados intercalados para las instrucciones SELECT. Las consultas que usan el modo optimizado de consulta breve no crean un trabajo cuando se ejecutan, a menos que BigQuery determine que es necesario crear un trabajo para completar la consulta.

Para habilitar el modo optimizado de consulta corta, configura el campo jobCreationMode de la instancia de QueryRequest en JOB_CREATION_OPTIONAL en el cuerpo de la solicitud jobs.query.

Cuando el valor de este campo se establece en JOB_CREATION_OPTIONAL, BigQuery determina si la consulta puede usar el nuevo modo optimizado de consulta corta. Si es así, BigQuery ejecuta la consulta y muestra todos los resultados en el campo rows de la respuesta. Como no se crea un trabajo para esta consulta, BigQuery no muestra un jobReference en el cuerpo de la respuesta. En su lugar, muestra un campo queryId que puedes usar para obtener estadísticas sobre la consulta con la vista INFORMATION_SCHEMA.JOBS. Como no se crea ningún trabajo, no hay jobReference que se pueda pasar a las APIs de jobs.get y jobs.getQueryResults para buscar consultas cortas.

Si BigQuery determina que se requiere un trabajo para completar la consulta, se muestra un jobReference. Puedes inspeccionar el campo job_creation_reason en la vista INFORMATION_SCHEMA.JOBS para determinar el motivo por el que se creó un trabajo para la consulta. En este caso, debes usar jobs.getQueryResults para recuperar los resultados cuando se complete la consulta.

Cuando uses el valor JOB_CREATION_OPTIONAL, no debes suponer que el campo jobReference siempre está presente en la respuesta. Debes verificar si el campo existe antes de acceder a él.

El modo optimizado de consultas cortas también incluye una caché de resultados de consultas que mejora el rendimiento de las consultas repetidas cuando los datos subyacentes no cambian. Cuando especificas useQueryCache: true (el valor predeterminado es true si no se especifica) y jobCreationMode: JOB_CREATION_OPTIONAL en QueryRequest, BigQuery intenta entregar los resultados de la caché. Ten en cuenta que el almacenamiento en caché se realiza de la mejor manera posible.

Para ejecutar una consulta con el modo optimizado de consultas cortas, selecciona una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Consulta en SQL.

  3. En el Editor de consultas, ingresa una consulta de GoogleSQL válida.

    Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Haz clic en Más y, luego, en Modo optimizado de consultas cortas en Elegir modo de consulta. Haz clic en CONFIRMAR para confirmar la elección.

  5. Haz clic en Ejecutar.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Usa el comando bq query y especifica la marca --job_creation_mode=JOB_CREATION_OPTIONAL. En la siguiente marca, la marca --use_legacy_sql=false te permite usar la sintaxis de GoogleSQL.

    bq query \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=LOCATION \
        'QUERY'

    Reemplaza QUERY por una consulta de GoogleSQL válida y LOCATION por una región válida donde se encuentra el conjunto de datos. Por ejemplo, consulta el conjunto de datos públicos de BigQuery usa_names para determinar los nombres más comunes en Estados Unidos entre los años 1910 y 2013:

    bq query \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=us \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    El trabajo de consulta muestra el resultado intercalado en la respuesta.

API

Para ejecutar una consulta en modo de consulta breve con la API, ejecuta una consulta de forma síncrona y propaga la propiedad QueryRequest. Especifica la propiedad jobCreationMode y establece su valor en JOB_CREATION_OPTIONAL.

Revisa la respuesta. Si jobComplete es igual a true y jobReference está vacío, lee los resultados del campo rows. También puedes obtener el queryId de la respuesta.

Si jobRefernence está presente, puedes consultar jobCreationReason para saber por qué BigQuery creó un trabajo. Busca resultado mediante una llamada a getQueryResults. Realiza una consulta hasta que jobComplete sea igual a true. Verifica si hay errores y advertencias en la lista errors.

Java

Versión disponible: 2.37.1 y versiones posteriores

Es necesario configurar la variable de entorno QUERY_PREVIEW_ENABLED=true.

Ejemplo: Linux o macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Ejemplo: Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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.JobId;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample demonstrating short mode query execution.
//
// While this feature is still in preview, it is controlled by
// setting the environment variable QUERY_PREVIEW_ENABLED=TRUE
// to request short mode execution.
public class QueryShortMode {

  public static void main(String[] args) {
    String query =
        "SELECT name, gender, SUM(number) AS total FROM "
            + "bigquery-public-data.usa_names.usa_1910_2013 GROUP BY "
            + "name, gender ORDER BY total DESC LIMIT 10";
    queryShortMode(query);
  }

  public static void queryShortMode(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();

      // Execute the query. The returned TableResult provides access information
      // about the query execution as well as query results.
      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      JobId jobId = results.getJobId();
      if (jobId != null) {
        System.out.println("Query was run with job state.  Job ID: " + jobId.toString());
      } else {
        System.out.println("Query was run in short mode.  Query ID: " + results.getQueryId());
      }

      // Print the results.
      results
          .iterateAll()
          .forEach(
              row -> {
                System.out.print("name:" + row.get("name").getStringValue());
                System.out.print(", gender: " + row.get("gender").getStringValue());
                System.out.print(", total: " + row.get("total").getLongValue());
                System.out.println();
              });

    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Para ejecutar una consulta con un proxy, visita Configura un proxy.

Python

Versión disponible: 3.21.0 y versiones posteriores

Es necesario configurar la variable de entorno QUERY_PREVIEW_ENABLED=true.

Ejemplo: Linux o macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Ejemplo: Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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.

# This example demonstrates issuing a query that may be run in short query mode.
#
# To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
# environmental variable should be set to `TRUE`.
from google.cloud import bigquery

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

query = """
    SELECT
        name,
        gender,
        SUM(number) AS total
    FROM
        bigquery-public-data.usa_names.usa_1910_2013
    GROUP BY
        name, gender
    ORDER BY
        total DESC
    LIMIT 10
"""
# Run the query.  The returned `rows` iterator can return information about
# how the query was executed as well as the result data.
rows = client.query_and_wait(query)

if rows.job_id is not None:
    print("Query was run with job state.  Job ID: {}".format(rows.job_id))
else:
    print("Query was run in short mode.  Query ID: {}".format(rows.query_id))

print("The query data:")
for row in rows:
    # Row values can be accessed by field name or index.
    print("name={}, gender={}, total={}".format(row[0], row[1], row["total"]))

Nodo

Versión disponible: 7.6.1 y versiones posteriores

Es necesario configurar la variable de entorno QUERY_PREVIEW_ENABLED=true.

Ejemplo: Linux o macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Ejemplo: Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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.

// Demonstrates issuing a query that may be run in short query mode.
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.

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

async function queryShortMode() {
  // SQL query to run.

  const sqlQuery = `
    SELECT name, gender, SUM(number) AS total
    FROM bigquery-public-data.usa_names.usa_1910_2013
    GROUP BY name, gender
    ORDER BY total DESC
    LIMIT 10`;

  // Run the query
  const [rows, , res] = await bigquery.query(sqlQuery);

  if (!res.jobReference) {
    console.log(`Query was run in short mode. Query ID: ${res.queryId}`);
  } else {
    const jobRef = res.jobReference;
    const qualifiedId = `${jobRef.projectId}.${jobRef.location}.${jobRef.jobId}`;
    console.log(
      `Query was run with job state. Job ID: ${qualifiedId}, Query ID: ${res.queryId}`
    );
  }
  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

Go

Versión disponible: 1.58.0 y versiones posteriores

Es necesario configurar la variable de entorno QUERY_PREVIEW_ENABLED=true.

Ejemplo: Linux o macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Ejemplo: Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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"
	"google.golang.org/api/iterator"
)

// queryShortMode demonstrates issuing a query that may be run in short query mode.
//
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.
func queryShortMode(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: %w", err)
	}
	defer client.Close()

	q := client.Query(`
		SELECT
  			name, gender,
  			SUM(number) AS total
		FROM
			bigquery-public-data.usa_names.usa_1910_2013
		GROUP BY 
			name, gender
		ORDER BY
			total DESC
		LIMIT 10
		`)
	// Run the query and process the returned row iterator.
	it, err := q.Read(ctx)
	if err != nil {
		return fmt.Errorf("query.Read(): %w", err)
	}

	// The iterator provides information about the query execution.
	// Queries that were run in short query mode will not have the source job
	// populated.
	if it.SourceJob() == nil {
		fmt.Fprintf(w, "Query was run in short mode.  Query ID: %q\n", it.QueryID())
	} else {
		j := it.SourceJob()
		qualifiedJobID := fmt.Sprintf("%s:%s.%s", j.ProjectID(), j.Location(), j.ID())
		fmt.Fprintf(w, "Query was run with job state.  Job ID: %q, Query ID: %q\n",
			qualifiedJobID, it.QueryID())
	}

	// Print row data.
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Controlador JDBC

Versión disponible: JDBC v1.6.1

Requiere configurar JobCreationMode=2 en la cadena de conexión.

    jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;JobCreationMode=2;Location=US;
  

Controlador ODBC

Versión disponible: ODBC v3.0.7.1016

Requiere configurar JobCreationMode=2 en el archivo .ini.

    [ODBC Data Sources]
    Sample DSN=Simba Google BigQuery ODBC Connector 64-bit
    [Sample DSN]
    JobCreationMode=2
  

Cuotas

Para obtener información sobre las cuotas relacionadas con las consultas interactivas y por lotes, consulta Trabajos de consulta.

Supervisa las consultas

Puedes obtener información sobre las consultas a medida que se ejecutan con el explorador de trabajos o consultando la vista INFORMATION_SCHEMA.JOBS_BY_PROJECT.

Ejecución de prueba

Una prueba de validación en BigQuery proporciona la siguiente información:

Las pruebas de validación no usan ranuras de consulta y no se te cobra por realizar una prueba de validación. Puedes usar la estimación que muestra la ejecución de prueba para calcular los costos de las consultas en la calculadora de precios.

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))

¿Qué sigue?