Gestisci i set di dati

Questo documento descrive come ricreare i set di dati in un'altra località, proteggere i set di dati, eliminarli e ripristinare le tabelle dai set di dati eliminati in BigQuery. Per informazioni su come ripristinare (o annullare l'eliminazione) di un set di dati eliminato, consulta Ripristina i set di dati eliminati.

In qualità di amministratore BigQuery, puoi organizzare e controllare l'accesso a tabelle e viste che gli analisti utilizzano. 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 di quello che utilizzi per la copia, non sono necessarie autorizzazioni o ruoli aggiuntivi 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.

Ricrea i set di dati in un'altra posizione

Per spostare manualmente un set di dati da una località a un'altra, segui questi passaggi:

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

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

  2. Copia o sposta i dati dal bucket Cloud Storage di esportazione a un nuovo bucket creato nella posizione di destinazione. Ad esempio, se stai spostando i dati dalla multiregione US alla regione di Tokyo asia-northeast1, trasferirai i dati in un bucket che hai creato a Tokyo. Per informazioni sul trasferimento di oggetti Cloud Storage, consulta Copia, ridenomina e sposta gli oggetti nella documentazione di Cloud Storage.

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

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

    Non ti verrà addebitato alcun costo per il caricamento dei dati in BigQuery, ma ti verranno addebitati i costi per l'archiviazione dei dati in Cloud Storage fino a quando non elimini i dati o 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 set di dati di grandi dimensioni in modo programmatico.

Per saperne di più sull'utilizzo di Cloud Storage per archiviare e spostare set di dati di grandi dimensioni, consulta Utilizza Cloud Storage con i big data.

Set di dati sicuri

Per controllare l'accesso ai set di dati in BigQuery, vedi Controllare l'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 i flag, i parametri o le 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 va a buon fine e viene visualizzato il seguente errore: Dataset project:dataset is still in use.

Se tenti di eliminare un set di dati che non esiste, l'operazione non va a buon fine e viene generato un errore Not found, a meno che non specifichi un'opzione per ignorare i set di dati mancanti, ad esempio IF EXISTS in GoogleSQL o il flag -f (--force) nello strumento a riga di comando bq.

L'eliminazione di un set di dati crea una voce di 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;

    La clausola IF EXISTS impedisce un errore se il set di dati non esiste. Senza IF EXISTS, il tentativo di eliminare un set di dati che non esiste restituisce un errore Not found.

    Per impostazione predefinita, DROP SCHEMA elimina solo 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 conferma. Puoi utilizzare il flag -f (o --force) per saltare la conferma e ignorare gli errori Not found se il set di dati non esiste. Senza il flag -f, il tentativo di eliminare un set di dati inesistente non va a buon fine e viene visualizzato un errore Not found.

Se elimini 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 ignorare 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. Se il set di dati specificato non esiste, il metodo restituisce un errore 404 Not Found.

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

Vai

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. Poi crea una configurazione del 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. Poi crea una configurazione del 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 del 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 del 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. Poi crea una configurazione del 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. Poi crea una configurazione del 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

Ripristina le tabelle dai 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 località 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.

Ripristina i set di dati eliminati

Per scoprire come ripristinare (o annullare l'eliminazione) di un set di dati eliminato, consulta Ripristina i set di dati eliminati.

Quote

Per informazioni sulle quote di copia, consulta Job di copia. L'utilizzo per i job di copia è disponibile in INFORMATION_SCHEMA. Per scoprire come eseguire query sulla vista INFORMATION_SCHEMA.JOBS, consulta 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 saperne di più, consulta la pagina relativa ai prezzi di BigQuery.

Passaggi successivi