Administra conjuntos de datos

En este documento, se describe cómo volver a crear conjuntos de datos en otra ubicación, protegerlos, borrarlos y restablecer tablas de conjuntos de datos borrados en BigQuery. Para obtener información sobre cómo restablecer (o recuperar) un conjunto de datos borrado, consulta Restablece conjuntos de datos borrados.

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 reubicarlo después de crearlo.

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.

Borra un conjunto de datos

Otorga estos roles para borrar un conjunto de datos.

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

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

Permisos necesarios

Se requieren los siguientes permisos para borrar conjuntos de datos:

  • bigquery.datasets.delete en el proyecto
  • bigquery.tables.delete en el proyecto

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

Cómo volver 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 de tus tablas de BigQuery a un bucket de Cloud Storage.

    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 extracció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 tus datos del bucket de Cloud Storage en el nuevo conjunto de datos.

    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 Managed Service para Apache Airflow 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 Cloud de Confiance consola, sus tablas y vistas, incluidos sus datos, se borran automáticamente. Sin embargo, cuando uses cualquier otro método, primero debes vaciar el conjunto de datos o especificar las marcas, los parámetros o las palabras clave correspondientes que fuerzan la eliminación del contenido del conjunto de datos.

Si intentas borrar un conjunto de datos no vacío sin las marcas o los parámetros adecuados, la operación fallará y se mostrará el siguiente error: Dataset project:dataset is still in use.

Cuando se borra un conjunto de datos, se crea una entrada de registro de auditoría para el borrado. No crea entradas de registro separadas para cada tabla borrada dentro del conjunto de datos.

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

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorar.

    Botón destacado del panel Explorador.

  3. En el panel Explorador, expande tu proyecto, haz clic en Conjuntos de datos y, luego, haz clic en el conjunto de datos.

  4. En el panel de detalles, haz clic en Borrar.

  5. 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 Cloud de Confiance , ve a la página BigQuery.

    Ir a BigQuery

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

    DROP SCHEMA IF EXISTS mydataset;

    De forma 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 te pedirá que confirmes la acció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 el 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.

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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.");
    }
}

En el siguiente muestra de código, se 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.");
    }
}

Go

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

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

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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());
    }
  }
}

En el siguiente muestra de código, se 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.

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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.

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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.

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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

En el siguiente muestra de código, se 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 Cómo restablecer conjuntos de datos borrados.

  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
    

    Para encontrar los nombres de las tablas no vacías que se encontraban en el conjunto de datos borrado, consulta la vista INFORMATION_SCHEMA.TABLE_STORAGE del conjunto de datos dentro del período de viaje en el tiempo.

Restablece los conjuntos de datos borrados

Para obtener información sobre cómo restablecer (o recuperar) un conjunto de datos borrado, consulta Cómo restablecer conjuntos de datos borrados.

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 Vista JOBS.

Precios

Para obtener información sobre los precios de la copia de conjuntos de datos, consulta Precios de replicación de datos.

BigQuery envía datos comprimidos para copiar entre regiones, por lo que la cantidad de datos facturados puede ser menor que el tamaño real de tu conjunto de datos. Para obtener más información, consulte los Precios de BigQuery.

¿Qué sigue?