Escribe 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.

Permisos necesarios

Como mínimo, para escribir los resultados de las consultas en una tabla, debes tener los siguientes permisos:

  • bigquery.tables.create para crear una tabla nueva
  • bigquery.tables.updateData para escribir datos en una tabla nueva, reemplazar una tabla o agregar datos a una tabla
  • bigquery.jobs.create para ejecutar un trabajo de consulta

Es posible que se requieran permisos adicionales como bigquery.tables.getData para acceder a los datos que consultas.

Las siguientes funciones de Cloud IAM predefinidas incluyen los permisos bigquery.tables.create y bigquery.tables.updateData:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Las siguientes funciones de Cloud IAM predefinidas 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 crear y actualizar tablas en el conjunto de datos.

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

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:

  • Mediante la GCP Console o la IU web clásica de BigQuery
  • Mediante el comando bq query de la herramienta de línea de comandos
  • Mediante una llamada al método de la API jobs.insert y la configuración de un trabajo de query
  • Mediante las bibliotecas cliente

Escribe 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 GCP Console

  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 la tabla: reemplaza una tabla existente que tiene el mismo nombre con los resultados de las consultas.
  9. En Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación (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 resultados debajo del editor para copiar la tabla de resultados almacenados en caché en una permanente.

DDL

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

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

IU clásica

  1. Ve 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 un proyecto para almacenar el conjunto de datos y la tabla.

    2. En el Conjunto de datos, elige el conjunto de datos para 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 la tabla: reemplaza una tabla existente que tiene el mismo nombre con 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. 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.

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

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 a 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'

En el que:

  • 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 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: “Error de BigQuery en la operación de consulta: error durante el procesamiento del trabajo 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 de 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 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 de mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. El comando usa la marca --replace para reemplazar la tabla de destino.

bq 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 de mydataset. El conjunto de datos se encuentra en my-other-project, no en tu proyecto predeterminado. El comando usa la marca --append para agregar los resultados de las consultas a la tabla de destino.

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

El resultado de cada uno de estos ejemplos se verá de la siguiente manera. Para facilitar la lectura, algunos resultados se truncaron.

Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE
+---------+--------+
|  name   | number |
+---------+--------+
| Robert  |  10021 |
| John    |   9636 |
| Robert  |   9297 |
| ...              |
+---------+--------+

API

Si quieres guardar los resultados de las consultas en una tabla permanente, llama al método jobs.insert, configura un trabajo 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.

Si quieres controlar la ubicación de procesamiento para el trabajo de consulta, especifica 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 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.

Escribe 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 GCP Console

  2. Haz clic en Redactar consulta nueva.

  3. Ingresa una consulta de SQL 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 (More) y selecciona Configuración de consulta (Query settings).

    Configuración de consulta

  5. En Destino (Destination), marca Establecer una tabla de destino para los resultados de la consulta (Set a destination table for query results).

    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 la tabla, ingresa un nombre de tabla.

  9. Si escribes un conjunto de resultados grandes en una tabla existente, puedes usar las opciones Preferencia de escritura para la tabla de destino (Destination table write preference) a fin de controlar la disposición de escritura de la tabla de destino:

    • Escribir si está vacía (Write if empty): escribe los resultados de las consultas en la tabla solo si está vacía.
    • Agregar a la tabla (Append to table): agrega los resultados de las consultas a una tabla existente.
    • Reemplazar tabla (Overwrite table): reemplaza una tabla existente que tiene el mismo nombre con los resultados de las consultas.

    Reemplazar radio de tabla

  10. En Tamaño de los resultados (Results Size), marca Permitir resultados grandes, sin límite de tamaño (Allow Large Results, no size limit).

    Tamaño de los resultados de las consultas

  11. En Ubicación de procesamiento (Processing Location), haz clic en Selección automática (Auto-select) 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. 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. 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 (Write Preference) 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 la tabla: reemplaza una tabla existente que tiene el mismo nombre con los resultados de las consultas.
  8. En Tamaño de los resultados (Results Size), marca Permitir resultados grandes (Allow Large Results).

    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.

CLI

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 configura el valor según 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 a 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=true \
--allow_large_results "query"

En el que:

  • 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 de 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 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 de 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 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 a una tabla de destino llamada mytable de 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 a la tabla de destino.

bq 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 query y establece la propiedad allowLargeResults como true. Especifica la tabla de destino con 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. 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

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 GCP Console

  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 predeterminado.

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 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 predeterminado.

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 GCP Console

  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 (Open) 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 GCP Console

  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 la tabla: reemplaza una tabla existente que tiene el mismo nombre con los resultados de las consultas.
  9. En Ubicación de procesamiento, haz clic en Selección automática y elige la ubicación (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 resultados debajo del editor para copiar la tabla de resultados almacenados en caché en una permanente.

DDL

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

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

IU clásica

  1. Ve 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 un proyecto para almacenar el conjunto de datos y la tabla.

    2. En el Conjunto de datos, elige el conjunto de datos para 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 la tabla: reemplaza una tabla existente que tiene el mismo nombre con 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. 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.

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

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 a 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'

En el que:

  • 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 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: “Error de BigQuery en la operación de consulta: error durante el procesamiento del trabajo 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 de 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 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 de mydataset. El conjunto de datos se encuentra en tu proyecto predeterminado. El comando usa la marca --replace para reemplazar la tabla de destino.

bq 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 de mydataset. El conjunto de datos se encuentra en my-other-project, no en tu proyecto predeterminado. El comando usa la marca --append para agregar los resultados de las consultas a la tabla de destino.

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

El resultado de cada uno de estos ejemplos se verá de la siguiente manera. Para facilitar la lectura, algunos resultados se truncaron.

Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE
+---------+--------+
|  name   | number |
+---------+--------+
| Robert  |  10021 |
| John    |   9636 |
| Robert  |   9297 |
| ...              |
+---------+--------+

API

Si quieres guardar los resultados de las consultas en una tabla permanente, llama al método jobs.insert, configura un trabajo 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.

Si quieres controlar la ubicación de procesamiento para el trabajo de consulta, especifica 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 darle permiso a BigQuery para que 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 que tienes que seguir 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 las Hojas de cálculo de Google, el nombre del archivo comienza con results-[DATE], en el que [DATE] es la fecha actual en formato YYYYMMDD.

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 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 (Save to Google Sheets) 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 darle permiso a BigQuery para que 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 que tienes que seguir 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 clásica 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 las Hojas de cálculo de Google, el nombre del archivo comienza con results-[DATE], en el que [DATE] es la fecha actual en formato YYYYMMDD.

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

Enviar comentarios sobre…

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