Administra tablas

En este documento, se describe cómo administrar tablas en BigQuery. Puedes administrar tus tablas de BigQuery de las siguientes maneras:

Para obtener más información sobre cómo crear y usar tablas, incluida la obtención de información de tablas, las listas de tablas y el control de acceso a los datos de estas, consulta Crea y usa tablas.

Antes de comenzar

Otorga funciones de la Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para realizar cada tarea de este documento. Los permisos necesarios para realizar una tarea (si existen) se enumeran en la sección “Permisos necesarios” de la tarea.

Actualiza las propiedades de las tablas

Puedes actualizar los siguientes elementos de una tabla:

Permisos necesarios

Para obtener los permisos que necesitas a fin de actualizar las propiedades de la tabla, pídele a tu administrador que te otorgue el rol de IAM Editor de datos (roles/bigquery.dataEditor) en una tabla. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para actualizar las propiedades de la tabla. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para actualizar las propiedades de la tabla:

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

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

Además, si tienes el permiso bigquery.datasets.create, puedes actualizar las propiedades de las tablas de los conjuntos de datos que creas.

Actualiza la descripción de una tabla

Puedes actualizar la descripción de una tabla de las siguientes maneras:

  • Usa la consola de Google Cloud.
  • Usa una declaración ALTER TABLE del lenguaje de definición de datos (DDL)
  • Usa el comando bq update de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API tables.patch
  • Usa bibliotecas cliente.

Para actualizar la descripción de una tabla, haz lo siguiente:

Console

Cuando creas una tabla mediante la consola de Google Cloud, no puedes agregar una descripción. Después de crear la tabla, puedes agregar una en la página de Detalles (Details).

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

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

  3. En la sección Description (Descripción), haz clic en el ícono de lápiz para editar la descripción.

    Edita una descripción.

  4. Ingresa una descripción en el cuadro y haz clic en Update (Actualizar) para guardarla.

SQL

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

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

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

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta 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 actualizas una tabla en un proyecto que no es tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el formato siguiente: project_id:dataset.

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

    Reemplaza lo siguiente:

    • description: Es el texto que describe la tabla entre comillas.
    • project_id: Es el ID de tu proyecto
    • dataset: Es el nombre del conjunto de datos que contiene la tabla que estás actualizando.
    • table: Es el nombre de la tabla que estás actualizando.

    Ejemplos:

    Para cambiar la descripción de la tabla mytable en el conjunto de datos mydataset a “Descripción de mytable”, ingresa el comando siguiente. El conjunto de datos mydataset se encuentra en tu proyecto predeterminado.

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

    Para cambiar la descripción de la tabla mytable en el conjunto de datos mydataset a “Descripción de mytable”, ingresa el comando siguiente. El conjunto de datos mydataset está en el proyecto myotherproject, no en tu proyecto predeterminado.

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

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. Debido a que, con el método tables.update se reemplaza todo el recurso de tabla, es preferible usar el método tables.patch.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

Actualiza la fecha de vencimiento de una tabla

Puedes determinar una fecha de vencimiento de la tabla predeterminada a nivel de conjunto de datos o puedes configurarla cuando se crea la tabla. Se suele hablar de “tiempo de actividad” o TTL para referirse a la fecha de vencimiento de una tabla.

Cuando una tabla vence, se borra junto con todos los datos que contiene. Si es necesario, puedes recuperar la tabla vencida dentro del período de viaje especificado para el conjunto de datos, consulta Restablece tablas borradas para obtener más información.

Si configuras la fecha de vencimiento cuando se crea la tabla, se ignora el vencimiento predeterminado de la tabla del conjunto de datos. Si no estableces un vencimiento predeterminado de la tabla a nivel de conjunto de datos y no estableces un vencimiento de la tabla cuando la creas, la tabla nunca vencerá y deberás borrarla de forma manual.

En cualquier momento posterior a la creación de la tabla, puedes actualizar la fecha de vencimiento de la tabla de las siguientes maneras:

  • Usa la consola de Google Cloud.
  • Usa una declaración ALTER TABLE del lenguaje de definición de datos (DDL)
  • Usa el comando bq update de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API tables.patch
  • Usa bibliotecas cliente.

Para actualizar la fecha de vencimiento de una tabla, haz lo siguiente:

Console

No puedes agregar una fecha de vencimiento cuando creas una tabla mediante la consola de Google Cloud. Después de crear una tabla, puedes agregar o actualizar su vencimiento en la página de Detalles de la tabla.

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

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

  3. Haz clic en el ícono de lápiz junto a Información de tabla.

  4. En Vencimiento de tabla, selecciona Especificar fecha. Luego, selecciona la fecha de vencimiento mediante el widget de calendario.

  5. Haz clic en Actualizar para guardar. La fecha de vencimiento actualizada aparecerá en la sección Información de tabla.

SQL

Usa la sentencia ALTER TABLE SET OPTIONS. En el siguiente ejemplo, se actualiza la fecha de vencimiento de una tabla llamada mytable:

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

    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.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta 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 actualizas una tabla en un proyecto que no es tu proyecto predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos en el formato siguiente: project_id:dataset.

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

    Reemplaza lo siguiente:

    • integer: Es el ciclo de vida predeterminado (en segundos) de la tabla. El valor mínimo es 3,600 segundos (una hora). La fecha de vencimiento se evalúa según la fecha actual más el valor del número entero. Si especificas 0, se quita el vencimiento y la tabla nunca se vence. Las tablas sin vencimiento deben borrarse de forma manual.
    • project_id: Es el ID de tu proyecto.
    • dataset: Es el nombre del conjunto de datos que contiene la tabla que estás actualizando.
    • table: Es el nombre de la tabla que estás actualizando.

    Ejemplos:

    Para actualizar la fecha de vencimiento de la tabla mytable en el conjunto de datos mydataset a 5 días (432,000 segundos), ingresa el siguiente comando. El conjunto de datos mydataset se encuentra en tu proyecto predeterminado.

    bq update --expiration 432000 mydataset.mytable
    

    Para actualizar la fecha de vencimiento de la tabla mytable en el conjunto de datos mydataset a 5 días (432,000 segundos), ingresa el siguiente comando. El conjunto de datos mydataset está en el proyecto myotherproject, no en tu proyecto predeterminado.

    bq update --expiration 432000 myotherproject:mydataset.mytable
    

API

Llama al método tables.patch y usa la propiedad expirationTime en el recurso de tabla para actualizar el vencimiento de la tabla en milisegundos. Debido a que, con el método tables.update se reemplaza todo el recurso de tabla, es preferible usar el método tables.patch.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function 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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

Configura la propiedad Table.expiresy 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 la partición del conjunto de datos, haz lo siguiente:

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

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

Actualiza el modo de redondeo de una tabla

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

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

Cuando agregas un campo NUMERIC o BIGNUMERIC a una tabla y no especificas un modo de redondeo, el modo de redondeo se establece automáticamente en el modo de redondeo predeterminado de la tabla. Cambiar el modo de redondeo predeterminado de una tabla no altera el modo de redondeo de los campos existentes.

Actualiza la definición de esquema de la tabla

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

Cambia el nombre de una tabla

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

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

Limitaciones para cambiar el nombre de las tablas

  • Si deseas cambiar el nombre de una tabla que tiene transmisión de datos, debes detener la transmisión, confirmar las transmisiones pendientes y esperar a que BigQuery indique que la transmisión no está en uso.
  • Si bien, por lo general, se puede cambiar el nombre de una tabla 5 horas después de la última operación de transmisión, es posible que tarde más.
  • Se conservan las LCA de tablas y las políticas de acceso a las filas existentes, pero no se conservan las actualizaciones de las LCA de tablas ni de las políticas de acceso a las fila realizadas durante el cambio de nombre de la tabla.
  • No puedes cambiar el nombre de una tabla de forma simultánea y ejecutar una declaración DML en esa tabla.
  • Cuando cambias el nombre de una tabla, se quitan todas las etiquetas de Data Catalog de la tabla.
  • No puedes cambiar el nombre de las tablas externas.

Copia 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, consultaClonaciones de tabla e Instantáneas de tabla.

Puedes copiar una tabla de las maneras siguientes:

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

Limitaciones sobre la copia de tablas

Los trabajos de copia de tablas están sujetos a las limitaciones siguientes:

  • Cuando copias una tabla, el nombre de la tabla de destino debe respetar las mismas convenciones que cuando creas una tabla.
  • Las copias de tablas están sujetas a límites de BigQuery en trabajos de copia.
  • La consola de Google Cloud solo admite la copia de una tabla a la vez. No puedes reemplazar una tabla existente en el conjunto de datos de destino. La tabla debe tener un nombre único en el conjunto de datos de destino.
  • La consola de Google Cloud no admite la copia de múltiples tablas de origen en una tabla de destino.
  • Cuando copias varias tablas de origen a una de destino con la API, la herramienta de línea de comandos de bq o las bibliotecas cliente, todas las tablas de origen deben tener esquemas idénticos, incluidos los de partición o agrupamiento en clústeres.

    Algunas actualizaciones de esquemas de tablas, como la eliminación o el cambio de nombre de columnas, pueden hacer que las tablas tengan esquemas aparentemente idénticos, pero con diferentes representaciones internas. Esto puede hacer que una tarea de copia de tabla falle con el error Maximum limit on diverging physical schemas reached. En este caso, puedes usar la sentencia CREATE TABLE LIKE para asegurarte de que el esquema de tu tabla fuente coincida exactamente con el esquema de la tabla de destino.

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

  • No puedes copiar y agregar 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 reemplaza una tabla existente, se mantendrá el acceso a nivel de tabla para la tabla existente. Las etiquetas de la tabla de origen no se copian en la tabla reemplazada, mientras que las etiquetas de la tabla existente se retienen. Sin embargo, cuando copias tablas entre regiones, se quitan las etiquetas de la tabla existente.

  • Si la operación de copia crea una tabla nueva, el acceso a nivel de tabla para la tabla nueva se determina según las políticas de acceso del conjunto de datos en el que se crea la tabla nueva. Además, las etiquetas se copian de la tabla de origen a la tabla 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, pídele a tu administrador que te otorgue el rol de IAM 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 otorgar roles, consulta Administra 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 son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para copiar tablas y particiones:

  • bigquery.tables.getData en los conjuntos de datos de origen y de destino
  • bigquery.tables.get en los conjuntos de datos de origen y de 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 o con otros roles predefinidos.

Permiso para ejecutar un trabajo de copia

Para obtener los permisos que necesitas para ejecutar un trabajo de copia, pídele a tu administrador que te otorgue el rol de IAM Usuario de trabajo (roles/bigquery.jobUser) en los conjuntos de datos de origen y de destino. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso bigquery.jobs.create, que se requiere para ejecutar un trabajo de copia.

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

Copiar una tabla de una sola fuente

Puedes copiar una única tabla de las siguientes maneras:

  • Usa la consola de Google Cloud.
  • Usa el comando bq cp de la herramienta de línea de comandos de bq.
  • Usa una declaración CREATE TABLE COPY del lenguaje de definición de datos (DDL)
  • Mediante una llamada al método de API jobs.insert, la configuración de un trabajo copy y la especificación de la propiedad sourceTable.
  • Usa bibliotecas cliente.

La consola de Google Cloud y la declaración CREATE TABLE COPY solo admiten una tabla de origen y una tabla de destino en un trabajo de copia. Para copiar múltiples archivos fuente a una tabla de destino, debes usar la herramienta de línea de comandos de bq o la API.

Para copiar una sola tabla fuente, haz lo siguiente:

Console

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

  2. En el panel de detalles, haz clic en Crear tabla (Create table).

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

    • En Nombre del proyecto (Project name), elige el proyecto que almacenará la tabla copiada.
    • En Nombre del conjunto de datos (Dataset name), selecciona el conjunto de datos en el que deseas almacenar la tabla copiada. Los conjuntos de datos de origen y de destino deben estar en la misma ubicación.
    • En Nombre de tabla, ingresa un nombre para la tabla nueva. El nombre debe ser único en el conjunto de datos de destino. No puedes reemplazar una tabla existente en el conjunto de datos de destino mediante la consola de Google Cloud. Para obtener más información sobre los requisitos de los nombres de tablas, consulta Nombres de las tablas.
  4. Haz clic en Copiar para iniciar el trabajo de copia.

SQL

Usa la sentencia CREATE TABLE COPY para copiar una tabla llamada table1 en una tabla nueva llamada table1copy:

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

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

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta 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 a fin de controlar la disposición de escritura de la tabla de destino:

    • -a o --append_table anexan los datos de la tabla de origen a una tabla existente en el conjunto de datos de destino.
    • -f o --force reemplazan una tabla existente en el conjunto de datos de destino sin solicitar confirmación.
    • -n o --no_clobber muestran el siguiente mensaje de error si la tabla ya 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 solicitarte confirmación para reemplazar la tabla de destino.
    • --destination_kms_key es la clave de Cloud KMS administrada por el cliente que se usa para encriptar la tabla de destino.

    --destination_kms_key no se muestra aquí. Consulta la página sobre protección de 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, debes agregar el ID del proyecto a los nombres de los conjuntos de datos con el siguiente formato: project_id:dataset.

    Opcional: Proporciona la marca --location y configura el valor en tu ubicación.

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

    Reemplaza lo siguiente:

    • location: El nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes establecer el valor de la marca en asia-northeast1. Puedes establecer un valor predeterminado para la ubicación con el archivo .bigqueryrc.
    • project_id: Es el ID de tu proyecto.
    • dataset: Es el nombre del conjunto de datos de origen o de destino.
    • source_table: Es la tabla que estás copiando.
    • destination_table: Es el nombre de la tabla en el conjunto de datos de destino.

    Ejemplos:

    Para copiar la tabla mydataset.mytable en la tabla mydataset2.mytable2, ingresa el siguiente comando. Ambos conjuntos de datos se encuentran en tu proyecto predeterminado.

    bq cp mydataset.mytable mydataset2.mytable2
    

    Para copiar la tabla mydataset.mytable y reemplazar una tabla de destino con el mismo nombre, ingresa el siguiente comando. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en el proyecto myotherproject. Se usa el acceso directo -f para reemplazar la tabla de destino sin una confirmación.

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

    Para copiar la tabla mydataset.mytable y mostrar un error si el conjunto de datos de destino contiene una tabla con el mismo nombre, ingresa el siguiente comando. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en el proyecto myotherproject. Se usa el acceso directo -n para evitar reemplazar una tabla con el mismo nombre.

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

    Para copiar la tabla mydataset.mytable y adjuntar los datos a una tabla de destino con el mismo nombre, ingresa el siguiente comando. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en el proyecto myotherproject. Se usa el acceso directo - a para anexar los datos a la tabla de destino.

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

API

Puedes copiar una tabla existente mediante la API si llamas al método bigquery.jobs.insert y configuras un trabajo copy. Especifica tu ubicación en la propiedad location en la sección jobReference del recurso de trabajo.

Debes especificar los valores siguientes en tu configuración de 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
    },

Aquí, sourceTable proporciona información sobre la tabla que se copiará, destinationTable proporciona información sobre la tabla nueva, createDisposition especifica si se debe crear la tabla en caso de que no exista y writeDisposition especifica si se debe reemplazar una tabla existente o anexar a ella.

C#

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

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function 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 instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

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

# 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.")

Copia varias tablas de origen

Puedes copiar varias tablas de origen en una tabla de destino de las maneras siguientes:

  • Usa el comando bq cp de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método jobs.insert, la configuración de un trabajo copy y la especificación de la propiedad sourceTables.
  • Usa bibliotecas cliente.

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

Las tablas fuente deben especificarse en una lista separada por comas. No puedes usar comodines cuando copias varias tablas fuente.

Para copiar múltiples 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 con varias tablas de origen en una lista separada por comas. Se pueden usar marcas opcionales a fin de controlar la disposición de escritura de la tabla de destino:

    • -a o --append_table anexan los datos de las tablas de origen a una tabla existente en el conjunto de datos de destino.
    • -f o --force reemplazan una tabla de destino existente en el conjunto de datos de destino y no te solicitan confirmación.
    • -n o --no_clobber muestra el siguiente mensaje de error si la tabla ya 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 solicitarte confirmación para reemplazar la tabla de destino.
    • --destination_kms_key es la clave Cloud Key Management Service administrada por el cliente que se usa para encriptar la tabla de destino.

    --destination_kms_key no se muestra aquí. Consulta la página sobre protección de 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, debes agregar el ID del proyecto a los nombres de los conjuntos de datos con el siguiente formato: project_id:dataset.

    Opcional: Proporciona la marca --location y configura el valor en tu ubicación.

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

    Reemplaza lo siguiente:

    • location: El nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes establecer el valor de la marca en asia-northeast1. Puedes establecer un valor predeterminado para la ubicación con el archivo .bigqueryrc.
    • project_id: Es el ID de tu proyecto.
    • dataset: Es el nombre del conjunto de datos de origen o de destino.
    • source_table: es la tabla que copiarás.
    • destination_table: Es el nombre de la tabla en el conjunto de datos de destino.

    Ejemplos:

    Para copiar la tabla mydataset.mytable y la tabla mydataset.mytable2 en la tabla mydataset2.tablecopy, ingresa el siguiente comando . Todos los conjuntos de datos se encuentran 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 reemplazar una tabla de destino con el mismo nombre, ingresa el siguiente comando. El conjunto de datos de destino se encuentra en el proyecto myotherproject, no en el proyecto predeterminado. Se usa el acceso directo -f para reemplazar la tabla de destino sin confirmació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 mostrar un error si el conjunto de datos de destino contiene una tabla con el mismo nombre, ingresa el siguiente comando. El conjunto de datos de destino se encuentra en el proyecto myotherproject. Se usa el acceso directo -n para evitar reemplazar una tabla con el mismo nombre.

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

    Para copiar la tabla mydataset.mytable y la tabla mydataset.mytable2 y anexar los datos a una tabla de destino con el mismo nombre, ingresa el siguiente comando. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en el proyecto myotherproject. Se usa el acceso directo -a para anexar los datos a la tabla de destino.

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

API

Para copiar varias tablas con la API, llama al método jobs.insert, configura un trabajo copy de tabla y especifica la propiedad sourceTables.

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

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function 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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

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

# 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 una clonación de tabla de una región de BigQuery o multirregión a otra. Esto incluye cualquier tabla que utilice Cloud KMS (CMEK) gestionado por el cliente. Esta acción genera cargos adicionales que se rigen según los precios de BigQuery.

Para copiar una tabla en varias 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:

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

Reemplaza lo siguiente:

  • SOURCE_PROJECT: ID del proyecto de origen. Si el conjunto de datos de origen está en un proyecto que no es tu proyecto predeterminado, agrega 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 se encuentra en un proyecto que no es el predeterminado, debes agregar 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 copiarás.

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

    Ejemplos:

    Para copiar la tabla mydataset_us.mytable de la multirregión us a la tabla mydataset_eu.mytable2 en la multirregión eu, ingresa el siguiente comando. Ambos conjuntos de datos se encuentran en tu proyecto predeterminado.

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

    Para copiar una tabla habilitada para CMEK, puedes crear una clave con Cloud KMS y especificar la clave en el comando bq cp o usar un conjunto de datos de destino con CMEK predeterminadas configuradas. En el siguiente ejemplo, se especifica el CMEK de destino en el comando bq cp.

    bq cp --destination_kms_key=projects/testing/locations/us/keyRings/us_key/cryptoKeys/eu_key mydataset_us.mytable mydataset_eu.mytable2
    

API

Para copiar una tabla en varias regiones con la API, llama al método jobs.insert y configura un trabajo copy de tabla.

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

C#

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

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function 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 instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

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

# 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 de Google Cloud ni la sentencia TABLE COPY DDL.
  • No puedes copiar una tabla si hay etiquetas de política en la tabla de origen.
  • No puedes copiar una tabla si la tabla de origen es superior a 20 TiB físicos. Consulta Obtén información sobre las tablas para conocer el tamaño físico de la tabla de origen.
  • No puedes copiar las políticas de IAM asociadas con las tablas. Puedes aplicar las mismas políticas al destino una vez que se complete la copia.
  • Si la operación de copia reemplaza una tabla existente, se quitarán las etiquetas de la tabla existente.
  • No puedes copiar varias tablas de origen en una sola tabla de destino.
  • No puedes copiar tablas en el modo de adición.
  • La información del tiempo de viaje no se copia en la región de destino.
  • Cuando copias una clonación o instantánea de tabla a una región nueva, se crea una copia completa de la tabla. Esto genera costos de almacenamiento adicionales.

Visualiza el uso actual de la cuota

Puedes ver el uso actual de los trabajos de consulta, carga, extracción o copia mediante la ejecución de una consulta INFORMATION_SCHEMA para ver los metadatos sobre los trabajos que se ejecutaron durante un período específico. Puedes comparar el uso actual con el límite de cuota a fin de determinar el uso de la cuota para un tipo de trabajo en particular. La siguiente consulta de ejemplo usa la vista INFORMATION_SCHEMA.JOBS para enumerar la cantidad de trabajos 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-eu`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

Para ver los límites de cuota de los trabajos de copia, consulta Cuotas y límites: trabajos de copia.

Borra las tablas

Puedes borrar una tabla de las maneras siguientes:

  • Usa la consola de Google Cloud.
  • Usa una declaración DROP TABLE del lenguaje de definición de datos (DDL)
  • Usa el comando bq rm de la herramienta de línea de comandos de bq.
  • Mediante una llamada al método de la API tables.delete
  • Usa bibliotecas cliente.

Para borrar todas las tablas en el conjunto de datos, borra el conjunto de datos.

Cuando borras una tabla, también se borra cualquier dato en ella. Para borrar las tablas de forma automática después de un tiempo determinado, debes establecer el vencimiento predeterminado de la tabla para el conjunto de datos o configurar la fecha de vencimiento cuando creas la tabla.

Si borras una tabla, también se borran los permisos asociados a ella. Cuando vuelves a crear una tabla borrada, también debes volver a configurar manualmente cualquier permiso de acceso previamente asociado con ella.

Roles obligatorios

Para obtener los permisos que necesitas para borrar una tabla, pídele a tu administrador que te otorgue el rol de IAM Editor de datos (roles/bigquery.dataEditor) en el conjunto de datos. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para borrar una tabla. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Los siguientes permisos son necesarios para borrar una tabla:

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

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

Borra una tabla

Para borrar una tabla, haz lo siguiente:

Console

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

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

  3. Escribe "delete" en el diálogo y haz clic en Borrar para confirmar.

SQL

Usa la sentencia DROP TABLE. En el siguiente ejemplo, se borra una tabla llamada mytable:

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

    DROP TABLE mydataset.mytable;

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta 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 borrar una tabla. Cuando usas la herramienta de línea de comandos de bq para quitar una tabla, debes confirmar la acción. Puedes usar la marca --force (o el acceso directo -f) para que no se solicite confirmación.

    Si la tabla se encuentra en un conjunto de datos en un proyecto que no es el predeterminado, debes agregar el ID del proyecto al nombre del conjunto de datos con el formato siguiente: project_id:dataset.

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

    Reemplaza lo siguiente:

    • project_id: Es el ID de tu proyecto
    • dataset: Es el nombre del conjunto de datos que contiene la tabla.
    • table: Es el nombre de la tabla que borrarás

    Ejemplos:

    Para borrar la tabla mytable del conjunto de datos mydataset, ingresa el siguiente comando. El conjunto de datos mydataset se encuentra en tu proyecto predeterminado.

    bq rm -t mydataset.mytable
    

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

    bq rm -t myotherproject:mydataset.mytable
    

    Para borrar la tabla mytable del conjunto de datos mydataset, ingresa el siguiente comando. El conjunto de datos mydataset se encuentra en tu proyecto predeterminado. El comando usa la combinación de teclas -f para omitir la confirmación.

    bq rm -f -t mydataset.mytable
    

API

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

C#

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

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


using Google.Cloud.BigQuery.V2;
using System;

public class 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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function 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 instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

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

# 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 instrucciones de configuración para Ruby incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Ruby.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

require "google/cloud/bigquery"

def 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

Restablece tablas borradas

Puedes recuperar una tabla dentro del período de viaje en el tiempo especificado para el conjunto de datos, que incluye las eliminaciones explícitas y las implícitas debidas al vencimiento de la tabla. Tienes la capacidad de configurar el período de viaje en el tiempo. Para recuperar un conjunto de datos completo, consulta Cómo recuperar conjuntos de datos.

El período de viaje en el tiempo puede tener una duración de dos a siete días. Después de que haya transcurrido el período de viaje en el tiempo, BigQuery proporciona un período de seguridad ante fallas en el que los datos borrados se retienen automáticamente durante siete días más. Una vez transcurrido el período de protección contra fallas, no es posible recuperar una tabla con ningún método, incluida la apertura de un ticket de asistencia.

Cuando restableces una tabla a partir de datos históricos, las etiquetas de la tabla de origen no se copian en la tabla de destino.

Puedes restablecer una tabla que se haya borrado, pero que aún se encuentre dentro del período. Para ello, copia la tabla en una tabla nueva con el decorador de tiempo @<time>. Para copiar la tabla, puedes usar la herramienta de línea de comandos de bq o las bibliotecas cliente:

Console

No puedes recuperar una tabla mediante la consola de Google Cloud.

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. Para restablecer una tabla, primero determina una marca de tiempo UNIX de cuando existió la tabla (en milisegundos). Puedes usar el comando date de Linux para generar la marca de tiempo de Unix a partir de un valor de marca de tiempo normal:

    date -d '2023-08-04 16:00:34.456789Z' +%s000
    
  3. Luego, usa el comando bq copy con el decorador de viajes en el tiempo @<time> para realizar la operación de copia de tabla.

    Por ejemplo, ingresa el siguiente comando para copiar la tabla mydataset.mytable en el momento 1418864998000 en una nueva tabla mydataset.newtable.

    bq cp mydataset.mytable@1418864998000 mydataset.newtable
    

    Opcional: Proporciona la marca --location y configura el valor en tu ubicación.

    También puedes especificar un desplazamiento relativo. En el siguiente ejemplo, se copia la versión de una tabla de hace una hora atrás:

    bq cp mydataset.mytable@-3600000 mydataset.newtable
    

    Para obtener más información, consulta Cómo restablecer una tabla a partir de un momento determinado.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// deleteAndUndeleteTable demonstrates how to recover a deleted table by copying it from a point in time
// that predates the deletion event.
func deleteAndUndeleteTable(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()

	ds := client.Dataset(datasetID)
	if _, err := ds.Table(tableID).Metadata(ctx); err != nil {
		return err
	}
	// Record the current time.  We'll use this as the snapshot time
	// for recovering the table.
	snapTime := time.Now()

	// "Accidentally" delete the table.
	if err := client.Dataset(datasetID).Table(tableID).Delete(ctx); err != nil {
		return err
	}

	// Construct the restore-from tableID using a snapshot decorator.
	snapshotTableID := fmt.Sprintf("%s@%d", tableID, snapTime.UnixNano()/1e6)
	// Choose a new table ID for the recovered table data.
	recoverTableID := fmt.Sprintf("%s_recovered", tableID)

	// Construct and run a copy job.
	copier := ds.Table(recoverTableID).CopierFrom(ds.Table(snapshotTableID))
	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
	}

	ds.Table(recoverTableID).Delete(ctx)
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

// Sample to undeleting a table
public class UndeleteTable {

  public static void runUndeleteTable() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_TABLE";
    String recoverTableName = "MY_RECOVER_TABLE_TABLE";
    undeleteTable(datasetName, tableName, recoverTableName);
  }

  public static void undeleteTable(String datasetName, String tableName, String recoverTableName) {
    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();

      // "Accidentally" delete the table.
      bigquery.delete(TableId.of(datasetName, tableName));

      // Record the current time.  We'll use this as the snapshot time
      // for recovering the table.
      long snapTime = System.currentTimeMillis();

      // Construct the restore-from tableID using a snapshot decorator.
      String snapshotTableId = String.format("%s@%d", tableName, snapTime);

      // Construct and run a copy job.
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(
                  // Choose a new table ID for the recovered table data.
                  TableId.of(datasetName, recoverTableName),
                  TableId.of(datasetName, snapshotTableId))
              .build();

      Job job = bigquery.create(JobInfo.of(configuration));
      job = job.waitFor();
      if (job.isDone() && job.getStatus().getError() == null) {
        System.out.println("Undelete table recovered successfully.");
      } else {
        System.out.println(
            "BigQuery was unable to copy the table due to an error: \n"
                + job.getStatus().getError());
        return;
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table not found. \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function undeleteTable() {
  // Undeletes "my_table_to_undelete" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table_to_undelete";
  // const recoveredTableId = "my_recovered_table";

  /**
   * TODO(developer): Choose an appropriate snapshot point as epoch milliseconds.
   * For this example, we choose the current time as we're about to delete the
   * table immediately afterwards.
   */
  const snapshotEpoch = Date.now();

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);

  // Construct the restore-from table ID using a snapshot decorator.
  const snapshotTableId = `${tableId}@${snapshotEpoch}`;

  // Construct and run a copy job.
  await bigquery
    .dataset(datasetId)
    .table(snapshotTableId)
    .copy(bigquery.dataset(datasetId).table(recoveredTableId));

  console.log(
    `Copied data from deleted table ${tableId} to ${recoveredTableId}`
  );
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import time

from google.cloud import bigquery

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

# TODO(developer): Choose a table to recover.
# table_id = "your-project.your_dataset.your_table"

# TODO(developer): Choose a new table ID for the recovered table data.
# recovered_table_id = "your-project.your_dataset.your_table_recovered"

# TODO(developer): Choose an appropriate snapshot point as epoch
# milliseconds. For this example, we choose the current time as we're about
# to delete the table immediately afterwards.
snapshot_epoch = int(time.time() * 1000)

# ...

# "Accidentally" delete the table.
client.delete_table(table_id)  # Make an API request.

# Construct the restore-from table ID using a snapshot decorator.
snapshot_table_id = "{}@{}".format(table_id, snapshot_epoch)

# Construct and run a copy job.
job = client.copy_table(
    snapshot_table_id,
    recovered_table_id,
    # Must match the source and destination tables location.
    location="US",
)  # Make an API request.

job.result()  # Wait for the job to complete.

print(
    "Copied data from deleted table {} to {}".format(table_id, recovered_table_id)
)

Si prevés que quieres restablecer una tabla más tarde de lo que permite el período de viaje en el tiempo, crea una instantánea de la tabla. Para obtener más información, consulta Instantáneas de tabla.

Seguridad de las tablas

Para controlar el acceso a las tablas en BigQuery, consulta Introducción a los controles de acceso a tablas.

¿Qué sigue?