Ejecuta trabajos de consulta interactivos y por lotes

En este documento, se describe cómo ejecutar trabajos de consulta interactivos (a pedido) y por lotes.

Permisos necesarios

Los trabajos son acciones que BigQuery ejecuta en tu nombre para cargar datos, exportar datos, consultar datos o copiar datos.

Cuando usas Cloud Console, la IU web clásica de BigQuery o la CLI para cargar, exportar, consultar o copiar datos, se crea, programa y ejecuta de forma automática un recurso de trabajo. También puedes crear un trabajo de carga, exportación, consulta o copia de manera programática. Cuando creas un trabajo de manera programática, BigQuery programa y ejecuta el trabajo por ti.

Dado que los trabajos pueden tardar mucho tiempo en completarse, estos se ejecutan de forma asíncrona y se pueden sondear para determinar su estado. Las acciones más cortas, como obtener metadatos o realizar una lista de recursos, no se administran mediante un recurso de trabajo.

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

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

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

Además, si un usuario tiene permisos bigquery.datasets.create, cuando cree un conjunto de datos, se le otorgará el permiso bigquery.dataOwner para acceder a este. El acceso bigquery.dataOwner permite al usuario consultar tablas y vistas del conjunto de datos.

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

Ejecuta consultas interactivas

De manera predeterminada, BigQuery ejecuta trabajos de consulta interactivos (a pedido), lo que significa que la consulta se ejecuta en cuanto sea posible. Las consultas interactivas se toman en cuenta para tu límite de frecuencia simultánea y límite diario.

Los resultados de las consultas se almacenan siempre en una tabla temporal o permanente. Puedes elegir si deseas adjuntar o sobrescribir datos en una tabla existente o si deseas crear una tabla nueva si no existe ninguna con el mismo nombre.

Para ejecutar una consulta interactiva que escribe en una tabla temporal, haz lo siguiente:

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. Haz clic en Redactar consulta nueva.

    Redactar consulta nueva

  3. Ingresa una consulta válida de SQL en BigQuery en el área de texto Editor de consulta.

  4. Para cambiar la ubicación de procesamiento de datos (opcional), haz clic en Más y, luego, en Configuración de consulta. Debajo de Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos. Por último, haz clic en Guardar para actualizar la configuración de la consulta.

  5. Haz clic en Ejecutar.

Esto crea un trabajo de consulta que escribe el resultado en una tabla temporal.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. Haz clic en Redactar consulta.

  3. Ingresa una consulta de SQL válida en el área de texto Consulta nueva.

  4. Haz clic en Show options.

  5. En Ubicación de procesamiento, haz clic en Sin especificar y elige la ubicación de tus datos (opcional).

  6. Haz clic en Ejecutar consulta.

Esto crea un trabajo de consulta que escribe el resultado en una tabla temporal.

CLI

Ingresa el comando bq query y agrega el texto de tu consulta.

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

Puedes especificar las siguientes marcas opcionales. Esta lista incluye algunas de las marcas más comunes. Para obtener una lista completa de las marcas del comando query, consulta bq query en la referencia de la herramienta de línea de comandos de bq.

Especifica lo siguiente:

  • La marca --destination_table para crear una tabla permanente basada en los resultados de la consulta. Para escribir los resultados de las consultas en una tabla que no se encuentra en tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos con el siguiente formato: project_id:dataset. Si no se especifica --destination_table, se genera un trabajo de consulta que escribe el resultado en una tabla temporal (en caché).
  • La marca --append_table para agregar los resultados de la consulta a una tabla de destino.
  • La marca --destination_kms_key para usar una clave del servicio de administración de claves a fin de encriptar los datos de la tabla de destino.
  • La marca --use_legacy_sql=false para usar la sintaxis de SQL estándar. Puedes establecer una sintaxis predeterminada para la herramienta de línea de comandos con el archivo .bigqueryrc.
  • La marca --label para aplicar una etiqueta al trabajo de consulta en la forma clave:valor. Repite esta marca para especificar varios archivos.
  • La marca --max_rows o -n para especificar la cantidad de filas que se mostrarán en los resultados de la consulta.
  • La marca --maximum_bytes_billed para limitar los bytes facturados por la consulta. Si la consulta supera el límite, falla (sin incurrir en cargos). Si no se especifica, los bytes facturados se configuran en el valor predeterminado del proyecto.
  • La marca --udf_resource para cargar y evaluar un archivo de código que se usará como recurso de función definido por el usuario. Puedes especificar un URI de Cloud Storage o la ruta de acceso a un archivo de código local. Repite esta marca para especificar varios archivos.

Ingresa el siguiente comando para ejecutar una consulta interactiva mediante la sintaxis de SQL estándar:

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

Esta es una explicación de los parámetros del ejemplo anterior:

  • location es el nombre de la ubicación en la que se procesa la consulta. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes establecer el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • query es una consulta en la sintaxis de SQL estándar.

Por ejemplo:

Ingresa el siguiente comando para escribir los resultados de consultas interactivas en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. La consulta recupera datos desde el conjunto de datos públicos Datos de nombres de EE.UU..

bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC'

Ingresa el siguiente comando para escribir los resultados de consultas interactivas en una tabla de destino llamada mytable en mydataset. El conjunto de datos está en myotherproject, no en tu proyecto predeterminado. La consulta obtiene datos de una tabla no particionada: el conjunto de datos públicos Datos de nombres de EE.UU..

bq query \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC'

API

Para ejecutar una consulta con la API, inserta un trabajo nuevo y propaga la propiedad jobs#configuration.query. Especifica tu ubicación en la propiedad location de la sección jobReference 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# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // 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 C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

PHP

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Ruby

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Ejecuta consultas por lotes

BigQuery también ofrece consultas por lotes. BigQuery pone en cola cada consulta por lotes en tu nombre y comienza la consulta en cuanto los recursos inactivos estén disponibles en el grupo de recursos compartidos de BigQuery. Esto suele ocurrir en unos minutos. Si BigQuery no inicia la consulta en 24 horas, BigQuery cambia la prioridad del trabajo a interactivo.

Las consultas por lotes no cuentan para tu límite de frecuencia simultánea, lo que puede facilitar el inicio de muchas consultas a la vez. Las consultas por lotes utilizan los mismos recursos que las consultas interactivas (bajo demanda). Si usas consultas por lotes y consultas interactivas con tarifa plana, comparte tus espacios asignados.

Para ejecutar una consulta por lotes:

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud Console

  2. Haz clic en el botón Redactar nueva consulta.

    Redactar consulta nueva

  3. Ingresa una consulta de SQL válida en el área de texto del Editor de consultas.

  4. Haz clic en el botón Más y, luego, en Configuración de consulta.

    Configuración de consulta

  5. Selecciona la opción Por lotes en la sección Prioridad del trabajo.

    Ejecución por lotes

  6. En Ubicación de procesamiento, haz clic en Sin especificar y elige la ubicación de tus datos (opcional).

  7. Haz clic en Guardar para actualizar la configuración de la consulta.

  8. Haz clic en Ejecutar.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. Haz clic en el botón Redactar consulta.

  3. Ingresa una consulta válida de SQL en BigQuery en el área de texto Consulta nueva.

  4. Haz clic en el botón Mostrar opciones.

  5. Selecciona la opción Por lotes en la sección Prioridad de la consulta.

  6. En Ubicación de procesamiento, haz clic en Sin especificar y elige la ubicación de tus datos (opcional).

  7. Haz clic en el botón Ejecutar consulta.

CLI

Ingresa el comando bq query y agrega el texto de tu consulta. Especifica la marca -- batch para ejecutar una consulta por lotes.

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

Puedes especificar las siguientes marcas opcionales. Esta lista incluye algunas de las marcas más comunes. Para obtener una lista completa de las marcas del comando query, consulta bq query en la referencia de la herramienta de línea de comandos de bq.

Especifica lo siguiente:

  • La marca --destination_table para crear una tabla permanente basada en los resultados de la consulta. Para escribir los resultados de las consultas en una tabla que no se encuentra en tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos con el siguiente formato: project_id:dataset. Si no se especifica --destination_table, se genera un trabajo de consulta que escribe el resultado en una tabla temporal (en caché).
  • La marca --append_table para agregar los resultados de la consulta a una tabla de destino.
  • La marca --destination_kms_key para usar una clave del servicio de administración de claves a fin de encriptar los datos de la tabla de destino.
  • La marca --use_legacy_sql=false para usar la sintaxis de SQL estándar. Puedes establecer una sintaxis predeterminada para la herramienta de línea de comandos con el archivo .bigqueryrc.
  • La marca --label para aplicar una etiqueta al trabajo de consulta en la forma clave:valor. Repite esta marca para especificar varios archivos.
  • La marca --max_rows o -n para especificar la cantidad de filas que se mostrarán en los resultados de la consulta.
  • La marca --maximum_bytes_billed para limitar los bytes facturados por la consulta. Si la consulta supera el límite, falla (sin incurrir en cargos). Si no se especifica, los bytes facturados se configuran en el valor predeterminado del proyecto.
  • La marca --udf_resource para cargar y evaluar un archivo de código que se usará como recurso de función definido por el usuario. Puedes especificar un URI de Cloud Storage o la ruta de acceso a un archivo de código local. Repite esta marca para especificar varios archivos.

Ingresa el siguiente comando para ejecutar una consulta por lotes con la sintaxis de SQL estándar:

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

Esta es una explicación de los parámetros del ejemplo anterior:

  • location es el nombre de la ubicación en la que se procesa la consulta. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes establecer el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • query es una consulta en la sintaxis de SQL estándar.

Por ejemplo:

Ingresa el siguiente comando para escribir los resultados de consultas por lotes en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. La consulta recupera datos desde el conjunto de datos públicos Datos de nombres de EE.UU..

bq query \
--batch \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC'

Ingresa el siguiente comando para escribir los resultados de consultas por lotes en una tabla de destino llamada mytable en mydataset. El conjunto de datos está en myotherproject, no en tu proyecto predeterminado. La consulta obtiene datos de una tabla no particionada: el conjunto de datos públicos Datos de nombres de EE.UU..

bq query \
--batch \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC'

API

Para ejecutar una consulta con la API, inserta un nuevo trabajo y propaga la propiedad de configuración del trabajo query. Especifica tu ubicación en la propiedad location de la sección jobReference del recurso de trabajo (opcional).

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

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Java

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

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(query)
        // Run at batch priority, which won't count toward concurrent rate
        // limit.
        .setPriority(QueryJobConfiguration.Priority.BATCH)
        .build();

// Location must match that of the dataset(s) referenced in the query.
JobId jobId = JobId.newBuilder().setRandomJob().setLocation("US").build();
String jobIdString = jobId.getJob();

// API request - starts the query.
bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

// Check on the progress by getting the job's updated state. Once the state
// is `DONE`, the results are ready.
Job queryJob = bigquery.getJob(
    JobId.newBuilder().setJob(jobIdString).setLocation("US").build());
System.out.printf(
    "Job %s in location %s currently in state: %s%n",
    queryJob.getJobId().getJob(),
    queryJob.getJobId().getLocation(),
    queryJob.getStatus().getState().toString());

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en la guía de inicio rápido de BigQuery con bibliotecas cliente. Para obtener más información, consulta la Documentación de referencia de la API de C# de BigQuery.


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.PollUntilCompleted();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.