Administra tablas

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

  • Actualiza estas características de una tabla:
    • Hora de vencimiento
    • Descripción
    • Definición de esquema
    • Etiquetas
  • Renombra (copia) una tabla.
  • Copia una tabla.
  • Borra una tabla.
  • Restablece una tabla borrada.

Para obtener más información sobre cómo crear y usar tablas, incluso 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.

Actualiza las propiedades de las tablas

Puedes actualizar las características siguientes de una tabla:

Permisos necesarios

Para actualizar las propiedades de una tabla, debes tener acceso de WRITER a nivel de conjunto de datos o debes tener asignada a nivel de proyecto la función de IAM que incluye los permisos necesarios bigquery.tables.update. Las funciones de IAM predefinidas siguientes a nivel de proyecto incluyen permisos bigquery.tables.update:

Además, debido a que la función bigquery.user tiene los permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede actualizar cualquier tabla que un usuario cree en el conjunto de datos. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos. El acceso de OWNER a un conjunto de datos da al usuario control total sobre estos y todas las tablas y vistas presentes.

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

Actualiza la descripción de una tabla

A fin de actualizar la descripción de una tabla, puedes usar la IU web de BigQuery, el comando bq update de CLI o el método tables.patch de la API.

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

IU web

No puedes agregar una descripción cuando creas una tabla con la IU web de BigQuery. Una vez creada la tabla, puedes agregar una descripción en la página Table details (Detalles de la tabla).

  1. Selecciona tu tabla en el panel de navegación.

  2. En la página Table Details, haz clic en Details (Detalles).

  3. En la sección Description (Descripción), haz clic en Describe this table (Describe esta tabla) para abrir el cuadro de descripción.

  4. Ingresa una descripción en el cuadro. Cuando sales del cuadro, el texto se guarda.

    Descripción de tabla

CLI

Ejecuta el comando bq update con la marca --description. Si actualizas una tabla en un proyecto que no es el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos con el formato siguiente: [PROJECT_ID]:[DATASET].

bq update --description "[DESCRIPTION]" [PROJECT_ID]:[DATASET].[TABLE]

Donde:

  • [DESCRIPTION] es el texto de descripción de la tabla entre comillas.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla que actualizas.
  • [TABLE] es el nombre de la tabla que actualizas.

Ejemplos:

Ingresa el comando siguiente para cambiar la descripción de mytable en mydataset a “Description of mytable”. mydataset se encuentra en tu proyecto predeterminado.

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

Ingresa el comando siguiente para cambiar la descripción de mytable en mydataset a “Description of mytable”. mydataset se encuentra en tu 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 para actualizar la descripción de la tabla en el recurso de la tabla. Debido a que el método tables.update reemplaza el recurso de la tabla entero, se prefiere el método tables.patch.

Go

Antes de probar esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Configura la propiedad de descripción de la tabla y llama a Client.update_table() para enviar la actualización a la API.

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').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 vida" o TTL para referirse a la fecha de vencimiento de una tabla.

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 luego crear la tabla, puedes actualizar su fecha de vencimiento con la IU web de BigQuery, el comando bq update de CLI o el método tables.patch de la API.

Cuando actualizas la fecha de vencimiento de una tabla, debes calcular el vencimiento con base en la fecha de creación de la tabla. Por ejemplo, si tu tabla se creó el 3 de enero de 2018 y hoy es 5 de enero, si estableces la fecha de vencimiento a 1 día con la IU web de BigQuery, la fecha de vencimiento se considera “pasada” y la tabla se borra de inmediato.

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

IU web

No puedes agregar una fecha de vencimiento cuando creas una tabla con la IU web. Una vez creada la tabla, puedes agregar o actualizar el vencimiento de la tabla en la página Detalles de la tabla.

  1. Selecciona tu tabla en el panel de navegación.

  2. En la página Detalles de la tabla, haz clic en Detalles.

  3. Para Expiration time (Fecha de vencimiento), haz clic en Edit (Editar).

  4. En el cuadro de diálogo Update expiration (Actualizar vencimiento), haz clic en In (En) y, luego, ingresa la fecha de vencimiento en días.

  5. Haz clic en OK (Aceptar). La fecha de vencimiento actualizada aparece en la página Details.

    Vencimiento de la tabla

CLI

Ejecuta el comando bq update con la marca --expiration. Si actualizas una tabla en un proyecto que no es el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos con el formato siguiente: [PROJECT_ID]:[DATASET].

bq update --expiration [INTEGER] [PROJECT_ID]:[DATASET].[TABLE]

Donde:

  • [INTEGER] es el tiempo de vida predeterminado (en segundos) para 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.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla que actualizas.
  • [TABLE] es el nombre de la tabla que actualizas.

Ejemplos:

Ingresa el comando siguiente para actualizar la fecha de vencimiento de mytable en mydataset a 5 días (432,000 segundos). mydataset se encuentra en tu proyecto predeterminado.

bq update --expiration 432000 mydataset.mytable

Ingresa el comando siguiente para actualizar la fecha de vencimiento de mytable en mydataset a 5 días (432,000 segundos). mydataset se encuentra en 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 para actualizar el vencimiento de la tabla en milisegundos. Debido a que el método tables.update reemplaza el recurso de la tabla entero, se prefiere el método tables.patch.

Go

Antes de probar esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Configura la propiedad Table.expires y llama a Client.update_table() para enviar la actualización a la API.

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

# set table to expire 5 days from now
expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5)
table.expires = expiration
table = client.update_table(table, ['expires'])  # API request

# expiration is stored in milliseconds
margin = datetime.timedelta(microseconds=1000)
assert expiration - margin <= table.expires <= expiration + margin

Actualiza la definición de esquema de la tabla

Para obtener instrucciones sobre cómo actualizar la definición de esquema de la tabla, consulta Modifica los esquemas de tablas.

Renombra una tabla

Por ahora, no puedes renombrar una tabla existente. Si necesitas cambiar el nombre de la tabla, sigue los pasos para copiar la tabla. Cuando especificas la tabla de destino en la operación de copia, usa el nombre de tabla nuevo.

Copia una tabla

Puedes copiar una tabla con la IU web de BigQuery, el comando bq cp de la herramienta de línea de comandos o si llamas al método jobs.insert de la API y configuras un trabajo de copia.

Permisos necesarios

A nivel de conjunto de datos, la copia de una tabla requiere acceso de READER al conjunto de datos fuente que contiene la tabla que se quiere copiar y acceso de WRITER al conjunto de datos de destino.

En lugar de usar permisos a nivel de conjunto de datos, puedes aprovechar una función de IAM a nivel de proyecto que incluya permisos bigquery.tables.create y bigquery.tables.getData. Se requieren permisos bigquery.tables.create para crear la copia de la tabla en el conjunto de datos de destino. Se requieren permisos bigquery.tables.getData para leer los datos en la tabla que se copia.

Las funciones siguientes predefinidas de IAM a nivel de proyecto incluyen los permisos bigquery.tables.create y bigquery.tables.getData para cada conjunto de datos en el proyecto:

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede leer los datos de cualquier tabla creada por el usuario y puede crear copias de la tabla en cualquier conjunto de datos creados por él. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos. El acceso de OWNER a un conjunto de datos otorga al usuario control total sobre este y todas las tablas que contiene.

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

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 las políticas de cuota de BigQuery de trabajos de copia.
  • Cuando usas la IU web de BigQuery para copiar una tabla, no puedes reemplazar una existente en el conjunto de datos de destino. La tabla debe tener un nombre único en el conjunto de datos de destino.
  • Cuando copias tablas, el conjunto de datos de destino debe residir en la misma ubicación que el conjunto de datos que contiene la tabla que se desea copiar. Por ejemplo, no puedes copiar una tabla de un conjunto de datos de la UE y escribirlo en un conjunto de datos de EE.UU.
  • La IU web no es compatible con el copiado de múltiples tablas fuente a una tabla de destino.
  • Cuando copias múltiples tablas fuente a una tabla de destino con CLI o la API, todas las tablas deben tener esquemas idénticos.

Copia una sola tabla fuente

Puedes copiar una sola tabla con la IU web de BigQuery, con el comando bq cp de la herramienta de línea de comandos o si llamas al método jobs.insert de la API, configuras un trabajo de copia y especificas la propiedad configuration.copy.sourceTable.

La IU web de BigQuery solo es compatible con una tabla fuente y una tabla de destino. Para copiar múltiples archivos fuente a una tabla de destino, debes usar la herramienta de línea de comandos o la API.

Para copiar una sola tabla fuente, haz lo siguiente:

IU web

  1. Haz clic en el ícono de mostrar menú flecha hacia abajo que se encuentra al lado de la tabla que deseas copiar y haz clic en Copy Table (copiar tabla).

  2. En el cuadro de diálogo Copy Table (Copiar tabla):

    • En Destination project (Proyecto de destino), selecciona el proyecto que almacenará la tabla copiada.
    • En Destination dataset (Conjunto de datos de destino), selecciona el conjunto de datos en el que deseas almacenar la tabla copiada. Los conjuntos de datos fuente y de destino deben estar en la misma ubicación.
    • En Destination table (Tabla de destino), ingresa un nombre para la tabla nueva. El nombre debe ser único en el conjunto de datos de destino. El nombre de la tabla puede tener hasta 1,024 caracteres de la A a la Z (mayúsculas o minúsculas), números del 0 al 9, o _ (el carácter de guion bajo). No puedes reemplazar una tabla existente en el conjunto de datos de destino con la IU web de BigQuery.

      Copia de tabla

  3. Haz clic en Aceptar para iniciar el trabajo de copia.

Línea de comandos

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 anexa los datos de la tabla fuente a una tabla existente en el conjunto de datos de destino.
  • -f o --force reemplaza una tabla existente en el conjunto de datos de destino y no te solicita confirmación.
  • -n o --no_clobber muestra el mensaje de error siguiente si la tabla existe en el conjunto de datos de destino: Table '[PROJECT_ID]:[DATASET].[TABLE]' already exists, skipping. Si -n no se especifica, el comportamiento predeterminado es solicitarte que elijas si deseas 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í. A fin de obtener más información, consulta Protege datos con claves de Cloud KMS.

Si el conjunto de datos fuente o de destino se encuentra en un proyecto que no es el predeterminado, agrega el ID del proyecto a los nombres del conjunto de datos en el formato siguiente: [PROJECT_ID]:[DATASET].

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

bq --location=[LOCATION] cp -a -f -n [PROJECT_ID]:[DATASET].[SOURCE_TABLE] [PROJECT_ID]:[DATASET].[DESTINATION_TABLE]

Donde:

  • [LOCATION] es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca en asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos fuente o de destino.
  • [SOURCE_TABLE] es la tabla que copias.
  • [DESTINATION_TABLE] es el nombre de la tabla en el conjunto de datos de destino.

Ejemplos:

Ingresa el comando siguiente para copiar mydataset.mytable a mydataset2.mytable2. Los dos conjuntos de datos se encuentran en tu proyecto predeterminado y se crearon en la ubicación multirregión US.

bq --location=US cp mydataset.mytable mydataset2.mytable2

Ingresa el comando siguiente para copiar mydataset.mytable y reemplazar una tabla de destino con el mismo nombre. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en myotherproject. El acceso directo -f se usa para reemplazar la tabla de destino sin confirmación. mydataset y myotherdataset se crearon en la ubicación multirregión US.

bq --location=US cp -f mydataset.mytable myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar mydataset.mytable y mostrar un error si el conjunto de datos de destino contiene una tabla con el mismo nombre. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en myotherproject. El acceso directo -n se usa para evitar reemplazar una tabla con el mismo nombre. Los dos conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -n mydataset.mytable myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar mydataset.mytable y anexar los datos a una tabla de destino con el mismo nombre. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en myotherproject. El acceso directo -a se usa para anexar a la tabla de destino. Los dos conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -a mydataset.mytable myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar mydataset.mytable a mydataset2.mytable2. Ambos conjuntos de datos se encuentran en tu proyecto predeterminado. Además, estos se crearon en la región asia-northeast1.

bq --location=asia-northeast1 cp mydataset.mytable mydataset2.mytable2

API

Para copiar una tabla con la API, haz lo siguiente:

Puedes copiar una tabla existente con la API si llamas al método bigquery.jobs.insert y configuras un trabajo de 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
    },

Donde sourceTable proporciona información sobre la tabla que se copia, destinationTable proporciona información sobre la tabla nueva, createDisposition especifica si se debe crear una tabla si no existe y writeDisposition especifica si se debe reemplazar o anexar una tabla existente.

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para C#.

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.
        // 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 esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

TableId destinationId = TableId.of(dataset, tableName);
JobOption options = JobOption.fields(JobField.STATUS, JobField.USER_EMAIL);
Job job = table.copy(destinationId, options);
// Wait for the job to complete.
try {
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully.
  } else {
    // Handle error case.
  }
} catch (InterruptedException e) {
  // Handle interrupted wait
}

Node.js

Antes de probar esta muestra, sigue las instrucciones de configuración para Node.js que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const srcDatasetId = "my_src_dataset";
// const srcTableId = "my_src_table";
// const destDatasetId = "my_dest_dataset";
// const destTableId = "my_dest_table";

// Creates a client
const bigquery = new BigQuery({projectId});

// Copies 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 esta muestra, sigue las instrucciones de configuración de PHP que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

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 esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

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

source_dataset = client.dataset('samples', project='bigquery-public-data')
source_table_ref = source_dataset.table('shakespeare')

# dataset_id = 'my_dataset'
dest_table_ref = client.dataset(dataset_id).table('destination_table')

job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location='US')  # API request

job.result()  # Waits for job to complete.

assert job.state == 'DONE'
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

Copia múltiples tablas fuente

Puedes copiar múltiples tablas fuente a una tabla de destino con el comando bq cp de la herramienta de línea de comandos o si llamas al método jobs.insert, si configuras un trabajo de copia y si especificas la propiedad configuration.copy.sourceTables. Todas las tablas fuente deben tener esquemas 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 múltiples tablas fuente.

Para copiar múltiples tablas fuente, haz lo siguiente:

Línea de comandos

Ejecuta el comando bq cp y, luego, incluye múltiples tablas fuente 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 anexa los datos de las tablas fuente a una tabla existente en el conjunto de datos de destino.
  • -f o --force reemplaza una tabla de destino existente en el conjunto de datos de destino y no te solicita confirmación.
  • -n o --no_clobber muestra el mensaje de error siguiente si la tabla existe en el conjunto de datos de destino: Table '[PROJECT_ID]:[DATASET].[TABLE]' already exists, skipping. Si -n no se especifica, el comportamiento predeterminado es solicitarte que elijas si deseas 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í. A fin de obtener más información, consulta Protege datos con claves de Cloud KMS.

Si el conjunto de datos fuente o de destino se encuentra en un proyecto que no es el predeterminado, agrega el ID del proyecto a los nombres del conjunto de datos en el formato siguiente: [PROJECT_ID]:[DATASET].

Proporciona la marca --location y establece 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]

Donde:

  • [LOCATION] es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca en asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos fuente o de destino.
  • [SOURCE_TABLE] es la tabla que copias.
  • [DESTINATION_TABLE] es el nombre de la tabla en el conjunto de datos de destino.

Ejemplos:

Ingresa el comando siguiente para copiar mydataset.mytable y mydataset.mytable2 a mydataset2.tablecopy. Todos los conjuntos de datos se encuentran en tu proyecto predeterminado y se crearon en la ubicación multirregión US.

bq --location=US cp mydataset.mytable,mydataset.mytable2 mydataset2.tablecopy

Ingresa el comando siguiente para copiar mydataset.mytable y mydataset.mytable2 a myotherdataset.mytable y reemplazar una tabla de destino con el mismo nombre. El conjunto de datos de destino se encuentra en myotherproject, no en tu proyecto predeterminado. El acceso directo -f se usa para reemplazar la tabla de destino sin confirmación. Los dos conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -f mydataset.mytable,mydataset.mytable2 myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar myproject:mydataset.mytable y myproject:mydataset.mytable2 y mostrar un error si el conjunto de datos de destino contiene una tabla con el mismo nombre. El conjunto de datos de destino se encuentra en myotherproject. El acceso directo -n se usa para evitar reemplazar una tabla con el mismo nombre. Todos los conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -n myproject:mydataset.mytable,myproject:mydataset.mytable2 myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar mydataset.mytable y mydataset.mytable2 y anexar los datos a una tabla de destino con el mismo nombre. El conjunto de datos fuente se encuentra en tu proyecto predeterminado. El conjunto de datos de destino se encuentra en myotherproject. El acceso directo -a se usa para anexar a la tabla de destino. Todos los conjuntos de datos se crearon en la ubicación multirregión US.

bq --location=US cp -a mydataset.mytable,mydataset.mytable2 myotherproject:myotherdataset.mytable

Ingresa el comando siguiente para copiar mydataset.mytable y mydataset.mytable2 a mydataset2.tablecopy. Todos los conjuntos de datos se encuentran en tu proyecto predeterminado y se crearon en la región asia-northeast1.

bq --location=asia-northeast1 cp mydataset.mytable,mydataset.mytable2 mydataset2.tablecopy

API

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

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

Go

Antes de probar esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

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

srcTableIDs := []string{"table1", "table2"}
var tableRefs []*bigquery.Table
for _, v := range srcTableIDs {
	tableRefs = append(tableRefs, dataset.Table(v))
}
copier := dataset.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
}

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

TableId destinationTable = TableId.of(datasetId, destinationTableId);
CopyJobConfiguration configuration =
    CopyJobConfiguration.newBuilder(
        destinationTable,
        Arrays.asList(
            TableId.of(datasetId, "table1"),
            TableId.of(datasetId, "table2")))
    .build();

// Copy the tables.
Job job = bigquery.create(JobInfo.of(configuration));
job = job.waitFor();

// Check the table
StandardTableDefinition table = bigquery.getTable(destinationTable).getDefinition();
System.out.println("State: " + job.getStatus().getState());
System.out.printf("Copied %d rows.\n", table.getNumRows());

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# source_dataset_id = 'my_source_dataset'
# dest_dataset_id = 'my_destination_dataset'

table1_ref = client.dataset(source_dataset_id).table('table1')
table2_ref = client.dataset(source_dataset_id).table('table2')
dest_table_ref = client.dataset(dest_dataset_id).table('destination_table')

job = client.copy_table(
    [table1_ref, table2_ref],
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location='US')  # API request
job.result()  # Waits for job to complete.

assert job.state == 'DONE'
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

Borra tablas

Puedes borrar una tabla con la IU web de BigQuery, el comando bq rm de la herramienta de línea de comandos o si llamas al método tables.delete de la API. Por ahora, solo puedes borrar una tabla a la vez.

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, establece el vencimiento predeterminado de la tabla para el conjunto de datos o establece la fecha de vencimiento cuando creas la tabla.

Permisos necesarios

Para borrar una tabla, debes tener acceso de OWNER a nivel de conjunto de datos o debes tener asignada una función de IAM a nivel de proyecto que incluya los permisos bigquery.tables.delete. Las funciones siguientes de IAM predefinidas a nivel de proyecto incluyen los permisos bigquery.tables.delete:

Los usuarios con funciones predefinidas a nivel de proyecto pueden borrar tablas en cualquier conjunto de datos del proyecto. Los usuarios con permisos de OWNER a nivel de conjunto de datos pueden borrar tablas solo en ese conjunto.

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario con la función bigquery.user puede borrar tablas en cualquier conjunto de datos que cree. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos. El acceso de OWNER a un conjunto de datos da al usuario control total sobre el conjunto de datos y las tablas que hay en él.

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

Borra una tabla

Para borrar una tabla, haz lo siguiente:

IU web

  1. Haz clic en el ícono de flecha hacia abajo ícono de flecha hacia abajo junto al nombre de tu tabla en la barra de navegación y haz clic en Borrar tabla.

  2. Cuando se te solicite, haz clic en Aceptar para confirmar.

Línea de comandos

Usa el comando bq rm con la marca --table (o el acceso directo -t) para borrar una tabla. Cuando usas la CLI para quitar una tabla, debes confirmar la acción. Puedes usar la marca --force (o el acceso directo -f) para omitir la 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 en el formato siguiente: [PROJECT_ID]:[DATASET].

bq rm -f -t [PROJECT_ID]:[DATASET].[TABLE]

Donde:

  • [PROJECT_ID] es el ID del proyecto.
  • [DATASET] es el nombre del conjunto de datos que contiene la tabla.
  • [TABLE] es el nombre de la tabla que borras.

Ejemplos:

Ingresa el comando siguiente para borrar mytable de mydataset. mydataset se encuentra en tu proyecto predeterminado.

bq rm -t mydataset.mytable

Ingresa el comando siguiente para borrar mytable de mydataset. mydataset se encuentra en myotherproject, no en tu proyecto predeterminado.

bq rm -t myotherproject:mydataset.mytable

Ingresa el comando siguiente para borrar mytable de mydataset. mydataset se encuentra en tu proyecto predeterminado. El comando usa el acceso directo -f para omitir la confirmación.

bq rm -f -t mydataset.mytable

API

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

C#

Antes de probar esta muestra, sigue las instrucciones de configuración para C# que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para C#.

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 esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
table := client.Dataset(datasetID).Table(tableID)
if err := table.Delete(ctx); err != nil {
	return err
}

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

Node.js

Antes de probar esta muestra, sigue las instrucciones de configuración para Node.js que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_dataset";
// const tableId = "my_table";

// Creates a client
const bigquery = new BigQuery({projectId});

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

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

PHP

Antes de probar esta muestra, sigue las instrucciones de configuración de PHP que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

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 esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'
# table_id = 'my_table'

table_ref = client.dataset(dataset_id).table(table_id)
client.delete_table(table_ref)  # API request

print('Table {}:{} deleted.'.format(dataset_id, table_id))

Ruby

Antes de probar esta muestra, sigue las instrucciones de configuración para Ruby que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Ruby.

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 una tabla borrada

Es posible restablecer una tabla dentro de los 2 días su eliminación. Si se aprovecha la función de decorador instantáneo, es posible hacer referencia a una tabla antes del evento de eliminación y, luego, copiarla. Sin embargo, hay dos advertencias respecto a la creación de una referencia con este método:

  • No puedes hacer una referencia a una tabla borrada si se creó una tabla con el mismo ID en el conjunto de datos luego del tiempo de eliminación.

  • No puedes hacer referencia a una tabla borrada si el conjunto de datos que la encapsulaba también se borró o se recreó desde el evento de eliminación.

CLI

Para recuperar una tabla con SQL heredado, usa el decorador instantáneo @<time>. Primero, determina una marca de tiempo UNIX de cuando existió la tabla (en milisegundos). Luego, copia la tabla en esa marca de tiempo a la tabla nueva. La tabla nueva debe tener un nombre distinto al de la tabla borrada.

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

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

bq --location=[LOCATION] cp mydataset.mytable@1418864998000 mydataset.newtable

Para obtener más información, consulta Decoradores de tablas en SQL heredado.

Go

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

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
}

Java

Antes de probar esta muestra, sigue las instrucciones de configuración de Java que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

// String datasetId = "my_dataset";
String tableId = "oops_undelete_me";

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

// "Accidentally" delete the table.
bigquery.delete(TableId.of(datasetId, tableId));

// Construct the restore-from tableID using a snapshot decorator.
String snapshotTableId = String.format("%s@%d", tableId, snapTime);
// Choose a new table ID for the recovered table data.
String recoverTableId = String.format("%s_recovered", tableId);

// Construct and run a copy job.
CopyJobConfiguration configuration =
    CopyJobConfiguration.newBuilder(
        TableId.of(datasetId, recoverTableId),
        TableId.of(datasetId, snapshotTableId))
    .build();
Job job = bigquery.create(JobInfo.of(configuration));
job = job.waitFor();

// Check the table
StandardTableDefinition table = bigquery.getTable(
        TableId.of(datasetId, recoverTableId)).getDefinition();
System.out.println("State: " + job.getStatus().getState());
System.out.printf("Recovered %d rows.\n", table.getNumRows());

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# import time
# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'  # Replace with your dataset ID.
# table_id = 'my_table'      # Replace with your table ID.

table_ref = client.dataset(dataset_id).table(table_id)

# 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_ref)  # API request

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

# Choose a new table ID for the recovered table data.
recovered_table_id = '{}_recovered'.format(table_id)
dest_table_ref = client.dataset(dataset_id).table(recovered_table_id)

# Construct and run a copy job.
job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location='US')  # API request

job.result()  # Waits for job to complete.

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

Pasos siguientes

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

Enviar comentarios sobre…

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