Gestisci i set di dati

Questo documento descrive come ricreare i set di dati in un'altra posizione, proteggerli, eliminarli e ripristinare le tabelle dai set di dati eliminati in BigQuery. Per informazioni su come ripristinare (o recuperare) un set di dati eliminato, vedi Ripristinare i set di dati eliminati.

In qualità di amministratore BigQuery, puoi organizzare e controllare l'accesso a tabelle e viste utilizzate dagli analisti. Per saperne di più sui set di dati, consulta Introduzione ai set di dati.

Non puoi modificare il nome di un set di dati esistente o spostarlo dopo la sua creazione.

Ruoli obbligatori

Questa sezione descrive i ruoli e le autorizzazioni necessari per gestire i set di dati. Se il set di dati di origine o di destinazione si trova nello stesso progetto che utilizzi per la copia, non hai bisogno di ulteriori autorizzazioni o ruoli per quel set di dati.

Eliminazione di un set di dati

Concedi questi ruoli per eliminare un set di dati.

Per ottenere le autorizzazioni necessarie per eliminare i set di dati, chiedi all'amministratore di concederti il ruolo IAM Proprietario dati BigQuery (roles/bigquery.dataOwner) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per eliminare i set di dati. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per eliminare i set di dati sono necessarie le seguenti autorizzazioni:

  • bigquery.datasets.delete sul progetto
  • bigquery.tables.delete sul progetto

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Ricreare i set di dati in un'altra posizione

Per spostare manualmente un set di dati da una posizione all'altra:

  1. Esporta i dati dalle tabelle BigQuery a un bucket Cloud Storage.

    Non sono previsti costi per l'esportazione dei dati da BigQuery, ma l'archiviazione dei dati esportati in Cloud Storage comporta un addebito di costi. Le esportazioni di BigQuery sono soggette ai limiti dei job di estrazione.

  2. Copia o sposta i dati dal bucket Cloud Storage di esportazione in un nuovo bucket creato nella località di destinazione. Ad esempio, se sposti i dati dalla regione multiregionale US alla regione di Tokyo asia-northeast1, devi trasferirli in un bucket che hai creato a Tokyo. Per informazioni sul trasferimento degli oggetti Cloud Storage, consulta Copiare, rinominare e spostare oggetti nella documentazione di Cloud Storage.

    Il trasferimento di dati tra regioni comporta costi per il traffico in uscita dalla rete in Cloud Storage.

  3. Crea un nuovo set di dati BigQuery nella nuova posizione, quindi carica i dati dal bucket Cloud Storage nel nuovo set di dati.

    Non ti viene addebitato alcun costo per il caricamento dei dati in BigQuery, ma dovrai sostenere costi per l'archiviazione dei dati in Cloud Storage finché non li elimini o non elimini il bucket. Ti vengono addebitati anche i costi di archiviazione dei dati in BigQuery dopo il caricamento. Il caricamento dei dati in BigQuery è soggetto ai limiti dei job di caricamento.

Puoi anche utilizzare Managed Service for Apache Airflow per spostare e copiare grandi set di dati in modo programmatico.

Per ulteriori informazioni sull'utilizzo di Cloud Storage per archiviare e spostare set di dati di grandi dimensioni, consulta Utilizzo di Cloud Storage con i big data.

Set di dati sicuri

Per controllare l'accesso ai set di dati in BigQuery, vedi Controllo dell'accesso ai set di dati. Per informazioni sulla crittografia dei dati, vedi Crittografia at-rest.

Elimina set di dati

Quando elimini un set di dati utilizzando la console Cloud de Confiance , le tabelle e le viste nel set di dati, inclusi i relativi dati, vengono eliminate automaticamente. Tuttavia, quando utilizzi un altro metodo, devi prima svuotare il set di dati o specificare flag, parametri o parole chiave corrispondenti che forzano la rimozione dei contenuti del set di dati.

Se tenti di eliminare un set di dati non vuoto senza i flag o i parametri appropriati, l'operazione non riesce e viene visualizzato il seguente errore: Dataset project:dataset is still in use.

L'eliminazione di un set di dati crea una voce audit log per l'eliminazione del set di dati. Non crea voci di log separate per ogni tabella eliminata all'interno del set di dati.

Per eliminare un set di dati, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, espandi il progetto, fai clic su Set di dati e poi sul set di dati.

  4. Nel riquadro dei dettagli, fai clic su Elimina.

  5. Nella finestra di dialogo Elimina set di dati, digita delete nel campo e fai clic su Elimina.

SQL

Per eliminare un set di dati, utilizza l'istruzione DDL DROP SCHEMA.

L'esempio seguente elimina un set di dati denominato mydataset:

  1. Nella console Cloud de Confiance , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    DROP SCHEMA IF EXISTS mydataset;

    Per impostazione predefinita, questa operazione funziona solo per eliminare un set di dati vuoto. Per eliminare un set di dati e tutti i relativi contenuti, utilizza la parola chiave CASCADE:

    DROP SCHEMA IF EXISTS mydataset CASCADE;

  3. Fai clic su Esegui.

Per saperne di più su come eseguire le query, consulta Eseguire una query interattiva.

bq

Utilizza il comando bq rm con il flag --dataset o -d, che è facoltativo. Se il set di dati contiene tabelle, devi utilizzare il flag -r per rimuovere tutte le tabelle nel set di dati. Se utilizzi il flag -r, puoi omettere il flag --dataset o -d.

Dopo aver eseguito il comando, il sistema chiede una conferma. Puoi utilizzare il flag -f per ignorare la conferma.

Se stai eliminando una tabella in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: PROJECT_ID:DATASET.

bq rm -r -f -d PROJECT_ID:DATASET

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • DATASET: il nome del set di dati che stai eliminando

Esempi:

Inserisci il seguente comando per rimuovere un set di dati denominato mydataset e tutte le tabelle al suo interno dal progetto predefinito. Il comando utilizza il flag -d.

bq rm -r -d mydataset

Quando richiesto, digita y e premi Invio.

Inserisci il seguente comando per rimuovere mydataset e tutte le tabelle al suo interno da myotherproject. Il comando non utilizza il flag facoltativo -d. Il flag -f viene utilizzato per saltare la conferma.

bq rm -r -f myotherproject:mydataset

Puoi utilizzare il comando bq ls per verificare che il set di dati sia stato eliminato.

API

Chiama il metodo datasets.delete per eliminare il set di dati e imposta il parametro deleteContents su true per eliminare le tabelle al suo interno.

C#

Il seguente esempio di codice elimina un set di dati vuoto.

Prima di provare questo esempio, segui le istruzioni di configurazione di C# nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery C#.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.

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

Il seguente esempio di codice elimina un set di dati e tutti i relativi contenuti:

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.
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

Il seguente esempio di codice elimina un set di dati vuoto.

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.
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());
    }
  }
}

Il seguente esempio di codice elimina un set di dati e tutti i relativi contenuti:

/*
 * 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

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.
// 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

Prima di provare questo esempio, segui le istruzioni di configurazione di PHP nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery PHP.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.
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

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.

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

Il seguente esempio di codice elimina un set di dati vuoto.

Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Ruby.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

Installa il client Python per l'API BigQuery Data Transfer con pip install google-cloud-bigquery-datatransfer. Quindi, crea una configurazione di trasferimento per copiare il set di dati.
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

Il seguente esempio di codice elimina un set di dati e tutti i relativi contenuti:

# 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

Ripristinare tabelle da set di dati eliminati

Puoi ripristinare le tabelle di un set di dati eliminato che si trovano all'interno della finestra di spostamento cronologico del set di dati. Per ripristinare l'intero set di dati, consulta Ripristinare i set di dati eliminati.

  1. Crea un set di dati con lo stesso nome e nella stessa posizione dell'originale.
  2. Scegli un timestamp precedente all'eliminazione del set di dati originale utilizzando un formato di millisecondi dall'epoca, ad esempio 1418864998000.
  3. Copia la tabella originaldataset.table1 al momento 1418864998000 nel nuovo set di dati:

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

    Per trovare i nomi delle tabelle non vuote che si trovavano nel set di dati eliminato, interroga la visualizzazione INFORMATION_SCHEMA.TABLE_STORAGE del set di dati all'interno della finestra di spostamento cronologico.

Ripristinare i set di dati eliminati

Per scoprire come ripristinare (o recuperare) un set di dati eliminato, consulta Ripristinare i set di dati eliminati.

Quote

Per informazioni sulle quote di copia, consulta Operazioni di copia. L'utilizzo per i lavori di copia è disponibile in INFORMATION_SCHEMA. Per scoprire come eseguire query sulla vista INFORMATION_SCHEMA.JOBS, consulta la vista JOBS.

Prezzi

Per informazioni sui prezzi per la copia dei set di dati, consulta Prezzi della replica dei dati.

BigQuery invia dati compressi per la copia tra regioni, pertanto i dati fatturati potrebbero essere inferiori alle dimensioni effettive del set di dati. Per ulteriori informazioni, vedi Prezzi di BigQuery.

Passaggi successivi