Gestionar tablas

En este documento se describe cómo gestionar tablas en BigQuery. Puedes gestionar tus tablas de BigQuery de las siguientes formas:

Para obtener información sobre cómo restaurar (o recuperar) una tabla eliminada, consulta Restaurar tablas eliminadas.

Para obtener más información sobre cómo crear y usar tablas, incluida la información de las tablas, cómo enumerarlas y cómo controlar el acceso a los datos de las tablas, consulta el artículo Crear y usar tablas.

Antes de empezar

Concede roles de gestión de identidades y accesos (IAM) que proporcionen a los usuarios los permisos necesarios para realizar cada tarea de este documento. Los permisos necesarios para realizar una tarea (si los hay) se indican en la sección "Permisos necesarios" de la tarea.

Actualizar las propiedades de una tabla

Puedes actualizar los siguientes elementos de una tabla:

Permisos obligatorios

Para obtener los permisos que necesitas para actualizar las propiedades de una tabla, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de datos (roles/bigquery.dataEditor) en una tabla. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para actualizar las propiedades de las tablas. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para actualizar las propiedades de una tabla, se necesitan los siguientes permisos:

  • bigquery.tables.update
  • bigquery.tables.get

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

Además, si tiene el permiso bigquery.datasets.create, puede actualizar las propiedades de las tablas de los conjuntos de datos que cree.

Actualizar la descripción de una tabla

Puede actualizar la descripción de una tabla de las siguientes formas:

  • Con la Google Cloud consola.
  • Usando una ALTER TABLEdeclaración del lenguaje de definición de datos (DDL).
  • Usando el comando bq update de la herramienta de línea de comandos bq.
  • Llamar al método de API tables.patch.
  • Usar las bibliotecas de cliente.
  • Generar una descripción con Gemini en BigQuery.

Para actualizar la descripción de una tabla, sigue estos pasos:

Consola

No puedes añadir una descripción cuando creas una tabla con la consola.Google Cloud Una vez creada la tabla, puedes añadir una descripción en la página Detalles.

  1. En el panel Explorador, expande tu proyecto y tu conjunto de datos, y selecciona la tabla.

  2. En el panel de detalles, haz clic en Detalles.

  3. En la sección Descripción, haz clic en el icono del lápiz para editar la descripción.

    Editar descripción.

  4. Escribe una descripción en el cuadro y haz clic en Actualizar para guardar los cambios.

SQL

Usa la instrucción ALTER TABLE SET OPTIONS. En el siguiente ejemplo se actualiza la descripción de una tabla llamada mytable:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        description = 'Description of mytable');

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

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

    Activate Cloud Shell

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

  2. Ejecuta el comando bq update con la marca --description. Si vas a actualizar una tabla en un proyecto que no sea el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato: project_id:dataset.

    bq update \
    --description "description" \
    project_id:dataset.table

    Haz los cambios siguientes:

    • description: el texto que describe la tabla entre comillas.
    • project_id: tu ID de proyecto
    • dataset: el nombre del conjunto de datos que contiene la tabla que quieres actualizar
    • table: el nombre de la tabla que vas a actualizar

    Ejemplos:

    Para cambiar la descripción de la tabla mytable del conjunto de datos mydataset a "Descripción de mitabla", introduce el siguiente comando. El conjunto de datos mydataset está en tu proyecto predeterminado.

    bq update --description "Description of mytable" mydataset.mytable
    

    Para cambiar la descripción de la tabla mytable del conjunto de datos mydataset a "Descripción de mitabla", introduce el siguiente comando. El conjunto de datos mydataset está en el proyecto myotherproject, no en el predeterminado.

    bq update \
    --description "Description of mytable" \
    myotherproject:mydataset.mytable
    
  3. API

    Llama al método tables.patch y usa la propiedad description en el recurso de tabla para actualizar la descripción de la tabla. Como el método tables.update sustituye todo el recurso de la tabla, se recomienda usar el método tables.patch.

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
    func updateTableDescription(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	tableRef := client.Dataset(datasetID).Table(tableID)
    	meta, err := tableRef.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    	update := bigquery.TableMetadataToUpdate{
    		Description: "Updated description.",
    	}
    	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Table;
    
    public class UpdateTableDescription {
    
      public static void runUpdateTableDescription() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        String newDescription = "this is the new table description";
        updateTableDescription(datasetName, tableName, newDescription);
      }
    
      public static void updateTableDescription(
          String datasetName, String tableName, String newDescription) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setDescription(newDescription).build());
          System.out.println("Table description updated successfully to " + newDescription);
        } catch (BigQueryException e) {
          System.out.println("Table description was not updated \n" + e.toString());
        }
      }
    }

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    Configura la propiedad Table.description y llama a Client.update_table() para enviar la actualización a la API.
    # from google.cloud import bigquery
    # client = bigquery.Client()
    # project = client.project
    # dataset_ref = bigquery.DatasetReference(project, dataset_id)
    # table_ref = dataset_ref.table('my_table')
    # table = client.get_table(table_ref)  # API request
    
    assert table.description == "Original description."
    table.description = "Updated description."
    
    table = client.update_table(table, ["description"])  # API request
    
    assert table.description == "Updated description."

    Gemini

    Puedes generar una descripción de tabla con Gemini en BigQuery usando estadísticas de datos. Información valiosa es una forma automatizada de explorar, comprender y organizar tus datos.

    Para obtener más información sobre las estadísticas de datos, incluidos los pasos de configuración, los roles de gestión de identidades y accesos necesarios y las prácticas recomendadas para mejorar la precisión de las estadísticas generadas, consulta Generar estadísticas de datos en BigQuery.

    1. En la Google Cloud consola, ve a la página BigQuery.

      Ir a BigQuery

    2. En el panel Explorador, expande tu proyecto y tu conjunto de datos, y selecciona la tabla.

    3. En el panel de detalles, haz clic en la pestaña Esquema.

    4. Haz clic en Generar.

      Gemini genera una descripción de la tabla y estadísticas sobre ella. La información tarda unos minutos en rellenarse. Puedes ver las estadísticas generadas en la pestaña Estadísticas de la tabla.

    5. Para editar y guardar la descripción de la tabla generada, siga estos pasos:

      1. Haz clic en Ver descripciones de las columnas.

        Se muestran la descripción actual de la tabla y la descripción generada.

      2. En la sección Descripción de la tabla, haz clic en Guardar en detalles.

      3. Para sustituir la descripción actual por la generada, haz clic en Copiar descripción sugerida.

      4. Edite la descripción de la tabla según sea necesario y, a continuación, haga clic en Guardar en detalles.

        La descripción de la tabla se actualiza inmediatamente.

      5. Para cerrar el panel Vista previa de las descripciones, haz clic en Cerrar.

Actualizar la fecha de vencimiento de una tabla

Puedes definir una fecha de vencimiento predeterminada para las tablas a nivel de conjunto de datos o bien definir la fecha de vencimiento de una tabla cuando se cree. El tiempo de vencimiento de una tabla se suele denominar "tiempo de vida" o TTL.

Cuando una tabla caduca, se elimina junto con todos los datos que contiene. Si es necesario, puedes restaurar la tabla caducada en el periodo de tiempo especificado para el conjunto de datos. Consulta Restaurar tablas eliminadas para obtener más información.

Si define la fecha de vencimiento al crear la tabla, se ignorará la fecha de vencimiento predeterminada de la tabla del conjunto de datos. Si no defines una fecha de vencimiento predeterminada para las tablas a nivel de conjunto de datos ni cuando se crea la tabla, esta nunca caducará y tendrás que eliminarla manualmente.

En cualquier momento después de crear la tabla, puedes actualizar su tiempo de vencimiento de las siguientes formas:

  • Con la Google Cloud consola.
  • Usando una ALTER TABLEdeclaración del lenguaje de definición de datos (DDL).
  • Usando el comando bq update de la herramienta de línea de comandos bq.
  • Llamar al método de API tables.patch.
  • Usar las bibliotecas de cliente.

Para actualizar el tiempo de caducidad de una tabla, sigue estos pasos:

Consola

No puedes añadir una hora de vencimiento al crear una tabla con la consolaGoogle Cloud . Una vez creada una tabla, puede añadir o actualizar su fecha de vencimiento en la página Detalles de la tabla.

  1. En el panel Explorador, expande tu proyecto y tu conjunto de datos, y selecciona la tabla.

  2. En el panel de detalles, haz clic en Detalles.

  3. Haz clic en el icono del lápiz situado junto a Información de la tabla.

  4. En Vencimiento de la tabla, selecciona Especificar fecha. A continuación, selecciona la fecha de vencimiento con el widget de calendario.

  5. Haz clic en Actualizar para guardar los cambios. La hora de vencimiento actualizada aparece en la sección Información de la tabla.

SQL

Usa la instrucción ALTER TABLE SET OPTIONS. En el siguiente ejemplo se actualiza la hora de vencimiento de una tabla llamada mytable:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        -- Sets table expiration to timestamp 2025-02-03 12:34:56
        expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

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

    Activate Cloud Shell

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

  2. Ejecuta el comando bq update con la marca --expiration. Si vas a actualizar una tabla en un proyecto que no sea el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato: project_id:dataset.

    bq update \
    --expiration integer \
    project_id:dataset.table

    Haz los cambios siguientes:

    • integer: el tiempo de vida predeterminado (en segundos) de la tabla. El valor mínimo es de 3600 segundos (una hora). La hora de vencimiento se calcula sumando el valor entero a la hora actual. Si especifica 0, se eliminará la fecha de vencimiento de la tabla y esta nunca caducará. Las tablas que no tengan fecha de vencimiento se deben eliminar manualmente.
    • project_id: tu ID de proyecto.
    • dataset: el nombre del conjunto de datos que contiene la tabla que vas a actualizar.
    • table: el nombre de la tabla que vas a actualizar.

    Ejemplos:

    Para actualizar el tiempo de vencimiento de la tabla mytable del conjunto de datos mydataset a 5 días (432.000 segundos), introduce el siguiente comando. El conjunto de datos mydataset está en tu proyecto predeterminado.

    bq update --expiration 432000 mydataset.mytable
    

    Para actualizar el tiempo de vencimiento de la tabla mytable del conjunto de datos mydataset a 5 días (432.000 segundos), introduce el siguiente comando. El conjunto de datos mydataset está en el proyecto myotherproject, no en el predeterminado.

    bq update --expiration 432000 myotherproject:mydataset.mytable
    
  3. API

    Llama al método tables.patch y usa la propiedad expirationTime en el recurso de tabla para actualizar la caducidad de la tabla en milisegundos. Como el método tables.update sustituye todo el recurso de tabla, es preferible usar el método tables.patch.

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    	"time"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
    // in the future, at which time it will be deleted.
    func updateTableExpiration(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	tableRef := client.Dataset(datasetID).Table(tableID)
    	meta, err := tableRef.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    	update := bigquery.TableMetadataToUpdate{
    		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
    	}
    	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Table;
    import java.util.concurrent.TimeUnit;
    
    public class UpdateTableExpiration {
    
      public static void runUpdateTableExpiration() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        // Update table expiration to one day.
        Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);
        updateTableExpiration(datasetName, tableName, newExpiration);
      }
    
      public static void updateTableExpiration(
          String datasetName, String tableName, Long newExpiration) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setExpirationTime(newExpiration).build());
    
          System.out.println("Table expiration updated successfully to " + newExpiration);
        } catch (BigQueryException e) {
          System.out.println("Table expiration was not updated \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function updateTableExpiration() {
      // Updates a table's expiration.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = 'my_dataset', // Existing dataset
      // const tableId = 'my_table', // Existing table
      // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms
    
      // Retreive current table metadata
      const table = bigquery.dataset(datasetId).table(tableId);
      const [metadata] = await table.getMetadata();
    
      // Set new table expiration to 5 days from current time
      metadata.expirationTime = expirationTime.toString();
      const [apiResponse] = await table.setMetadata(metadata);
    
      const newExpirationTime = apiResponse.expirationTime;
      console.log(`${tableId} expiration: ${newExpirationTime}`);
    }

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    Configura la propiedad Table.expires y llama a Client.update_table() para enviar la actualización a la API.
    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import datetime
    
    
    def update_table_expiration(table_id, expiration):
        orig_table_id = table_id
        orig_expiration = expiration
    
        from google.cloud import bigquery
    
        client = bigquery.Client()
    
        # TODO(dev): Change table_id to the full name of the table you want to update.
        table_id = "your-project.your_dataset.your_table_name"
    
        # TODO(dev): Set table to expire for desired days days from now.
        expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
            days=5
        )
    
        table_id = orig_table_id
        expiration = orig_expiration
    
        table = client.get_table(table_id)  # Make an API request.
        table.expires = expiration
        table = client.update_table(table, ["expires"])  # API request
    
        print(f"Updated {table_id}, expires {table.expires}.")
    

Para actualizar el tiempo de vencimiento predeterminado de las particiones de un conjunto de datos, sigue estos pasos:

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

// Sample to update partition expiration on a dataset.
public class UpdateDatasetPartitionExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Set the default partition expiration (applies to new tables, only) in
    // milliseconds. This example sets the default expiration to 90 days.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(90, TimeUnit.DAYS);
    updateDatasetPartitionExpiration(datasetName, newExpiration);
  }

  public static void updateDatasetPartitionExpiration(String datasetName, Long newExpiration) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultPartitionExpirationMs(newExpiration).build());
      System.out.println(
          "Dataset default partition expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset partition expiration was not updated \n" + e.toString());
    }
  }
}

Python

Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


def update_dataset_default_partition_expiration(dataset_id: str) -> None:

    from google.cloud import bigquery

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

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    # Set the default partition expiration (applies to new tables, only) in
    # milliseconds. This example sets the default expiration to 90 days.
    dataset.default_partition_expiration_ms = 90 * 24 * 60 * 60 * 1000

    dataset = client.update_dataset(
        dataset, ["default_partition_expiration_ms"]
    )  # Make an API request.

    print(
        "Updated dataset {}.{} with new default partition expiration {}".format(
            dataset.project, dataset.dataset_id, dataset.default_partition_expiration_ms
        )
    )

Actualizar el modo de redondeo de una tabla

Puede actualizar el modo de redondeo predeterminado de una tabla mediante la declaración de DDL ALTER TABLE SET OPTIONS. En el siguiente ejemplo se actualiza el modo de redondeo predeterminado de mytable a ROUND_HALF_EVEN:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

Si añade un campo NUMERIC o BIGNUMERIC a una tabla y no especifica un modo de redondeo, se aplicará automáticamente el modo de redondeo predeterminado de la tabla. Si cambia el modo de redondeo predeterminado de una tabla, no se modificará el modo de redondeo de los campos que ya tenga.

Actualizar la definición del esquema de una tabla

Para obtener más información sobre cómo actualizar la definición del esquema de una tabla, consulta Modificar los esquemas de tabla.

Cambiar el nombre de una tabla

Puedes cambiar el nombre de una tabla después de crearla con la instrucción ALTER TABLE RENAME TO. En el siguiente ejemplo se cambia el nombre de mytable a mynewtable:

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

Limitaciones al cambiar el nombre de las tablas

  • Si quieres cambiar el nombre de una tabla a la que se están transmitiendo datos, debes detener la transmisión, confirmar las transmisiones pendientes y esperar a que BigQuery indique que la transmisión no está en uso.
  • Aunque normalmente se puede cambiar el nombre de una tabla 5 horas después de la última operación de streaming, puede que se tarde más.
  • Las LCA de tabla y las políticas de acceso a filas se conservan, pero no se conservan las actualizaciones de las LCA de tabla ni de las políticas de acceso a filas que se hayan realizado durante el cambio de nombre de la tabla.
  • No puedes cambiar el nombre de una tabla y ejecutar una instrucción DML en esa tabla al mismo tiempo.
  • Si cambias el nombre de una tabla, se eliminarán todas las etiquetas de Data Catalog (obsoletas) y los aspectos de Universal Catalog de Dataplex de la tabla.
  • No puedes cambiar el nombre de las tablas externas.

Copiar una tabla

En esta sección se describe cómo crear una copia completa de una tabla. Para obtener información sobre otros tipos de copias de tablas, consulta Clones de tablas y Copias de tablas.

Puedes copiar una tabla de las siguientes formas:

  • Usa la consola Google Cloud .
  • Usa el comando bq cp.
  • Usa una instrucción del lenguaje de definición de datos (DDL) CREATE TABLE COPY.
  • Llama al método de API jobs.insert y configura una tarea copy.
  • Usa las bibliotecas de cliente.

Limitaciones al copiar tablas

Las tareas de copia de tablas están sujetas a las siguientes limitaciones:

  • No puedes detener una operación de copia de una tabla después de iniciarla. Una operación de copia de tabla se ejecuta de forma asíncrona y no se detiene aunque canceles el trabajo. También se te cobra por la transferencia de datos de una copia de tabla entre regiones y por el almacenamiento en la región de destino.
  • Cuando copies una tabla, el nombre de la tabla de destino debe seguir las mismas convenciones de nomenclatura que cuando creas una tabla.
  • Las copias de tablas están sujetas a los límites de BigQuery en las tareas de copia.
  • La Google Cloud consola solo permite copiar una tabla a la vez. No puedes sobrescribir una tabla que ya exista en el conjunto de datos de destino. La tabla debe tener un nombre único en el conjunto de datos de destino.
  • La consola Google Cloud no permite copiar varias tablas de origen en una tabla de destino.
  • Cuando se copian varias tablas de origen en una tabla de destino mediante la API, la herramienta de línea de comandos bq o las bibliotecas de cliente, todas las tablas de origen deben tener esquemas idénticos, incluidas las particiones o los clústeres.

    Algunas actualizaciones del esquema de la tabla, como eliminar o cambiar el nombre de las columnas, pueden provocar que las tablas tengan esquemas aparentemente idénticos, pero representaciones internas diferentes. Esto puede provocar que falle un trabajo de copia de tabla con el error Maximum limit on diverging physical schemas reached. En este caso, puedes usar la instrucción CREATE TABLE LIKE para asegurarte de que el esquema de la tabla de origen coincide exactamente con el de la tabla de destino.

  • El tiempo que tarda BigQuery en copiar tablas puede variar significativamente entre diferentes ejecuciones, ya que el almacenamiento subyacente se gestiona de forma dinámica.

  • No puedes copiar y añadir una tabla de origen a una tabla de destino que tenga más columnas que la tabla de origen y que las columnas adicionales tengan valores predeterminados. En su lugar, puedes ejecutar INSERT destination_table SELECT * FROM source_table para copiar los datos.

  • Si la operación de copia sobrescribe una tabla, se mantiene el acceso a nivel de tabla de la tabla. Las etiquetas de la tabla de origen no se copian en la tabla sobrescrita, mientras que las etiquetas de la tabla ya existente se conservan. Sin embargo, cuando copias tablas entre regiones, se eliminan las etiquetas de la tabla.

  • Si la operación de copia crea una tabla, el acceso a nivel de tabla de la nueva tabla se determina mediante las políticas de acceso del conjunto de datos en el que se crea la tabla. Además, las etiquetas se copian de la tabla de origen a la nueva.

  • Cuando copias varias tablas de origen en una tabla de destino, todas las tablas de origen deben tener etiquetas idénticas.

Roles obligatorios

Para realizar las tareas de este documento, necesitas los siguientes permisos.

Roles para copiar tablas y particiones

Para obtener los permisos que necesitas para copiar tablas y particiones, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de datos (roles/bigquery.dataEditor) en los conjuntos de datos de origen y de destino. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para copiar tablas y particiones. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Se necesitan los siguientes permisos para copiar tablas y particiones:

  • bigquery.tables.getData en los conjuntos de datos de origen y destino
  • bigquery.tables.get en los conjuntos de datos de origen y destino
  • bigquery.tables.create en el conjunto de datos de destino
  • bigquery.tables.update en el conjunto de datos de destino

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

Permiso para ejecutar un trabajo de copia

Para obtener el permiso que necesitas para ejecutar una tarea de copia, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Usuario de tarea (roles/bigquery.jobUser) en los conjuntos de datos de origen y de destino. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso bigquery.jobs.create , que es necesario para ejecutar una tarea de copia.

También puedes obtener este permiso con roles personalizados u otros roles predefinidos.

Copiar una tabla de una única fuente

Puedes copiar una tabla de las siguientes formas:

  • Con la Google Cloud consola.
  • Usando el comando bq cp de la herramienta de línea de comandos bq.
  • Usando una CREATE TABLE COPYdeclaración del lenguaje de definición de datos (DDL).
  • Llamar al método de la API jobs.insert, configurar un trabajo copy y especificar la propiedad sourceTable.
  • Usar las bibliotecas de cliente.

La consola Google Cloud y la instrucción CREATE TABLE COPY solo admiten una tabla de origen y una tabla de destino en una tarea de copia. Para copiar varios archivos de origen en una tabla de destino, debes usar la herramienta de línea de comandos bq o la API.

Para copiar una tabla de una única fuente, sigue estos pasos:

Consola

  1. En el panel Explorador, expande tu proyecto y tu conjunto de datos, y selecciona la tabla.

  2. En el panel de detalles, haz clic en Copiar tabla.

  3. En el cuadro de diálogo Copiar tabla, en Destino:

    • En Nombre del proyecto, elige el proyecto en el que se almacenará la tabla copiada.
    • En Nombre del conjunto de datos, selecciona el conjunto de datos en el que quieras almacenar la tabla copiada. Los conjuntos de datos de origen y de destino deben estar en la misma ubicación.
    • En Nombre de la tabla, escribe un nombre para la nueva tabla. El nombre debe ser único en el conjunto de datos de destino. No puedes sobrescribir una tabla en el conjunto de datos de destino con la consola de Google Cloud . Para obtener más información sobre los requisitos de los nombres de tabla, consulta Nombres de tabla.
  4. Haz clic en Copiar para iniciar el trabajo de copia.

SQL

Usa la declaración CREATE TABLE COPY para copiar una tabla llamada table1 en una tabla nueva llamada table1copy:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE TABLE myproject.mydataset.table1copy
    COPY myproject.mydataset.table1;

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

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

    Activate Cloud Shell

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

  2. Ejecuta el comando bq cp. Se pueden usar marcas opcionales para controlar la disposición de escritura de la tabla de destino:

    • -a o --append_table añade los datos de la tabla de origen a una tabla que ya exista en el conjunto de datos de destino.
    • -f o --force sobrescribe una tabla que ya existe en el conjunto de datos de destino y no te pide confirmación.
    • -n o --no_clobber devuelve el siguiente mensaje de error si la tabla existe en el conjunto de datos de destino: Table 'project_id:dataset.table' already exists, skipping. Si no se especifica -n, el comportamiento predeterminado es pedirte que elijas si quieres sustituir la tabla de destino.
    • --destination_kms_key es la clave de Cloud KMS gestionada por el cliente que se usa para encriptar la tabla de destino.

    --destination_kms_key no se muestra aquí. Consulta el artículo Proteger datos con claves de Cloud Key Management Service para obtener más información.

    Si el conjunto de datos de origen o de destino se encuentra en un proyecto que no es el predeterminado, añade el ID del proyecto a los nombres de los conjuntos de datos con el siguiente formato: project_id:dataset.

    (Opcional) Proporcione la marca --location y asigne el valor a su ubicación.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table \
    project_id:dataset.destination_table

    Haz los cambios siguientes:

    • location: el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes asignar el valor asia-northeast1 a la marca. Puede definir un valor predeterminado para la ubicación mediante el archivo .bigqueryrc.
    • project_id: tu ID de proyecto.
    • dataset: nombre del conjunto de datos de origen o de destino.
    • source_table: la tabla que vas a copiar.
    • destination_table: el nombre de la tabla del conjunto de datos de destino.

    Ejemplos:

    Para copiar la tabla mydataset.mytable en la tabla mydataset2.mytable2, introduce el siguiente comando. Ambos conjuntos de datos están en tu proyecto predeterminado.

    bq cp mydataset.mytable mydataset2.mytable2
    

    Para copiar la tabla mydataset.mytable y sobrescribir una tabla de destino con el mismo nombre, introduce el siguiente comando. El conjunto de datos de origen está en tu proyecto predeterminado. El conjunto de datos de destino está en el proyecto myotherproject. La combinación de teclas -f se usa para sobrescribir la tabla de destino sin que se muestre ninguna petición.

    bq cp -f \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Para copiar la tabla mydataset.mytable y devolver un error si el conjunto de datos de destino contiene una tabla con el mismo nombre, introduce el siguiente comando. El conjunto de datos de origen está en tu proyecto predeterminado. El conjunto de datos de destino está en el proyecto myotherproject. El acceso directo -n se usa para evitar que se sobrescriba una tabla con el mismo nombre.

    bq cp -n \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Para copiar la tabla mydataset.mytable y añadir los datos a una tabla de destino con el mismo nombre, introduce el siguiente comando. El conjunto de datos de origen está en tu proyecto predeterminado. El conjunto de datos de destino está en el proyecto myotherproject. La combinación de teclas - a se usa para añadir contenido a la tabla de destino.

    bq cp -a mydataset.mytable myotherproject:myotherdataset.mytable
    
  3. API

    Puedes copiar una tabla a través de la API llamando al método bigquery.jobs.insert y configurando un trabajo copy. Especifica tu ubicación en la propiedad location de la sección jobReference del recurso de trabajo.

    Debe especificar los siguientes valores en la configuración del trabajo:

    "copy": {
          "sourceTable": {       // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "destinationTable": {  // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "createDisposition": string,  // Optional
          "writeDisposition": string,   // Optional
        },
    

    sourceTable proporciona información sobre la tabla que se va a copiar, destinationTable proporciona información sobre la nueva tabla, createDisposition especifica si se debe crear la tabla si no existe y writeDisposition especifica si se debe sobrescribir o añadir a una tabla ya creada.

    C#

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

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.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
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    PHP

    Antes de probar este ejemplo, sigue las PHPinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API PHP de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

Copiar varias tablas de origen

Puede copiar varias tablas de origen en una tabla de destino de las siguientes formas:

  • Usando el comando bq cp de la herramienta de línea de comandos bq.
  • Llamar al método jobs.insert, configurar un trabajo copy y especificar la propiedad sourceTables.
  • Usar las bibliotecas de cliente.

Todas las tablas de origen deben tener esquemas y etiquetas idénticos, y solo se permite una tabla de destino.

Las tablas de origen deben especificarse como una lista separada por comas. No puedes usar comodines cuando copias varias tablas de origen.

Para copiar varias tablas de origen, selecciona una de las siguientes opciones:

bq

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

    Activate Cloud Shell

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

  2. Ejecuta el comando bq cp e incluye varias tablas de origen como una lista separada por comas. Se pueden usar marcas opcionales para controlar la disposición de escritura de la tabla de destino:

    • -a o --append_table añade los datos de las tablas de origen a una tabla que ya existe en el conjunto de datos de destino.
    • -f o --force sobrescribe una tabla de destino que ya exista en el conjunto de datos de destino y no te pide confirmación.
    • -n o --no_clobber devuelve el siguiente mensaje de error si la tabla existe en el conjunto de datos de destino: Table 'project_id:dataset.table' already exists, skipping. Si no se especifica -n, el comportamiento predeterminado es pedirte que elijas si quieres sustituir la tabla de destino.
    • --destination_kms_key es la clave de Cloud Key Management Service gestionada por el cliente que se usa para encriptar la tabla de destino.

    --destination_kms_key no se muestra aquí. Consulta el artículo Proteger datos con claves de Cloud Key Management Service para obtener más información.

    Si el conjunto de datos de origen o de destino se encuentra en un proyecto que no es el predeterminado, añade el ID del proyecto a los nombres de los conjuntos de datos con el siguiente formato: project_id:dataset.

    (Opcional) Proporcione la marca --location y asigne el valor a su ubicación.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table,project_id:dataset.source_table \
    project_id:dataset.destination_table

    Haz los cambios siguientes:

    • location: el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes asignar el valor asia-northeast1 a la marca. Puede definir un valor predeterminado para la ubicación mediante el archivo .bigqueryrc.
    • project_id: tu ID de proyecto.
    • dataset: nombre del conjunto de datos de origen o de destino.
    • source_table: la tabla que vas a copiar.
    • destination_table: el nombre de la tabla del conjunto de datos de destino.

    Ejemplos:

    Para copiar la tabla mydataset.mytable y la tabla mydataset.mytable2 en la tabla mydataset2.tablecopy, introduce el siguiente comando . Todos los conjuntos de datos están en tu proyecto predeterminado.

    bq cp \
    mydataset.mytable,mydataset.mytable2 \
    mydataset2.tablecopy

    Para copiar la tabla mydataset.mytable y la tabla mydataset.mytable2 en la tabla myotherdataset.mytable y sobrescribir una tabla de destino con el mismo nombre, introduce el siguiente comando. El conjunto de datos de destino está en el proyecto myotherproject, no en el predeterminado. La combinación de teclas -f se usa para sobrescribir la tabla de destino sin que se muestre ninguna petición.

    bq cp -f \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Para copiar la tabla myproject:mydataset.mytable y la tabla myproject:mydataset.mytable2, y devolver un error si el conjunto de datos de destino contiene una tabla con el mismo nombre, introduce el siguiente comando. El conjunto de datos de destino está en el proyecto myotherproject. El acceso directo -n se usa para evitar que se sobrescriba una tabla con el mismo nombre.

    bq cp -n \
    myproject:mydataset.mytable,myproject:mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Para copiar las tablas mydataset.mytable y mydataset.mytable2, y añadir los datos a una tabla de destino con el mismo nombre, introduce el siguiente comando. El conjunto de datos de origen está en tu proyecto predeterminado. El conjunto de datos de destino está en el proyecto myotherproject. La combinación de teclas -a se usa para añadir contenido a la tabla de destino.

    bq cp -a \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable
  3. API

    Para copiar varias tablas mediante la API, llama al método jobs.insert, configura una tarea copy de tabla y especifica la propiedad sourceTables.

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

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyMultiTable demonstrates using a copy job to copy multiple source tables into a single destination table.
    func copyMultiTable(projectID, srcDatasetID string, srcTableIDs []string, dstDatasetID, dstTableID string) error {
    	// projectID := "my-project-id"
    	// srcDatasetID := "sourcedataset"
    	// srcTableIDs := []string{"table1","table2"}
    	// dstDatasetID = "destinationdataset"
    	// dstTableID = "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	srcDataset := client.Dataset(srcDatasetID)
    	dstDataset := client.Dataset(dstDatasetID)
    	var tableRefs []*bigquery.Table
    	for _, v := range srcTableIDs {
    		tableRefs = append(tableRefs, srcDataset.Table(v))
    	}
    	copier := dstDataset.Table(dstTableID).CopierFrom(tableRefs...)
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.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
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    import java.util.Arrays;
    
    public class CopyMultipleTables {
    
      public static void runCopyMultipleTables() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DATASET_NAME";
        String destinationTableId = "MY_TABLE_NAME";
        copyMultipleTables(destinationDatasetName, destinationTableId);
      }
    
      public static void copyMultipleTables(String destinationDatasetName, String destinationTableId) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(
                      destinationTable,
                      Arrays.asList(
                          TableId.of(destinationDatasetName, "table1"),
                          TableId.of(destinationDatasetName, "table2")))
                  .build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy tables due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTableMultipleSource() {
      // Copy multiple source tables to a given destination.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // sourceTable = 'my_table';
      // destinationTable = 'testing';
    
      // Create a client
      const dataset = bigquery.dataset(datasetId);
    
      const metadata = {
        createDisposition: 'CREATE_NEVER',
        writeDisposition: 'WRITE_TRUNCATE',
      };
    
      // Create table references
      const table = dataset.table(sourceTable);
      const yourTable = dataset.table(destinationTable);
    
      // Copy table
      const [apiResponse] = await table.copy(yourTable, metadata);
      console.log(apiResponse.configuration.copy);
    }

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set dest_table_id to the ID of the destination table.
    # dest_table_id = "your-project.your_dataset.your_table_name"
    
    # TODO(developer): Set table_ids to the list of the IDs of the original tables.
    # table_ids = ["your-project.your_dataset.your_table_name", ...]
    
    job = client.copy_table(table_ids, dest_table_id)  # Make an API request.
    job.result()  # Wait for the job to complete.
    
    print("The tables {} have been appended to {}".format(table_ids, dest_table_id))

Copiar tablas entre regiones

Puedes copiar una tabla, una instantánea de tabla o un clon de tabla de una región o multirregión de BigQuery a otra. Esto incluye las tablas a las que se les haya aplicado Cloud KMS (CMEK).

Copiar una tabla entre regiones conlleva cargos adicionales por transferencia de datos según los precios de BigQuery. Se aplican cargos adicionales aunque canceles el trabajo de copia de tabla entre regiones antes de que se haya completado.

Para copiar una tabla entre regiones, selecciona una de las siguientes opciones:

bq

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

    Activate Cloud Shell

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

  2. Ejecuta el comando bq cp:

  3.    bq cp \
       -f -n \
       SOURCE_PROJECT:SOURCE_DATASET.SOURCE_TABLE \
       DESTINATION_PROJECT:DESTINATION_DATASET.DESTINATION_TABLE
       

    Haz los cambios siguientes:

    • SOURCE_PROJECT: ID del proyecto de origen. Si el conjunto de datos de origen está en un proyecto que no es el predeterminado, añada el ID del proyecto al nombre del conjunto de datos de origen.

    • DESTINATION_PROJECT: ID del proyecto de destino. Si el conjunto de datos de destino está en un proyecto que no es el predeterminado, añade el ID del proyecto al nombre del conjunto de datos de destino.

    • SOURCE_DATASET: el nombre del conjunto de datos de origen.

    • DESTINATION_DATASET: el nombre del conjunto de datos de destino.

    • SOURCE_TABLE: la tabla que vas a copiar.

    • DESTINATION_TABLE: el nombre de la tabla del conjunto de datos de destino.

    En el siguiente ejemplo se muestra un comando que copia la tabla mydataset_us.mytable de la multirregión us en la tabla mydataset_eu.mytable2 de la multirregión eu. Ambos conjuntos de datos están en el proyecto predeterminado.

    bq cp --sync=false mydataset_us.mytable mydataset_eu.mytable2
    

    Para copiar una tabla entre regiones en un conjunto de datos de destino que tenga habilitada la clave CMEK, debes habilitar la clave CMEK en la tabla con una clave de la región de la tabla. La clave CMEK de la tabla no tiene por qué ser la misma que la que usa el conjunto de datos de destino. En el siguiente ejemplo se copia una tabla con CMEK habilitada en un conjunto de datos de destino mediante el comando bq cp.

    bq cp source-project-id:source-dataset-id.source-table-id destination-project-id:destination-dataset-id.destination-table-id
    

    Por el contrario, para copiar una tabla con CMEK habilitada entre regiones en un conjunto de datos de destino, puedes habilitar CMEK en el conjunto de datos de destino con una clave de la región del conjunto de datos de destino. También puedes usar la marca destination_kms_keys en el comando bq cp, como se muestra en el siguiente ejemplo:

    bq cp --destination_kms_key=projects/project_id/locations/eu/keyRings/eu_key/cryptoKeys/eu_region mydataset_us.mytable mydataset_eu.mytable2
    

    API

    Para copiar una tabla entre regiones mediante la API, llama al método jobs.insert y configura una tarea copy.

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

    C#

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

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.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
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    PHP

    Antes de probar este ejemplo, sigue las PHPinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API PHP de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

Limitaciones

La copia de una tabla entre regiones está sujeta a las siguientes limitaciones:

  • No puedes copiar una tabla con la consola Google Cloud ni con la instrucción TABLE COPY DDL.
  • No puedes copiar una tabla si tiene etiquetas de políticas.
  • No puedes copiar una tabla si la tabla de origen tiene un tamaño superior a 20 TiB físicos. Consulta Obtener información sobre las tablas para ver el tamaño físico de la tabla de origen. Además, es posible que se necesiten varios reintentos para copiar correctamente las tablas de origen de más de 1 TiB físico entre regiones.
  • No puedes copiar las políticas de IAM asociadas a las tablas. Puedes aplicar las mismas políticas al destino una vez que se haya completado la copia.
  • Si la operación de copia sobrescribe una tabla, se quitarán las etiquetas de la tabla.
  • No puedes copiar varias tablas de origen en una sola tabla de destino.
  • No puedes copiar tablas en el modo de añadir.
  • La información de viaje en el tiempo no se copia en la región de destino.
  • Cuando copias un clon o una captura de una tabla en una región nueva, se crea una copia completa de la tabla. Esto conlleva costes de almacenamiento adicionales.

Ver la cuota de uso actual

Para ver el uso actual de las tareas de consulta, carga, extracción o copia, puedes ejecutar una INFORMATION_SCHEMA consulta para ver los metadatos de las tareas que se han ejecutado durante un periodo específico. Puedes comparar tu uso actual con el límite de cuota para determinar el uso de la cuota de un tipo de trabajo concreto. La siguiente consulta de ejemplo usa la vista INFORMATION_SCHEMA.JOBS para enumerar el número de tareas de consulta, carga, extracción y copia por proyecto:

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

Para ver los límites de cuota de las tareas de copia, consulta Cuotas y límites - Tareas de copia.

Cómo eliminar tablas

Puedes eliminar una tabla de las siguientes formas:

  • Con la Google Cloud consola.
  • Usando una DROP TABLEdeclaración del lenguaje de definición de datos (DDL).
  • Usar el comando bq rm de la herramienta de línea de comandos bq.
  • Llamar al método de API tables.delete.
  • Usar las bibliotecas de cliente.

Para eliminar todas las tablas del conjunto de datos, elimine el conjunto de datos.

Cuando eliminas una tabla, también se eliminan todos los datos que contiene. Para eliminar automáticamente las tablas después de un periodo específico, define la fecha de vencimiento predeterminada de las tablas del conjunto de datos o define la fecha de vencimiento cuando crees la tabla.

Si eliminas una tabla, también se eliminarán los permisos asociados a ella. Cuando vuelvas a crear una tabla eliminada, también debes volver a configurar manualmente los permisos de acceso que tenía asociados.

Roles obligatorios

Para obtener los permisos que necesitas para eliminar una tabla, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de datos (roles/bigquery.dataEditor) en el conjunto de datos. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para eliminar una tabla. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para eliminar una tabla, se necesitan los siguientes permisos:

  • bigquery.tables.delete
  • bigquery.tables.get

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

Eliminar una tabla

Para eliminar una tabla, sigue estos pasos:

Consola

  1. En el panel Explorador, expande tu proyecto y tu conjunto de datos, y selecciona la tabla.

  2. En el panel de detalles, haz clic en Eliminar tabla.

  3. Escribe "delete" en el cuadro de diálogo y, a continuación, haz clic en Eliminar para confirmar la acción.

SQL

Usa la instrucción DROP TABLE. En el siguiente ejemplo se elimina una tabla llamada mytable:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    DROP TABLE mydataset.mytable;

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

bq

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

    Activate Cloud Shell

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

  2. Usa el comando bq rm con la marca --table (o el acceso directo -t) para eliminar una tabla. Cuando usas la herramienta de línea de comandos bq para eliminar una tabla, debes confirmar la acción. Puedes usar la marca --force (o la combinación de teclas -f) para omitir la confirmación.

    Si la tabla está en un conjunto de datos de un proyecto que no es el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato: project_id:dataset.

    bq rm \
    -f \
    -t \
    project_id:dataset.table

    Haz los cambios siguientes:

    • project_id: tu ID de proyecto
    • dataset: el nombre del conjunto de datos que contiene la tabla
    • table: el nombre de la tabla que vas a eliminar

    Ejemplos:

    Para eliminar la tabla mytable del conjunto de datos mydataset, introduce el siguiente comando. El conjunto de datos mydataset está en tu proyecto predeterminado.

    bq rm -t mydataset.mytable
    

    Para eliminar la tabla mytable del conjunto de datos mydataset, introduce el siguiente comando. El conjunto de datos mydataset está en el proyecto myotherproject, no en el predeterminado.

    bq rm -t myotherproject:mydataset.mytable
    

    Para eliminar la tabla mytable del conjunto de datos mydataset, introduce el siguiente comando. El conjunto de datos mydataset está en tu proyecto predeterminado. El comando usa el acceso directo -f para omitir la confirmación.

    bq rm -f -t mydataset.mytable
    
  3. API

    Llama al método de API tables.delete y especifica la tabla que quieres eliminar con el parámetro tableId.

    C#

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

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryDeleteTable
    {
        public void DeleteTable(
            string projectId = "your-project-id",
            string datasetId = "your_dataset_id",
            string tableId = "your_table_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            client.DeleteTable(datasetId, tableId);
            Console.WriteLine($"Table {tableId} deleted.");
        }
    }

    Go

    Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // deleteTable demonstrates deletion of a BigQuery table.
    func deleteTable(projectID, datasetID, tableID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// tableID := "mytable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	table := client.Dataset(datasetID).Table(tableID)
    	if err := table.Delete(ctx); err != nil {
    		return err
    	}
    	return nil
    }
    

    Java

    Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class DeleteTable {
    
      public static void runDeleteTable() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        deleteTable(datasetName, tableName);
      }
    
      public static void deleteTable(String datasetName, String tableName) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
          boolean success = bigquery.delete(TableId.of(datasetName, tableName));
          if (success) {
            System.out.println("Table deleted successfully");
          } else {
            System.out.println("Table was not found");
          }
        } catch (BigQueryException e) {
          System.out.println("Table was not deleted. \n" + e.toString());
        }
      }
    }

    Node.js

    Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function deleteTable() {
      // Deletes "my_table" from "my_dataset".
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // const tableId = "my_table";
    
      // Delete the table
      await bigquery
        .dataset(datasetId)
        .table(tableId)
        .delete();
    
      console.log(`Table ${tableId} deleted.`);
    }

    PHP

    Antes de probar este ejemplo, sigue las PHPinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API PHP de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    use Google\Cloud\BigQuery\BigQueryClient;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $tableId = 'The BigQuery table ID';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $table = $dataset->table($tableId);
    $table->delete();
    printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

    Python

    Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    
    from google.cloud import bigquery
    
    # Construct a BigQuery client object.
    client = bigquery.Client()
    
    # TODO(developer): Set table_id to the ID of the table to fetch.
    # table_id = 'your-project.your_dataset.your_table'
    
    # If the table does not exist, delete_table raises
    # google.api_core.exceptions.NotFound unless not_found_ok is True.
    client.delete_table(table_id, not_found_ok=True)  # Make an API request.
    print("Deleted table '{}'.".format(table_id))

    Ruby

    Antes de probar este ejemplo, sigue las Rubyinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Ruby de BigQuery.

    Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

    require "google/cloud/bigquery"
    
    def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
      bigquery = Google::Cloud::Bigquery.new
      dataset  = bigquery.dataset dataset_id
      table    = dataset.table table_id
    
      table.delete
    
      puts "Table #{table_id} deleted."
    end

Restaurar tablas eliminadas

Para saber cómo restaurar o recuperar tablas eliminadas, consulta Restaurar tablas eliminadas.

Seguridad de las tablas

Para controlar el acceso a las tablas de BigQuery, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.

Siguientes pasos