Cómo escribir resultados de consultas

En este documento, se explica cómo escribir o guardar resultados de consultas.

Tablas temporales y permanentes

BigQuery guarda todos los resultados de las consultas en una tabla, que puede ser permanente o temporal:

  • Las tablas temporales son tablas con nombres aleatorios que se guardan en conjuntos de datos especiales. Se usan para almacenar en caché los resultados de las consultas. Las tablas temporales tiene un ciclo de vida aproximado de 24 horas. Este tipo de tablas no se pueden compartir ni son visibles si se usa alguno de los métodos de generación de listas estándar o bien otros métodos de manipulación de tablas. No se te cobrará por almacenar tablas temporales.

  • Las tablas permanentes pueden ser tablas nuevas o existentes en cualquier conjunto de datos al que tengas acceso. Si escribes los resultados de las consultas en una tabla nueva, se te cobrará por almacenar los datos. Cuando escribes los resultados de las consultas en una tabla permanente, las tablas que consultas deben estar en la misma ubicación que el conjunto de datos que contiene la tabla de destino.

Cómo escribir los resultados de las consultas en una tabla permanente

Cuando escribes los resultados de las consultas en una tabla permanente, puedes crear una tabla nueva, agregar los resultados en una tabla existente o reemplazar una tabla existente. Puedes escribir los resultados de las consultas en una tabla permanente a través de alguna de las alternativas siguientes:

  • Empleando la GCP Console o la IU web de BigQuery
  • Empleando el comando bq query de la herramienta de línea de comandos
  • Llamando al método de API jobs.insert y configurando un trabajo de query

Permisos necesarios

Los permisos necesarios para escribir los resultados de las consultas en una tabla permanente dependen de la disposición de escritura de los datos.

Permisos para escribir los resultados de las consultas en una tabla nueva

Si escribes los resultados de las consultas en una tabla nueva, debes tener acceso de WRITER a nivel del conjunto de datos o una función de IAM a nivel del proyecto que incluya permisos bigquery.tables.create. Las siguientes funciones de IAM a nivel del proyecto predefinidas incluyen permisos bigquery.tables.create:

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede crear tablas en cualquier conjunto de datos que cree. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER respecto del conjunto de datos. El acceso de OWNER a un conjunto de datos otorga al usuario el control total del conjunto y de todas las tablas que contenga.

Si deseas obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Control de acceso. A fin de obtener más información sobre las funciones a nivel del conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Permisos para reemplazar o agregar datos

Si usas los resultados de las consultas para reemplazar una tabla existente o agregar datos a una tabla existente, debes tener acceso de WRITER a nivel del conjunto de datos o una función de IAM a nivel del proyecto que incluya permisos bigquery.tables.updateData. Las siguientes funciones de IAM a nivel del proyecto predefinidas incluyen permisos bigquery.tables.updateData:

Además, debido a que la función bigquery.user tiene los permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede reemplazar o agregar datos en cualquier tabla que cree en el conjunto de datos. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER respecto del conjunto de datos. El acceso de OWNER a un conjunto de datos otorga al usuario el control total del conjunto y de todas las tablas que contenga.

Si deseas obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Control de acceso. A fin de obtener más información sobre las funciones a nivel del conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Cómo escribir resultados de consultas

Para escribir resultados de consultas en una tabla permanente, sigue estos pasos:

Console

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

  2. En el panel de navegación, en la sección Recursos, expande tu proyecto y selecciona un conjunto de datos.

  3. Si el Editor de consultas está oculto, haz clic en Mostrar editor en la parte superior derecha de la ventana.

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

  5. Haz clic en Más debajo del editor y selecciona Configuración de consulta

    Configuración de consulta

  6. Marca la casilla Establecer una tabla de destino para los resultados de la consulta

    Establecer destino

  7. En la sección Destino, selecciona el Nombre del proyecto y el Nombre del conjunto de datos adecuados donde se creará la tabla, y elige un Nombre de tabla.

  8. En la sección Preferencia de escritura para la tabla de destino, elige una de las siguientes opciones:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.
  9. En Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos (opcional).

  10. Haz clic en Ejecutar consulta. Esta acción crea un trabajo de consulta que escribe los resultados de las consultas en la tabla que especificaste.

Como alternativa, si te olvidas de especificar una tabla de destino antes de ejecutar tu consulta, puedes hacer clic en el botón Guardar como vista debajo del editor para copiar la tabla temporal a una permanente.

IU clásica

Opción 1: usa una declaración de DDL

Las declaraciones del lenguaje de definición de datos (DDL) te permiten crear y modificar tablas con la sintaxis de consultas de SQL estándar.

Para obtener más información, consulta la página declaración CREATE TABLE y el ejemplo CREATE TABLE: Crear una tabla nueva a partir de una tabla existente.

Opción 2: usa la IU web clásica

  1. Dirígete a la IU web clásica de BigQuery.
    Ir a la IU web clásica de BigQuery

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

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

  4. Haz clic en Mostrar opciones.

  5. En la sección Tabla de destino, haz clic en Seleccionar tabla.

  6. En el cuadro de diálogo Seleccionar tabla de destino, haz lo siguiente:

    1. En Proyecto, elige el proyecto en el que se creará la tabla de destino.

    2. En Conjunto de datos, elige el conjunto de datos que almacenará la tabla.

    3. En el campo ID de tabla, ingresa un nombre de tabla. El nombre debe ser único en el conjunto de datos de destino. El nombre de la tabla puede tener hasta 1,024 caracteres de la A a la Z (mayúsculas o minúsculas), números del 0 al 9, o _ (el carácter de guion bajo).

    4. Haz clic en Aceptar.

  7. En la sección Tabla de destino, en Preferencia de escritura, elige una de las siguientes opciones:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.
  8. En Ubicación de procesamiento, haz clic en Sin especificar y elige la ubicación de tus datos (opcional).

  9. Haz clic en Ejecutar consulta. Esta acción crea un trabajo de consulta que escribe los resultados de las consultas en la tabla que especificaste.

Como alternativa, si te olvidas de especificar una tabla de destino antes de ejecutar tu consulta, puedes hacer clic en el botón Guardar como tabla en la ventana de resultados para copiar la tabla temporal en una permanente.

CLI

Ingresa el comando bq query y especifica la marca --destination_table para crear una tabla permanente basada en los resultados de las consultas. Especifica la marca use_legacy_sql=false para usar la sintaxis de SQL estándar. A fin de 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].

Proporciona la marca --location y establece el valor como tu ubicación.

Para controlar la disposición de escritura de una tabla de destino existente, especifica una de las siguientes marcas opcionales:

  • --append_table: si existe la tabla de destino, los resultados de las consultas se agregan en ella.
  • --replace: si existe la tabla de destino, se reemplaza por los resultados de las consultas.

    bq --location=[LOCATION] query --destination_table [PROJECT_ID]:[DATASET].[TABLE] --use_legacy_sql=false '[QUERY]'
    

Donde:

  • [LOCATION] es el nombre de la ubicación que se usa para procesar la consulta. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes establecer un valor predeterminado para la ubicación mediante el archivo .bigqueryrc.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla en la que escribes los resultados de las consultas.
  • [TABLE] es el nombre de la tabla en la que escribes los resultados de las consultas.
  • [QUERY] es una consulta en la sintaxis de SQL estándar.

Si no se especifica una marca de disposición de escritura, el comportamiento predeterminado es escribir los resultados en la tabla solo si está vacía. Si la tabla existe y no está vacía, se muestra el siguiente error: BigQuery error in query operation: Error processing job '[PROJECT_ID]:bqjob_123abc456789_00000e1234f_1': Already Exists: Table [PROJECT_ID]:[DATASET].[TABLE].

Ejemplos:

Ingresa el siguiente comando para escribir los resultados de las consultas en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. Debido a que no se especifica ninguna marca de disposición de escritura en el comando, la tabla debe ser nueva o estar vacía. De lo contrario, se muestra un error Already exists. La consulta recupera datos del conjunto de datos públicos Datos de nombres de EE.UU.

bq --location=US 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 a fin de usar los resultados de las consultas para reemplazar una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. El comando usa la marca --replace para reemplazar la tabla de destino.

bq --location=US query --destination_table mydataset.mytable --replace --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 agregar los resultados de las consultas a una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en myotherproject, no en tu proyecto predeterminado. El comando usa la marca --append para agregar los resultados de las consultas en la tabla de destino.

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

API

Si quieres guardar los resultados de las consultas en una tabla permanente, llama al método jobs.insert, configura un trabajo de query y, por último, incluye un valor para la propiedad destinationTable. A fin de controlar la disposición de escritura de una tabla de destino existente, configura la propiedad writeDisposition.

Especifica tu ubicación en la propiedad location en la sección jobReference del recurso de trabajo.

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")

q := client.Query("SELECT 17 as my_col")
q.Location = "US" // Location must match the dataset(s) referenced in query.
q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
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.Println(row)
}

Java

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

Para guardar los resultados de las consultas en una tabla permanente, configura la tabla de destino como el TableId que desees en una QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// String destinationDataset = 'my_destination_dataset';
// String destinationTable = 'my_destination_table';
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // Note that setUseLegacySql is set to false by default
    QueryJobConfiguration.newBuilder(query)
        // Save the results of the query to a permanent table.
        .setDestinationTable(TableId.of(destinationDataset, destinationTable))
        .build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Python

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

Para guardar los resultados de las consultas en una tabla permanente, crea una QueryJobConfig y establece el destino como la TableReference que desees. Pasa la configuración del trabajo al método de consulta.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref
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,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print('Query results loaded to table {}'.format(table_ref.path))

Cómo escribir resultados de consultas grandes

Por lo general, las consultas tienen un tamaño de respuesta máximo. Si planeas ejecutar una consulta que podría mostrar resultados más grandes, puedes hacer lo siguiente:

  • En SQL estándar, especifica una tabla de destino para los resultados de las consultas.
  • En SQL heredado, especifica una tabla de destino y configura la opción allowLargeResults.

Cuando especificas una tabla de destino para los resultados de las consultas grandes, se te cobra por almacenar los datos.

Limitaciones

En SQL heredado, la escritura de resultados grandes está sujeta a las siguientes limitaciones:

  • Debes especificar una tabla de destino.
  • No puedes especificar una cláusula ORDER BY, TOP ni LIMIT de nivel superior. Si lo haces, se anula el beneficio de usar allowLargeResults porque el resultado de la consulta ya no se puede procesar en paralelo.
  • Las funciones analíticas solo pueden mostrar resultados de consultas grandes si se usan con una cláusula PARTITION BY.

Cómo escribir resultados grandes con SQL heredado

Para escribir conjuntos de resultados grandes mediante SQL heredado, sigue estos pasos:

Console

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

  2. Haz clic en Redactar consulta nueva.

  3. Ingresa una consulta de SQL de BigQuery válida en el área de texto del Editor de consultas. Usa el prefijo #legacySQL o asegúrate de que la opción Usar SQL heredado esté marcada en la configuración de la consulta.

  4. Haz clic en Más y selecciona Configuración de consulta.

    Configuración de consulta

  5. En Destino, marca Establecer una tabla de destino para los resultados de la consulta.

    Establecer destino

  6. En Nombre del proyecto, elige el proyecto en el que se creará la tabla de destino.

  7. En Nombre del conjunto de datos, elige el conjunto de datos en el que se almacenará la tabla.

  8. En el campo Nombre de tabla, ingresa un nombre de tabla.

  9. Si escribes un conjunto de resultados grandes en una tabla existente, puedes usar las opciones de Preferencia de escritura para la tabla de destino para controlar la disposición de escritura de la tabla de destino:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.

    Reemplazar radio de tabla

  10. En Tamaño de los resultados, marca Permitir resultados grandes (sin límite de tamaño).

    Tamaño de los resultados de las consultas

  11. En Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos (opcional).

    Ubicación de procesamiento de consulta

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

  13. Haz clic en Ejecutar. Esta acción crea un trabajo de consulta que escribe el conjunto de resultados grandes en la tabla que especificaste.

IU clásica

  1. Dirígete 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. Usa el prefijo #legacySQL o asegúrate de que la opción Usar SQL heredado esté marcada en las opciones de la consulta.

  4. Haz clic en Mostrar opciones.

  5. En Tabla de destino, haz clic en Seleccionar tabla.

  6. En el cuadro de diálogo Seleccionar tabla de destino, haz lo siguiente:

    1. En Proyecto, elige el proyecto en el que se creará la tabla de destino.

    2. En Conjunto de datos, elige el conjunto de datos que almacenará la tabla.

    3. En el campo ID de tabla, ingresa un nombre de tabla.

    4. Haz clic en Aceptar.

  7. Si escribes un conjunto de resultados grandes en una tabla existente, puedes usar la opción Preferencia de escritura para controlar la disposición de escritura de la tabla de destino:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.
  8. En Tamaño de los resultados, marca Permitir resultados grandes.

    Opción de permitir resultados grandes

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

  10. Haz clic en Ejecutar consulta. Esta acción crea un trabajo de consulta que escribe el conjunto de resultados grandes en la tabla que especificaste.

Línea de comandos

Usa la marca --allow_large_results con la marca --destination_table para crear una tabla de destino que contenga el conjunto de resultados grandes. Debido a que la opción --allow_large_results solo se aplica al SQL heredado, también debes especificar la marca --use_legacy_sql=true. A fin de 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]. Proporciona la marca --location y establece el valor como tu ubicación.

Para controlar la disposición de escritura de una tabla de destino existente, especifica una de las siguientes marcas opcionales:

  • --append_table: si existe la tabla de destino, los resultados de las consultas se agregan en ella.
  • --replace: si existe la tabla de destino, se reemplaza por los resultados de las consultas.

    bq --location=[LOCATION] query --destination_table [PROJECT_ID]:[DATASET].[TABLE_NAME] --use_legacy_sql=true --allow_large_results "[QUERY]"
    

Donde:

  • [LOCATION] es el nombre de la ubicación que se usa para procesar la consulta. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla en la que escribes los resultados de las consultas.
  • [TABLE] es el nombre de la tabla en la que escribes los resultados de las consultas.
  • [QUERY] es una consulta en la sintaxis de SQL heredado.

Ejemplos:

Ingresa el siguiente comando para escribir los resultados de las consultas grandes en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. Debido a que no se especifica ninguna marca de disposición de escritura en el comando, la tabla debe ser nueva o estar vacía. De lo contrario, se muestra un error Already exists. La consulta recupera datos del conjunto de datos públicos Datos de nombres de EE.UU. Esta consulta se usa solo como ejemplo. El conjunto de resultados que se muestra no excede el tamaño de respuesta máximo.

bq --location=US query --destination_table mydataset.mytable --use_legacy_sql=true --allow_large_results "SELECT name,number FROM [bigquery-public-data:usa_names.usa_1910_current] WHERE gender = 'M' ORDER BY number DESC"

Ingresa el siguiente comando a fin de usar los resultados de las consultas grandes para reemplazar una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en myotherproject, no en tu proyecto predeterminado. El comando usa la marca --replace para reemplazar la tabla de destino.

bq --location=US query --destination_table mydataset.mytable --replace --use_legacy_sql=true --allow_large_results "SELECT name,number FROM [bigquery-public-data:usa_names.usa_1910_current] WHERE gender = 'M' ORDER BY number DESC"

Ingresa el siguiente comando para agregar los resultados de las consultas grandes en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en myotherproject, no en tu proyecto predeterminado. El comando usa la marca --append para agregar los resultados de las consultas en la tabla de destino.

bq --location=US query --destination_table myotherproject:mydataset.mytable --append --use_legacy_sql=true --allow_large_results "SELECT name,number FROM [bigquery-public-data:usa_names.usa_1910_current] WHERE gender = 'M' ORDER BY number DESC"

API

Para escribir resultados grandes en una tabla de destino, llama al método jobs.insert, configura un trabajo de query y establece la propiedad configuration.query.allowLargeResults como true. Especifica la tabla de destino con la propiedad configuration.query.destinationTable. Para controlar la disposición de escritura de una tabla de destino existente, configura la propiedad configuration.query.writeDisposition.

Especifica tu ubicación en la propiedad location en la sección jobReference del recurso de trabajo.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración de Go incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Go de BigQuery.

q := client.Query(
	"SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;")
q.UseLegacySQL = true
q.AllowLargeResults = true
q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)
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.Println(row)
}

Java

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

Para permitir resultados grandes, configura Permitir resultados grandes como true y establece la tabla de destino con el TableId que desees en una QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// String destinationDataset = 'my_destination_dataset';
// String destinationTable = 'my_destination_table';
String query = "SELECT corpus FROM [bigquery-public-data:samples.shakespeare] GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // To use legacy SQL syntax, set useLegacySql to true.
    QueryJobConfiguration.newBuilder(query)
        .setUseLegacySql(true)
        // Save the results of the query to a permanent table.
        .setDestinationTable(TableId.of(destinationDataset, destinationTable))
        // Allow results larger than the maximum response size.
        // If true, a destination table must be set.
        .setAllowLargeResults(true)
        .build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set use_legacy_sql to True to use legacy SQL syntax.
job_config.use_legacy_sql = True
# Set the destination table
table_ref = client.dataset(dataset_id).table("your_table_id")
job_config.destination = table_ref
job_config.allow_large_results = True
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,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location="US",
    job_config=job_config,
)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print("Query results loaded to table {}".format(table_ref.path))

Cómo descargar y guardar los resultados de las consultas

Después de ejecutar una consulta de SQL, puedes descargar los resultados en un archivo en tu máquina local, guardarlos en Google Drive, en Hojas de cálculo de Google o en una tabla permanente en BigQuery.

Limitaciones

Si quieres descargar y guardar los resultados de las consultas, debes tener en cuenta las siguientes limitaciones:

  • Solo puedes descargar los resultados de las consultas en un archivo local o en Hojas de cálculo de Google en la IU web clásica de BigQuery. Para descargar los resultados en Google Drive, usa GCP Console.
  • Para descargar los resultados de las consultas con la IU web clásica de BigQuery, el conjunto de resultados debe contener menos de 16,000 filas y ocupar 10 MB o menos. Si tus resultados contienen más de 16,000 filas o bien ocupan más de 10 MB, puedes guardarlos en una tabla.
  • Solo puedes descargar los resultados de las consultas localmente en formato CSV o JSON delimitado por saltos de línea.
  • No puedes descargar resultados de consultas que contengan datos anidados y repetidos en formato CSV.
  • No puedes guardar resultados de consultas que contengan datos anidados y repetidos en Hojas de cálculo de Google.
  • Cuando guardes los resultados de las consultas en Hojas de cálculo de Google con la IU web clásica de BigQuery, el conjunto de resultados deberá contener menos de 16,000 filas y ocupar 10 MB o menos. Si tus resultados contienen más de 16,000 filas o bien ocupan más de 10 MB, puedes guardarlos en una tabla.
  • La herramienta de línea de comandos y la API no admiten el almacenamiento de resultados en un archivo local, en Hojas de cálculo de Google ni en Google Drive.
  • Para guardar los resultados de las consultas en Google Drive con GCP Console, el conjunto de resultados debe ocupar 1 GB o menos. Si los resultados ocupan más de 1 GB, puedes guardarlos en una tabla.
  • Solo puedes guardar los resultados de las consultas en Google Drive en formato CSV o JSON delimitado por saltos de línea.

Cómo descargar los resultados de las consultas en un archivo local

La herramienta de línea de comandos y la API no admiten la descarga de resultados de consultas en un archivo local.

Para descargar los resultados de las consultas como un archivo CSV o JSON delimitado por saltos de línea con la IU web, sigue estos pasos:

Console

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

  2. Haz clic en Redactar consulta nueva.

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

  4. Para cambiar la ubicación de procesamiento, haz clic en Más y selecciona Configuración de consulta (opcional). Debajo de Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos.

  5. Haz clic en Ejecutar.

  6. Cuando se muestren los resultados, haz clic en Guardar resultados y selecciona el formato o la ubicación en los que desees guardarlos.

    El archivo se descarga en la ubicación de descarga predeterminada de tu navegador.

IU clásica

  1. Dirígete 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 de SQL válida en el área de texto Consulta nueva.

  4. Haz clic en Mostrar opciones.

  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.

  7. Cuando se muestren los resultados, haz clic en el botón Descargar como CSV o Descargar como JSON ubicado arriba de los resultados de la consulta.

    captura de pantalla de botones para descargar y guardar

    El archivo se descarga en la ubicación de descarga predeterminada de tu navegador.

Cómo guardar los resultados de las consultas en Google Drive

La herramienta de línea de comandos, la API y la IU web clásica de BigQuery no admiten que los resultados de las consultas se guarden en Google Drive.

Sigue estos pasos para guardar los resultados de las consultas en Google Drive con GCP Console:

Console

  1. Abre la IU web de BigQuery en GCP Console.

    Ir a la IU web de BigQuery

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

  3. Haz clic en Ejecutar.

  4. Cuando se muestren los resultados, haz clic en Guardar resultados.

    captura de pantalla del botón guardar resultados

  5. Selecciona CSV (Google Drive) o JSON (Google Drive). Cuando guardas los resultados en Google Drive, no puedes elegir la ubicación. Los resultados siempre se guardan en la ubicación raíz “Mi unidad”.

  6. Guardar los resultados en Google Drive puede tardar unos minutos. Cuando se guardan los resultados, recibes un mensaje emergente que incluye el nombre del archivo: bq-results-[TIMESTAMP]-[RANDOM_CHARACTERS].[CSV or JSON].

    captura de pantalla del botón guardar resultados

  7. En el mensaje emergente, haz clic en Abrir para abrir el archivo o navega hasta Google Drive y haz clic en Mi unidad.

Cómo guardar los resultados de las consultas en una tabla

Para guardar los resultados de las consultas como una tabla, sigue estos pasos:

Console

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

  2. En el panel de navegación, en la sección Recursos, expande tu proyecto y selecciona un conjunto de datos.

  3. Si el Editor de consultas está oculto, haz clic en Mostrar editor en la parte superior derecha de la ventana.

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

  5. Haz clic en Más debajo del editor y selecciona Configuración de consulta

    Configuración de consulta

  6. Marca la casilla Establecer una tabla de destino para los resultados de la consulta

    Establecer destino

  7. En la sección Destino, selecciona el Nombre del proyecto y el Nombre del conjunto de datos adecuados donde se creará la tabla, y elige un Nombre de tabla.

  8. En la sección Preferencia de escritura para la tabla de destino, elige una de las siguientes opciones:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.
  9. En Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos (opcional).

  10. Haz clic en Ejecutar consulta. Esta acción crea un trabajo de consulta que escribe los resultados de las consultas en la tabla que especificaste.

Como alternativa, si te olvidas de especificar una tabla de destino antes de ejecutar tu consulta, puedes hacer clic en el botón Guardar como vista debajo del editor para copiar la tabla temporal a una permanente.

IU clásica

Opción 1: usa una declaración de DDL

Las declaraciones del lenguaje de definición de datos (DDL) te permiten crear y modificar tablas con la sintaxis de consultas de SQL estándar.

Para obtener más información, consulta la página declaración CREATE TABLE y el ejemplo CREATE TABLE: Crear una tabla nueva a partir de una tabla existente.

Opción 2: usa la IU web clásica

  1. Dirígete a la IU web clásica de BigQuery.
    Ir a la IU web clásica de BigQuery

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

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

  4. Haz clic en Mostrar opciones.

  5. En la sección Tabla de destino, haz clic en Seleccionar tabla.

  6. En el cuadro de diálogo Seleccionar tabla de destino, haz lo siguiente:

    1. En Proyecto, elige el proyecto en el que se creará la tabla de destino.

    2. En Conjunto de datos, elige el conjunto de datos que almacenará la tabla.

    3. En el campo ID de tabla, ingresa un nombre de tabla. El nombre debe ser único en el conjunto de datos de destino. El nombre de la tabla puede tener hasta 1,024 caracteres de la A a la Z (mayúsculas o minúsculas), números del 0 al 9, o _ (el carácter de guion bajo).

    4. Haz clic en Aceptar.

  7. En la sección Tabla de destino, en Preferencia de escritura, elige una de las siguientes opciones:

    • Escribir si está vacía: escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla: agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla: reemplaza una tabla existente que tiene el mismo nombre empleando los resultados de las consultas.
  8. En Ubicación de procesamiento, haz clic en Sin especificar y elige la ubicación de tus datos (opcional).

  9. Haz clic en Ejecutar consulta. Esta acción crea un trabajo de consulta que escribe los resultados de las consultas en la tabla que especificaste.

Como alternativa, si te olvidas de especificar una tabla de destino antes de ejecutar tu consulta, puedes hacer clic en el botón Guardar como tabla en la ventana de resultados para copiar la tabla temporal en una permanente.

CLI

Ingresa el comando bq query y especifica la marca --destination_table para crear una tabla permanente basada en los resultados de las consultas. Especifica la marca use_legacy_sql=false para usar la sintaxis de SQL estándar. A fin de 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].

Proporciona la marca --location y establece el valor como tu ubicación.

Para controlar la disposición de escritura de una tabla de destino existente, especifica una de las siguientes marcas opcionales:

  • --append_table: si existe la tabla de destino, los resultados de las consultas se agregan en ella.
  • --replace: si existe la tabla de destino, se reemplaza por los resultados de las consultas.

    bq --location=[LOCATION] query --destination_table [PROJECT_ID]:[DATASET].[TABLE] --use_legacy_sql=false '[QUERY]'
    

Donde:

  • [LOCATION] es el nombre de la ubicación que se usa para procesar la consulta. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes establecer un valor predeterminado para la ubicación mediante el archivo .bigqueryrc.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla en la que escribes los resultados de las consultas.
  • [TABLE] es el nombre de la tabla en la que escribes los resultados de las consultas.
  • [QUERY] es una consulta en la sintaxis de SQL estándar.

Si no se especifica una marca de disposición de escritura, el comportamiento predeterminado es escribir los resultados en la tabla solo si está vacía. Si la tabla existe y no está vacía, se muestra el siguiente error: BigQuery error in query operation: Error processing job '[PROJECT_ID]:bqjob_123abc456789_00000e1234f_1': Already Exists: Table [PROJECT_ID]:[DATASET].[TABLE].

Ejemplos:

Ingresa el siguiente comando para escribir los resultados de las consultas en una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. Debido a que no se especifica ninguna marca de disposición de escritura en el comando, la tabla debe ser nueva o estar vacía. De lo contrario, se muestra un error Already exists. La consulta recupera datos del conjunto de datos públicos Datos de nombres de EE.UU.

bq --location=US 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 a fin de usar los resultados de las consultas para reemplazar una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. El comando usa la marca --replace para reemplazar la tabla de destino.

bq --location=US query --destination_table mydataset.mytable --replace --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 agregar los resultados de las consultas a una tabla de destino llamada mytable en mydataset. El conjunto de datos se encuentra en myotherproject, no en tu proyecto predeterminado. El comando usa la marca --append para agregar los resultados de las consultas en la tabla de destino.

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

API

Si quieres guardar los resultados de las consultas en una tabla permanente, llama al método jobs.insert, configura un trabajo de query y, por último, incluye un valor para la propiedad destinationTable. A fin de controlar la disposición de escritura de una tabla de destino existente, configura la propiedad writeDisposition.

Especifica tu ubicación en la propiedad location en la sección jobReference del recurso de trabajo.

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")

q := client.Query("SELECT 17 as my_col")
q.Location = "US" // Location must match the dataset(s) referenced in query.
q.QueryConfig.Dst = client.Dataset(destDatasetID).Table(destTableID)
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.Println(row)
}

Java

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

Para guardar los resultados de las consultas en una tabla permanente, configura la tabla de destino con el TableId que desees en una QueryJobConfiguration.

// BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// String destinationDataset = 'my_destination_dataset';
// String destinationTable = 'my_destination_table';
String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
QueryJobConfiguration queryConfig =
    // Note that setUseLegacySql is set to false by default
    QueryJobConfiguration.newBuilder(query)
        // Save the results of the query to a permanent table.
        .setDestinationTable(TableId.of(destinationDataset, destinationTable))
        .build();

// Print the results.
for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) {
  for (FieldValue val : row) {
    System.out.printf("%s,", val.toString());
  }
  System.out.printf("\n");
}

Python

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

Para guardar los resultados de las consultas en una tabla permanente, crea una QueryJobConfig y establece el destino con la TableReference que desees. Pasa la configuración del trabajo al método de consulta.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref
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,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print('Query results loaded to table {}'.format(table_ref.path))

Cómo guardar los resultados de las consultas en Hojas de cálculo de Google

La herramienta de línea de comandos y la API no admiten que los resultados de las consultas se guarden en Hojas de cálculo de Google.

Para guardar los resultados de las consultas en Hojas de cálculo de Google mediante la IU web, sigue estos pasos:

Console

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

  2. Haz clic en Redactar consulta nueva.

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

  4. Para cambiar la ubicación de procesamiento, haz clic en Más y selecciona Configuración de consulta (opcional). Debajo de Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación de tus datos.

  5. Haz clic en Ejecutar.

  6. Cuando se muestren los resultados, haz clic en Guardar resultados y selecciona Hojas de cálculo de Google.

  7. Si es necesario, sigue las indicaciones para acceder a tu Cuenta de Google y haz clic en Permitir si quieres permitir que BigQuery escriba los datos en tu carpeta MY Drive de Google Drive.

    Tras seguir las indicaciones, deberías recibir un correo electrónico con el asunto “Herramientas cliente de BigQuery conectadas a tu Cuenta de Google”. El correo electrónico contiene información sobre los permisos que otorgaste y los pasos para quitarlos.

  8. Cuando se guardan los resultados, aparece un mensaje similar al siguiente debajo de los resultados de las consultas en la IU web de BigQuery: Saved to Sheets as "results-20190225-103531. Open. Haz clic en el vínculo del mensaje para ver tus resultados en Hojas de cálculo de Google o navega a tu carpeta My Drive y abre el archivo de forma manual.

    Cuando guardas los resultados de las consultas en Hojas de cálculo de Google, el nombre del archivo comienza con results-[DATE], donde [DATE] es la fecha de hoy en formato YYYYMMDD.

IU clásica

  1. Dirígete 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 de SQL válida en el área de texto Consulta nueva.

  4. Haz clic en Mostrar opciones.

  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.

  7. Cuando se muestren los resultados, haz clic en el botón Guardar en Hojas de cálculo de Google () arriba de los resultados de las consultas.

    captura de pantalla de botones para descargar y guardar

  8. Si es necesario, sigue las indicaciones para acceder a tu Cuenta de Google y haz clic en Permitir si quieres permitir que BigQuery escriba los datos en tu carpeta MY Drive de Google Drive.

    Tras seguir las indicaciones, deberías recibir un correo electrónico con el asunto “Herramientas cliente de BigQuery conectadas a tu Cuenta de Google”. El correo electrónico contiene información sobre los permisos que otorgaste y los pasos para quitarlos.

  9. Cuando se guardan los resultados, aparece un mensaje como el que se presenta a continuación arriba de los resultados de las consultas en la IU web de BigQuery: Results saved to Google Sheets. Click to view. Haz clic en el vínculo del mensaje para ver tus resultados en Hojas de cálculo de Google o navega a tu carpeta MY Drive y abre el archivo de forma manual.

    Cuando guardas los resultados de las consultas en Hojas de cálculo de Google, el nombre del archivo comienza con results-[DATE], donde [DATE] es la fecha de hoy en formato YYYYMMDD.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

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