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.

Consultas interactivas frente a consultas por lotes

En BigQuery, puedes ejecutar dos tipos de consultas:

  • Trabajos de consulta interactivos, que son trabajos que BigQuery ejecuta a pedido.
  • Trabajos de consulta por lotes: que son trabajos que BigQuery espera para ejecutar hasta que los recursos de procesamiento inactivos estén disponibles.

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:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Estos roles predefinidas 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
  • 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.

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:

Consola

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Redactar una nueva consulta.

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

  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.

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

Rita

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

Para obtener más información, consulta Consultas interactivas frente a consultas por lotes.

Ejecuta una consulta por lotes

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

Consola

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Redactar una nueva consulta.

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

Para obtener más información, consulta Consultas interactivas frente a consultas por lotes.

Cuotas

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

Visualiza la cantidad de consultas interactivas y por lotes

Puedes ver la cantidad de consultas interactivas y por lotes a través de la vista INFORMATION_SCHEMA.JOBS_BY_PROJECT. En el siguiente ejemplo, se usa la vista INFORMATION_SCHEMA.JOBS_BY_PROJECT para obtener la cantidad de consultas interactivas y por lotes que se ejecutaron en las últimas 7 horas:

SELECT
  priority,
  COUNT(*) active_jobs,
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour)
  AND end_time IS NULL
  AND job_type = 'QUERY'
GROUP BY priority

La vista INFORMATION_SCHEMA.JOBS_BY_PROJECT usa el campo priority para indicar si una consulta es INTERACTIVE o BATCH. Para obtener más información, consulta Esquema.

Realiza una prueba de validación

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 ejecuciones de prueba

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

Consola

  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?