Administra conjuntos de datos

En este documento, se describe cómo copiar conjuntos de datos, volver a crearlos en otra ubicación, protegerlos, borrar conjuntos de datos, restablecer tablas de conjuntos de datos borrados y recuperar conjuntos de datos en BigQuery.

Como administrador de BigQuery, puedes organizar y controlar el acceso a las tablas y las vistas que usan los analistas. Para obtener más información sobre conjuntos de datos, consulta Introducción a los conjuntos de datos.

No puedes cambiar el nombre de un conjunto de datos existente ni reubicar un conjunto de datos después de crearlo. Como solución alternativa para cambiar el nombre del conjunto de datos, puedes copiar un conjunto de datos y cambiar el nombre del conjunto de datos de destino. Para reubicar un conjunto de datos, puedes seguir uno de los siguientes métodos:

Roles obligatorios

En esta sección, se describen los roles y los permisos que necesitas para administrar los conjuntos de datos. Si tu conjunto de datos de origen o de destino está en el mismo proyecto que usas para copiar, no necesitas roles ni permisos adicionales en ese conjunto de datos.

Para obtener los permisos que necesitas a fin de administrar los conjuntos de datos, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Si quieres obtener más información para otorgar funciones, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar los conjuntos de datos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Los siguientes permisos son necesarios para administrar los conjuntos de datos:

  • Copiar un conjunto de datos:
    • bigquery.transfers.update en el proyecto de destino
    • bigquery.jobs.create en el proyecto de destino
    • bigquery.datasets.get en el conjunto de datos de origen y de destino
    • bigquery.tables.list en el conjunto de datos de origen y de destino
    • bigquery.datasets.update en el conjunto de datos de destino
    • bigquery.tables.create en el conjunto de datos de destino
  • Borrar un conjunto de datos:
    • bigquery.datasets.delete en el proyecto
    • bigquery.tables.delete en el proyecto
  • Restablece un conjunto de datos borrado:
    • bigquery.datasets.create en el proyecto
    • bigquery.datasets.get en el conjunto de datos

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

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Copia conjuntos de datos

Puedes copiar un conjunto de datos, incluidos los datos particionados dentro de una región o entre regiones, sin extraer, mover ni volver a cargar los datos en BigQuery. BigQuery usa el Servicio de transferencia de datos de BigQuery en el backend para copiar conjuntos de datos. Para conocer las consideraciones de ubicación cuando transfieres datos, consulta Ubicación y transferencias de datos.

Para cada configuración de copia de conjunto de datos, puedes tener una ejecución de transferencia activa a la vez. Las ejecuciones de transferencia adicionales están en cola. Si usas la consola de Google Cloud, puedes programar copias recurrentes y configurar un correo electrónico o notificaciones de Pub/Sub con el Servicio de transferencia de datos de BigQuery.

Limitaciones

Las siguientes limitaciones se aplican cuando copias conjuntos de datos:

  • No puedes copiar los siguientes recursos de un conjunto de datos de origen:

    • Vistas.
    • Rutinas, incluidas las UDF
    • Tablas externas.
    • Cambia las tablas de captura de datos (CDC) si el trabajo de copia está entre regiones. Se admite la copia de tablas de CDC dentro de la misma región.
    • Tablas encriptadas con claves de encriptación administradas por el cliente (CMEK) si el trabajo de copia está entre regiones. Se admite la copia de tablas con la encriptación predeterminada entre regiones.

      Puedes copiar todas las tablas encriptadas en la misma región, incluidas las tablas encriptadas con CMEK.

  • No puedes usar los siguientes recursos como conjuntos de datos de destino para los trabajos de copia:

    • Almacenamiento optimizado para escritura.
    • Conjuntos de datos encriptados con CMEK si el trabajo de copia se encuentra en varias regiones.

      Sin embargo, las tablas encriptadas con CMEK se permiten como tablas de destino cuando se copian dentro de la misma región.

  • La frecuencia mínima entre los trabajos de copia es de 12 horas.

  • No se admite la adición de datos a una tabla particionada en el conjunto de datos de destino.

  • Si existe una tabla en el conjunto de datos de origen y el conjunto de datos de destino, y la tabla de origen no cambió desde la última copia exitosa, se omite. La tabla de origen se omite, incluso si está seleccionada la casilla de verificación Reemplazar tablas de destino.

  • Cuando se truncan las tablas en el conjunto de datos de destino, el trabajo de copia del conjunto de datos no detecta ningún cambio realizado en los recursos del conjunto de datos de destino antes de comenzar el trabajo de copia. El trabajo de copia del conjunto de datos reemplaza todos los datos del conjunto de datos de destino, incluidos los esquemas y las tablas.

  • Es posible que la tabla de destino no refleje los cambios realizados en las tablas de origen después de que comience un trabajo de copia.

  • La copia de un conjunto de datos no es compatible con las regiones de BigQuery Omni.

  • Para copiar un conjunto de datos en un proyecto en otro perímetro de servicio de Controles del servicio de VPC, debes configurar las siguientes reglas de salida:

    • En la configuración del perímetro de servicio de los Controles del servicio de VPC del proyecto de destino, la principal de IAM debe tener los siguientes métodos:

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • En la configuración del perímetro de servicio de los Controles del servicio de VPC del proyecto de origen, el principal de IAM que se usa debe tener el método configurado como All Methods.

Copia un conjunto de datos

Selecciona una de las opciones siguientes:

Consola

  1. Habilita el Servicio de transferencia de datos de BigQuery para tu conjunto de datos de destino.

    Habilitar la API del Servicio de transferencia de datos de BigQuery.

  2. Asegúrate de tener los roles necesarios.

    Si quieres configurar las notificaciones de ejecución de transferencias para Pub/Sub (Opción 2 más adelante en estos pasos), debes tener el permiso pubsub.topics.setIamPolicy.

    Si solo configuras las notificaciones por correo electrónico, no se requieren permisos de Pub/Sub. Para obtener más información, consulta la sección sobre notificaciones de ejecución del Servicio de transferencia de datos de BigQuery.

  3. Crea un conjunto de datos de BigQuery en la misma región o en una región diferente a la de tu conjunto de datos de origen.

Opción 1: Usa la función de copia de BigQuery

Para crear una transferencia única, usa la función de copia de BigQuery:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

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

  3. En la sección Información del conjunto de datos, haz clic en Copiar y, luego, haz lo siguiente:

    1. En el campo Conjunto de datos, crea un conjunto de datos nuevo o selecciona el ID de un conjunto de datos existente de la lista.

      Los nombres de conjuntos de datos dentro de un proyecto deben ser exclusivos. El proyecto y el conjunto de datos pueden estar en regiones diferentes, pero no todas las regiones se admiten para la copia de conjuntos de datos entre regiones.

      En el campo Ubicación, se muestra la ubicación del conjunto de datos de origen.

    2. Opcional: Para reemplazar los datos y el esquema de las tablas de destino por las tablas de origen, selecciona la casilla de verificación Reemplazar tablas de destino. Las tablas de origen y destino deben tener el mismo esquema de partición.

    3. Para copiar el conjunto de datos, haz clic en Copiar.

Opción 2: Usa el Servicio de transferencia de datos de BigQuery.

Para programar copias recurrentes y configurar las notificaciones de correo electrónico o Pub/Sub, usa el Servicio de transferencia de datos de BigQuery en la consola de Google Cloud:

  1. Ve a la página Transferencia de datos.

    Ir a Transferencias de datos

  2. Haz clic en Crear una transferencia.

  3. En la lista Origen, selecciona Copia de conjunto de datos.

  4. En el campo Nombre visible, ingresa un nombre para la ejecución de la transferencia.

  5. En la sección Opciones de programación, haz lo siguiente:

    1. En Frecuencia de repetición, elige una opción para la frecuencia con la que se ejecutará la transferencia.

      Si seleccionas Personalizado, deberás ingresar una frecuencia personalizada, por ejemplo, every day 00:00. Para obtener más información, consulta Da formato al programa.

    2. En Fecha de inicio y hora de ejecución (Start date and run time), ingresa la fecha y hora para iniciar la transferencia. Si seleccionas Start now (Comenzar ahora), esta opción se inhabilitará.

  6. En la sección Configuración de destino, selecciona un conjunto de datos de destino para almacenar tus datos de transferencia. También puedes hacer clic en CREAR UN CONJUNTO DE DATOS NUEVO a fin de crear un conjunto de datos nuevo antes de seleccionarlo para esta transferencia.

  7. En la sección Detalles de la fuente de datos, ingresa la siguiente información:

    1. En Conjunto de datos de origen, ingresa el ID del conjunto de datos que deseas copiar.
    2. En Proyecto de origen, ingresa el ID del proyecto de tu conjunto de datos de origen.
  8. Para reemplazar los datos y el esquema de las tablas de destino por las tablas de origen, selecciona la casilla de verificación Reemplazar tablas de destino. Las tablas de origen y destino deben tener el mismo esquema de partición.

  9. En el menú Cuenta de servicio, selecciona una cuenta de servicio de las cuentas de servicio asociadas a tu proyecto de Google Cloud. Puedes asociar una cuenta de servicio con tu transferencia en lugar de usar tus credenciales de usuario. Para obtener más información sobre el uso de cuentas de servicio con transferencias de datos, consulta Usa cuentas de servicio.

  10. Opcional: En la sección Opciones de notificación, haz lo siguiente:

    • Para habilitar las notificaciones por correo electrónico, haz clic en el botón de activar o desactivar. Cuando habilitas esta opción, el propietario de la configuración de la transferencia recibe una notificación por correo electrónico cuando falla una ejecución de transferencia.
    • Para habilitar las notificaciones de Pub/Sub, haz clic en el botón de activar o desactivar y, luego, selecciona un nombre de tema de la lista o haz clic enCrear un tema. Esta opción configura las notificaciones de ejecución de Pub/Sub para tu transferencia.
  11. Haga clic en Save.

bq

  1. Habilita el Servicio de transferencia de datos de BigQuery para tu conjunto de datos de destino.

  2. Asegúrate de tener los roles necesarios.

  3. Para crear un conjunto de datos de BigQuery, usa el comando bq mk con la marca de creación de conjuntos de datos --dataset y la marca location:

    bq mk \
      --dataset \
      --location=LOCATION \
      PROJECT:DATASET
    

    Reemplaza lo siguiente:

    • LOCATION: Es la ubicación en la que deseas copiar el conjunto de datos.
    • PROJECT: Es el ID del proyecto de tu conjunto de datos de destino.
    • DATASET: Es el nombre del conjunto de datos de destino.
  4. Para copiar un conjunto de datos, usa el comando bq mk con la marca de creación de transferencias --transfer_config y la marca --data_source. Debes configurar la marca --data_source como cross_region_copy. A fin de obtener una lista completa de los valores válidos para la marca --data_source, consulta las marcas de transfer-config en la referencia de la herramienta de línea de comandos de bq.

    bq mk \
      --transfer_config \
      --project_id=PROJECT \
      --data_source=cross_region_copy \
      --target_dataset=DATASET \
      --display_name=NAME \
     --service_account_name=SERCICE_ACCOUNT \
      --params='PARAMETERS'
    

    Reemplaza lo siguiente:

    • NAME: Es el nombre visible del trabajo de copia o la configuración de transferencia.

    • SERVICE_ACCOUNT: El nombre de la cuenta de servicio que se usa para autenticar tu transferencia. La cuenta de servicio debe ser propiedad del mismo project_id que se usa para crear la transferencia y debe tener todos los permisos necesarios.

    • PARAMETERS: son los parámetros de la configuración de la transferencia en formato JSON.

      Los parámetros para una configuración de copia de conjunto de datos incluyen los siguientes:

      • source_dataset_id: Es el ID del conjunto de datos de origen que deseas copiar.
      • source_project_id: Es el ID del proyecto en el que se encuentra tu conjunto de datos de origen.
      • overwrite_destination_table: Una marca opcional que te permite truncar las tablas de una copia anterior y actualizar todos los datos

      Las tablas de origen y destino deben tener el mismo esquema de partición.

    En los siguientes ejemplos, se muestra el formato de los parámetros, según el entorno de tu sistema:

    • Linux: Usa comillas simples para encerrar la string JSON, por ejemplo:

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Línea de comandos de Windows: usa comillas dobles para encerrar la string JSON y escapa las comillas dobles en la string con una barra inversa, por ejemplo:

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • PowerShell: usa comillas simples para encerrar la string JSON y escapa las comillas dobles en la string con una barra inversa, por ejemplo:

      '{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
      

    Por ejemplo, el siguiente comando crea una configuración de copia de conjunto de datos llamada My Transfer con un conjunto de datos de destino llamado mydataset y un proyecto con el ID de myproject.

    bq mk \
      --transfer_config \
      --project_id=myproject \
      --data_source=cross_region_copy \
      --target_dataset=mydataset \
      --display_name='My Transfer' \
      --params='{
          "source_dataset_id":"123_demo_eu",
          "source_project_id":"mysourceproject",
          "overwrite_destination_table":"true"
          }'
    

API

  1. Habilita el Servicio de transferencia de datos de BigQuery para tu conjunto de datos de destino.

  2. Asegúrate de tener los roles necesarios.

  3. Para crear un conjunto de datos de BigQuery, llama al método datasets.insert con un recurso de conjunto de datos definido.

  4. Para copiar un conjunto de datos, usa el método projects.locations.transferConfigs.create y proporciona una instancia del recurso TransferConfig.

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.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

Para evitar costos de almacenamiento adicionales, considera borrar el conjunto de datos anterior.

Visualiza trabajos de copia de conjuntos de datos

Para ver el estado y visualizar los detalles de un trabajo de copia de conjunto de datos en la consola de Google Cloud, haz lo siguiente:

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

    Ir a Transferencias de datos

  2. Selecciona la transferencia cuyos detalles deseas ver y, luego, haz lo siguiente:

    1. En la página Detalles de la transferencia, selecciona una ejecución de la transferencia.

    2. Para actualizar, haz clic en Actualizar.

Vuelve a crear conjuntos de datos en otra ubicación

Para mover un conjunto de datos de una ubicación a otra de forma manual, sigue estos pasos:

  1. Exporta los datos desde tus tablas de BigQuery hasta un bucket de Cloud Storage en la misma ubicación de tu conjunto de datos o en una ubicación dentro de la ubicación de tu conjunto de datos. Por ejemplo, si tu conjunto de datos se encuentra en la ubicación multirregional EU, puedes exportar tus datos a la ubicación europe-west1 de Bélgica, que forma parte de la UE.

    No se aplican cargos por exportar datos desde BigQuery, pero sí por almacenar los datos exportados en Cloud Storage. Las exportaciones de BigQuery están sujetas a los límites de los trabajos de exportación.

  2. Copia o mueve los datos de tu bucket de exportación de Cloud Storage a un bucket nuevo que hayas creado en la ubicación de destino. Por ejemplo, si mueves tus datos desde la multirregión US a la región asia-northeast1 de Tokio, debes transferir los datos a un bucket que hayas creados en Tokio. Para obtener más información sobre la transferencia de objetos de Cloud Storage, consulta Copia, cambia el nombre y mueve objetos en la documentación de Cloud Storage.

    La transferencia de datos entre regiones incurre en cargos de salida de red en Cloud Storage.

  3. Crea un nuevo conjunto de datos de BigQuery en la ubicación nueva y, luego, carga los datos en el bucket de Cloud Storage en el conjunto de datos nuevo.

    No se te cobrará por cargar los datos en BigQuery, pero sí por almacenar los datos en Cloud Storage hasta que borres los datos o el bucket. También se te cobra por almacenar los datos en BigQuery después de que se carguen. La carga de datos en BigQuery está sujeta a los límites de los trabajos de carga.

También puedes usar Cloud Composer para mover y copiar conjuntos de datos grandes de manera programática.

A fin de obtener más información sobre el uso de Cloud Storage para almacenar y mover conjuntos de datos grandes, consulta Usa Cloud Storage con macrodatos.

Conjuntos de datos seguros

Para controlar el acceso a los conjuntos de datos en BigQuery, consulta Controla el acceso a los conjuntos de datos. Para obtener información sobre la encriptación de datos, consulta Encriptación en reposo.

Borrar conjuntos de datos

Cuando borras un conjunto de datos con la consola de Google Cloud, se borran las tablas y vistas del conjunto de datos, incluidos sus datos. Cuando borras un conjunto de datos con la herramienta de línea de comandos de bq, debes usar la marca -r para borrar las tablas y vistas.

Para borrar un conjunto de datos, elige una de las siguientes opciones:

Consola

  1. Ve a la página de BigQuery.

    Ir a BigQuery

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

  3. Expande la opción Acciones y haz clic en Borrar.

  4. En el cuadro de diálogo Borrar conjunto de datos, escribe delete en el campo y, luego, haz clic en Borrar.

SQL

Para borrar un conjunto de datos, usa elDROP SCHEMAde la declaración DDL.

En el siguiente ejemplo, se borra un conjunto de datos llamado mydataset:

  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 SCHEMA IF EXISTS mydataset;
    

    Según la configuración predeterminada, esto solo funciona para borrar un conjunto de datos vacío. Para borrar un conjunto de datos y todo su contenido, usa la palabra clave CASCADE:

    DROP SCHEMA IF EXISTS mydataset CASCADE;
    

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Usa el comando bq rm con la marca --dataset o -d, que es opcional. Si tu conjunto de datos contiene tablas, debes usar la marca -r para quitar todas las tablas del conjunto de datos. Si usas la marca -r, puedes omitir la marca --dataset o -d.

Después de ejecutar el comando, el sistema solicita confirmación. Puedes usar la marca -f para omitir la confirmación.

Si borras una tabla en un proyecto que no sea tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: PROJECT_ID:DATASET.

bq rm -r -f -d PROJECT_ID:DATASET

Reemplaza lo siguiente:

  • PROJECT_ID: El ID de tu proyecto
  • DATASET: Es el nombre del conjunto de datos que borrarás

Ejemplos:

Ingresa el siguiente comando para quitar un conjunto de datos llamado mydataset y todas las tablas que contiene de tu proyecto predeterminado. El comando usa la marca -d.

bq rm -r -d mydataset

Cuando se te solicite, escribe y y presione Entrar.

Ingresa el siguiente comando para quitar mydataset y todas las tablas que contiene de myotherproject. El comando no usa la marca -d opcional. La marca -f se usa para omitir la confirmación.

bq rm -r -f myotherproject:mydataset

Puedes usar el comando bq ls para confirmar que se borró el conjunto de datos.

API

Llama al método datasets.delete a fin de borrar el conjunto de datos y establece el parámetro deleteContents en true para borrar las tablas que contiene.

C#

En la siguiente muestra de código, se borra un conjunto de datos vacío.

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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.

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

public class BigQueryDeleteDataset
{
    public void DeleteDataset(
        string projectId = "your-project-id",
        string datasetId = "your_empty_dataset"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Delete a dataset that does not contain any tables
        client.DeleteDataset(datasetId: datasetId);
        Console.WriteLine($"Dataset {datasetId} deleted.");
    }
}

El siguiente ejemplo de código borra un conjunto de datos y todo su contenido:

// Copyright(c) 2018 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
//
// http://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.
//

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

public class BigQueryDeleteDatasetAndContents
{
    public void DeleteDatasetAndContents(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_with_tables"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Use the DeleteDatasetOptions to delete a dataset and its contents
        client.DeleteDataset(
            datasetId: datasetId,
            options: new DeleteDatasetOptions() { DeleteContents = true }
        );
        Console.WriteLine($"Dataset {datasetId} and contents deleted.");
    }
}

Comienza a usarlo

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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
import (
	"context"
	"fmt"

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

// deleteDataset demonstrates the deletion of an empty dataset.
func deleteDataset(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// To recursively delete a dataset and contents, use DeleteWithContents.
	if err := client.Dataset(datasetID).Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

En la siguiente muestra de código, se borra un conjunto de datos vacío.

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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

public class DeleteDataset {

  public static void runDeleteDataset() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDataset(projectId, datasetName);
  }

  public static void deleteDataset(String projectId, String datasetName) {
    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();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      boolean success = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted. \n" + e.toString());
    }
  }
}

El siguiente ejemplo de código borra un conjunto de datos y todo su contenido:

/*
 * Copyright 2020 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
 *
 * http://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.
 */

package com.example.bigquery;

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

// Sample to delete dataset with contents.
public class DeleteDatasetAndContents {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDatasetAndContents(projectId, datasetName);
  }

  public static void deleteDatasetAndContents(String projectId, String datasetName) {
    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();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      // Use the force parameter to delete a dataset and its contents
      boolean success = bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted with contents successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted with contents. \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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteDataset() {
  // Deletes a dataset named "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';

  // Create a reference to the existing dataset
  const dataset = bigquery.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} 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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->delete();
printf('Deleted dataset %s' . PHP_EOL, $datasetId);

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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.

from google.cloud import bigquery

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

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

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

En la siguiente muestra de código, se borra un conjunto de datos vacío.

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.

Instala el cliente de Python para la API de Data Transfer de BigQuery con pip install google-cloud-bigquery-datatransfer. Luego, crea una configuración de transferencia para copiar el conjunto de datos.
require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

El siguiente ejemplo de código borra un conjunto de datos y todo su contenido:

# Copyright 2020 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
#
#     http://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.
require "google/cloud/bigquery"

def delete_dataset_and_contents dataset_id = "my_dataset_with_tables"
  bigquery = Google::Cloud::Bigquery.new

  # Use the force parameter to delete a dataset and its contents
  dataset = bigquery.dataset dataset_id
  dataset.delete force: true
  puts "Dataset #{dataset_id} and contents deleted."
end

Restablece tablas de conjuntos de datos borrados

Puedes restablecer tablas a partir de un conjunto de datos borrado que se encuentran dentro del período de viaje en el tiempo del conjunto de datos. Para restablecer todo el conjunto de datos, consulta Recupera conjuntos de datos.

  1. Crea un conjunto de datos con el mismo nombre y en la misma ubicación que el original.
  2. Elige una marca de tiempo anterior a la eliminación del conjunto de datos original mediante un formato de milisegundos desde la época, por ejemplo, 1418864998000.
  3. Copia la tabla originaldataset.table1 en el momento 1418864998000 en el nuevo conjunto de datos:

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

Recupera conjuntos de datos

Puedes recuperar un conjunto de datos para recuperarlo al estado que tenía cuando se borró. Solo puedes recuperar conjuntos de datos que se encuentren dentro de tu período de viaje en el tiempo. Esta recuperación incluye todos los objetos que se encontraban en el conjunto de datos, las propiedades del conjunto de datos y la configuración de seguridad. Para los recursos que no se recuperan, consulta Recupera las limitaciones de los conjuntos de datos.

Recupera las limitaciones de los conjuntos de datos

  • Los conjuntos de datos restablecidos pueden hacer referencia a las principales de seguridad que ya no existen.
  • Las referencias a un conjunto de datos borrado en los conjuntos de datos vinculados no se restablecen mediante la recuperación. Los suscriptores deben volver a suscribirse para restablecer los vínculos manualmente.
  • Las etiquetas de negocios no se restablecen mediante la recuperación.
  • Debes actualizar de forma manual las vistas materializadas y volver a autorizar las vistas autorizadas, los conjuntos de datos autorizados y las rutinas autorizadas. Ten en cuenta que, cuando se borran recursos autorizados (vistas, conjuntos de datos y rutinas), la autorización tarda hasta 24 horas en borrarse. Por lo tanto, si recuperas un conjunto de datos con un recurso autorizado menos de 24 horas después de la eliminación, es posible que no sea necesario volver a autorizarlo. Como práctica recomendada, siempre verifica la autorización después de recuperar los recursos.

Recupera un conjunto de datos

Para recuperar un conjunto de datos, selecciona una de las siguientes opciones:

SQL

Usa la declaración del lenguaje de definición de datos UNDROP SCHEMA (DDL):

  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:

    UNDROP SCHEMA DATASET_ID;
    

    Reemplaza DATASET_ID por el conjunto de datos que deseas recuperar.

  3. Especifica la ubicación del conjunto de datos que deseas recuperar.

  4. Haz clic en Ejecutar.

Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.

API

Llama al método datasets.undelete.

Cuando recuperas un conjunto de datos, pueden ocurrir los siguientes errores:

  • ALREADY_EXISTS: ya existe un conjunto de datos con el mismo nombre en la región que intentaste recuperar. No puedes usar la recuperación para reemplazar o combinar los conjuntos de datos.
  • NOT_FOUND: el conjunto de datos que intentas recuperar ya pasó su período de viaje en el tiempo o nunca existió.
  • ACCESS_DENIED: no tienes los permisos correctos para recuperar este conjunto de datos.

Cuotas

Para obtener información sobre las cuotas de copia, consulta Trabajos de copia. El uso de los trabajos de copia está disponible en INFORMATION_SCHEMA. Para obtener información sobre cómo consultar la vista INFORMATION_SCHEMA.JOBS, consulta Utiliza los trabajos de copia.

Precios

Los cargos de salida de datos por los datos que se copian entre regiones o multirregiones se facturan con las mismas tarifas que los precios de extracción de datos.

BigQuery envía datos comprimidos para copiar entre regiones, por lo que los datos que se facturan pueden ser menores que el tamaño real de tu conjunto de datos. Para obtener más información, consulte los Precios de BigQuery.

¿Qué sigue?