Gestione dei set di dati

Questo documento descrive come copiare i set di dati, ricrearli in un'altra posizione, proteggere i set di dati, eliminarli, ripristinare le tabelle dai set di dati eliminati e annullare l'eliminazione dei set di dati in BigQuery.

In qualità di amministratore di BigQuery, puoi organizzare e controllare l'accesso alle tabelle e alle viste utilizzate dagli analisti. Per ulteriori informazioni sui set di dati, consulta Introduzione ai set di dati.

Non puoi modificare il nome di un set di dati esistente o riposizionare un set di dati dopo essere stato creato. Come soluzione alternativa per la modifica del nome del set di dati, puoi copiare un set di dati e modificare il nome del set di dati di destinazione. Per riposizionare un set di dati, puoi seguire uno dei seguenti metodi:

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 copiare, non sono necessari ruoli o autorizzazioni aggiuntivi per il set di dati.

Per ottenere le autorizzazioni necessarie per gestire i set di dati, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire i set di dati. Per visualizzare esattamente le autorizzazioni necessarie, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

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

  • Copia un set di dati:
    • bigquery.transfers.update nel progetto di destinazione
    • bigquery.jobs.create nel progetto di destinazione
    • bigquery.datasets.get nel set di dati di origine e di destinazione
    • bigquery.tables.list nel set di dati di origine e di destinazione
    • bigquery.datasets.update nel set di dati di destinazione
    • bigquery.tables.create nel set di dati di destinazione
  • Elimina un set di dati:
    • bigquery.datasets.delete nel progetto
    • bigquery.tables.delete nel progetto
  • Ripristina un set di dati eliminato:
    • bigquery.datasets.create nel progetto
    • bigquery.datasets.get nel set di dati

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

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

Copia set di dati

Puoi copiare un set di dati, inclusi quelli partizionati all'interno di una o più regioni, senza estrarre, spostare o ricaricare i dati in BigQuery. BigQuery utilizza BigQuery Data Transfer Service nel backend per copiare i set di dati. Per considerazioni sulla posizione quando trasferisci i dati, vedi Posizione e trasferimenti dei dati.

Per ogni configurazione della copia del set di dati, può essere attivo un trasferimento alla volta. Altre esecuzioni di trasferimento sono in coda. Se utilizzi la console Google Cloud, puoi pianificare copie ricorrenti e configurare un'email o notifiche Pub/Sub con BigQuery Data Transfer Service.

Limitazioni

Quando copi i set di dati, si applicano le seguenti limitazioni:

  • Non puoi copiare le seguenti risorse da un set di dati di origine:

    • Visualizzazioni.
    • Routine, incluse le funzioni definite dall'utente.
    • Tabelle esterne.
    • Tabelle CDC (Change Data Capture) se il job di copia si trova tra regioni. È supportata la copia delle tabelle CDC nella stessa regione.
    • Tabelle criptate con chiavi criptate gestite dal cliente (CMEK) se il job di copia si trova in più regioni. È supportata la copia di tabelle con crittografia predefinita in più regioni.

      Puoi copiare tutte le tabelle criptate nella stessa regione, incluse quelle criptate con CMEK.

  • Non puoi utilizzare le seguenti risorse come set di dati di destinazione per i job di copia:

    • Archiviazione ottimizzata per la scrittura.
    • Set di dati criptati con CMEK se il job di copia si trova tra regioni.

      Tuttavia, le tabelle criptate con CMEK sono consentite come tabelle di destinazione durante la copia all'interno della stessa regione.

  • La frequenza minima tra un job di copia è di 12 ore.

  • L'aggiunta di dati a una tabella partizionata nel set di dati di destinazione non è supportata.

  • Se nel set di dati di origine e nel set di dati di destinazione esiste una tabella, ma quest'ultima non è stata modificata dall'ultima copia riuscita, la tabella viene ignorata. La tabella di origine viene ignorata anche se è selezionata la casella di controllo Sovrascrivi tabelle di destinazione.

  • Quando tronca le tabelle nel set di dati di destinazione, il job di copia del set di dati non rileva alcuna modifica apportata alle risorse nel set di dati di destinazione prima di iniziare il job di copia. Il job di copia del set di dati sovrascrive tutti i dati nel set di dati di destinazione, incluse le tabelle e lo schema.

  • La tabella di destinazione potrebbe non riflettere le modifiche apportate alle tabelle di origine dopo l'avvio di un job di copia.

  • La copia di un set di dati non è supportata nelle regioni di BigQuery Omni.

  • Per copiare un set di dati in un progetto all'interno di un altro perimetro di servizio Controlli di servizio VPC, devi impostare le seguenti regole in uscita:

    • Nella configurazione del perimetro di servizio dei Controlli di servizio VPC del progetto di destinazione, l'entità IAM deve avere i seguenti metodi:

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • Nella configurazione del perimetro di servizio Controlli di servizio VPC del progetto di origine, per l'entità IAM utilizzata il metodo deve essere impostato su All Methods.

Copia un set di dati

Seleziona una delle seguenti opzioni:

Console

  1. Abilita BigQuery Data Transfer Service per il set di dati di destinazione.

    Abilita l'API BigQuery Data Transfer Service

  2. Assicurati di disporre dei ruoli richiesti.

    Se intendi configurare le notifiche di esecuzione del trasferimento per Pub/Sub (Opzione 2 più avanti in questi passaggi), devi disporre dell'autorizzazione pubsub.topics.setIamPolicy.

    Se configuri solo le notifiche via email, le autorizzazioni Pub/Sub non sono necessarie. Per ulteriori informazioni, consulta BigQuery Data Transfer Service Esegui notifiche.

  3. Crea un set di dati BigQuery nella stessa regione o in una regione diversa da quella del set di dati di origine.

Opzione 1: utilizza la funzione di copia di BigQuery

Per creare un trasferimento una tantum, utilizza la funzione di copia di BigQuery:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Spazio di esplorazione, espandi il progetto e seleziona un set di dati.

  3. Nella sezione Informazioni sul set di dati, fai clic su Copia, quindi procedi nel seguente modo:

    1. Nel campo Set di dati, crea un nuovo set di dati o seleziona un ID set di dati esistente dall'elenco.

      I nomi dei set di dati all'interno di un progetto devono essere univoci. Il progetto e il set di dati possono trovarsi in regioni diverse, ma non tutte le regioni sono supportate per la copia di set di dati tra regioni.

      Nel campo Location, viene visualizzata la posizione del set di dati di origine.

    2. Facoltativo: per sovrascrivere sia i dati sia lo schema delle tabelle di destinazione con le tabelle di origine, seleziona la casella di controllo Sovrascrivi le tabelle di destinazione. Le tabelle di origine e di destinazione devono avere lo stesso schema di partizionamento.

    3. Per copiare il set di dati, fai clic su Copia.

Opzione 2: utilizza BigQuery Data Transfer Service

Per pianificare copie ricorrenti e configurare notifiche email o Pub/Sub, utilizza BigQuery Data Transfer Service nella console Google Cloud del progetto di destinazione:

  1. Vai alla pagina Trasferimenti di dati.

    Vai a Trasferimenti di dati

  2. Fai clic su Crea un trasferimento.

  3. Nell'elenco Origine, seleziona Copia set di dati.

  4. Nel campo Nome visualizzato, inserisci un nome per l'esecuzione del trasferimento.

  5. Nella sezione Opzioni di pianificazione, segui questi passaggi:

    1. In Frequenza di ripetizione, scegli un'opzione per la frequenza di esecuzione del trasferimento:

      Se selezioni Personalizzata, inserisci una frequenza personalizzata, ad esempio every day 00:00. Per scoprire di più, consulta la sezione Formattazione della pianificazione.

    2. In Data di inizio e ora di esecuzione, inserisci la data e l'ora di inizio del trasferimento. Se scegli Inizia ora, questa opzione è disattivata.

  6. Nella sezione Impostazioni destinazione, seleziona un set di dati di destinazione in cui archiviare i dati di trasferimento. Puoi anche fare clic su CREA NUOVO SET DI DATI per creare un nuovo set di dati prima di selezionarlo per questo trasferimento.

  7. Nella sezione Dettagli origine dati, inserisci le seguenti informazioni:

    1. In Set di dati di origine, inserisci l'ID del set di dati che vuoi copiare.
    2. In Progetto di origine, inserisci l'ID progetto del set di dati di origine.
  8. Per sovrascrivere sia i dati sia lo schema delle tabelle di destinazione con le tabelle di origine, seleziona la casella di controllo Sovrascrivi le tabelle di destinazione. Le tabelle di origine e di destinazione devono avere lo stesso schema di partizionamento.

  9. Nel menu Account di servizio, seleziona un account di servizio dagli account di servizio associati al tuo progetto Google Cloud. Puoi associare un account di servizio al trasferimento anziché utilizzare le tue credenziali utente. Per ulteriori informazioni sull'utilizzo di account di servizio con trasferimenti di dati, vedi Utilizzare account di servizio.

    • Se hai eseguito l'accesso con un'identità federata, sarà necessario un account di servizio per creare un trasferimento. Se hai eseguito l'accesso con un Account Google, un account di servizio per il trasferimento è facoltativo.
    • L'account di servizio deve avere i ruoli richiesti.
  10. (Facoltativo) Nella sezione Opzioni di notifica, procedi nel seguente modo:

    • Per attivare le notifiche via email, fai clic sul pulsante di attivazione/disattivazione. Quando abiliti questa opzione, il proprietario della configurazione di trasferimento riceve una notifica via email quando un trasferimento non va a buon fine.
    • Per abilitare le notifiche Pub/Sub, fai clic sul pulsante di attivazione/disattivazione, quindi seleziona il nome di un argomento dall'elenco o fai clic su Crea un argomento. Questa opzione consente di configurare le notifiche di Pub/Sub per il trasferimento.
  11. Fai clic su Salva.

bq

  1. Abilita BigQuery Data Transfer Service per il set di dati di destinazione.

  2. Assicurati di disporre dei ruoli richiesti.

  3. Per creare un set di dati BigQuery, utilizza il comando bq mk con il flag di creazione del set di dati --dataset e il flag location:

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

    Sostituisci quanto segue:

    • LOCATION: la località in cui vuoi copiare il set di dati
    • PROJECT: l'ID progetto del set di dati di destinazione
    • DATASET: il nome del set di dati di destinazione
  4. Per copiare un set di dati, utilizza il comando bq mk con il flag di creazione del trasferimento --transfer_config e il flag --data_source. Devi impostare il flag --data_source su cross_region_copy. Per un elenco completo dei valori validi per il flag --data_source, consulta i flag di transfer-config nel riferimento dello strumento a riga di comando 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'
    

    Sostituisci quanto segue:

    • NAME: il nome visualizzato del job di copia o della configurazione di trasferimento

    • SERVICE_ACCOUNT: il nome dell'account di servizio utilizzato per autenticare il trasferimento. L'account di servizio deve essere di proprietà dello stesso project_id utilizzato per creare il trasferimento e deve avere tutte le autorizzazioni richieste.

    • PARAMETERS: i parametri per la configurazione del trasferimento in formato JSON

      I parametri per la configurazione della copia di un set di dati includono quanto segue:

      • source_dataset_id: l'ID del set di dati di origine che vuoi copiare
      • source_project_id: l'ID del progetto in cui si trova il set di dati di origine
      • overwrite_destination_table: un flag facoltativo che ti consente di troncare le tabelle di una copia precedente e di aggiornare

      Le tabelle di origine e di destinazione devono avere lo stesso schema di partizionamento.

    I seguenti esempi mostrano la formattazione dei parametri in base all'ambiente del sistema:

    • Linux: utilizza le virgolette singole per racchiudere la stringa JSON, ad esempio:

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Riga di comando di Windows: utilizza le virgolette doppie per racchiudere la stringa JSON e utilizza una barra rovesciata per racchiudere la stringa tra virgolette doppie, ad esempio:

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • PowerShell: utilizza le virgolette singole per racchiudere la stringa JSON ed esegui l'escape delle virgolette doppie nella stringa con una barra rovesciata, ad esempio:

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

    Ad esempio, il seguente comando crea una configurazione della copia del set di dati denominata My Transfer con un set di dati di destinazione denominato mydataset e un progetto con ID 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. Abilita BigQuery Data Transfer Service per il set di dati di destinazione.

  2. Assicurati di disporre dei ruoli richiesti.

  3. Per creare un set di dati BigQuery, chiama il metodo datasets.insert con una risorsa di set di dati definita.

  4. Per copiare un set di dati, utilizza il metodo projects.locations.transferConfigs.create e fornisci un'istanza della risorsa TransferConfig.

Java

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

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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

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

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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_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}")

Per evitare costi di archiviazione aggiuntivi, ti consigliamo di eliminare il set di dati precedente.

Visualizza i job di copia del set di dati

Per visualizzare lo stato e i dettagli di un job di copia di un set di dati nella console Google Cloud, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Trasferimenti di dati.

    Vai a Trasferimenti di dati

  2. Seleziona un trasferimento di cui vuoi visualizzare i dettagli, quindi:

    1. Nella pagina Dettagli trasferimento, seleziona un'esecuzione del trasferimento.

    2. Per aggiornare, fai clic su Aggiorna.

Ricrea i set di dati in un'altra località

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

  1. Esporta i dati dalle tabelle BigQuery in un bucket Cloud Storage nella stessa località del set di dati o in una posizione contenuta all'interno della località del set di dati. Ad esempio, se il set di dati si trova nella località multiregionale EU, potresti esportarli nella località europe-west1 Belgio, che fa parte dell'UE.

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

  2. Copia o sposta i dati dal bucket Cloud Storage di esportazione in un nuovo bucket che hai creato nella località di destinazione. Ad esempio, se sposti i dati dalla località multiregionale US all'area geografica asia-northeast1 di Tokyo, li trasferirai in un bucket che hai creato a Tokyo. Per informazioni sul trasferimento di oggetti Cloud Storage, consulta Copia, ridenominazione e spostamento di oggetti nella documentazione di Cloud Storage.

    Il trasferimento di dati tra regioni comporta addebiti 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 viene addebitato alcun costo per il caricamento dei dati in BigQuery, ma ti vengono addebitati i costi per l'archiviazione dei dati in Cloud Storage finché non elimini i dati o il bucket. Ti viene inoltre addebitato il costo per l'archiviazione dei dati in BigQuery dopo il caricamento. Il caricamento di dati in BigQuery è soggetto ai limiti dei job di caricamento.

Puoi anche utilizzare Cloud Composer per spostare e copiare grandi set di dati in modo programmatico.

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

Proteggi i set di dati

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

Eliminazione set di dati

Quando elimini un set di dati utilizzando la console Google Cloud, le tabelle e le visualizzazioni nel set di dati, inclusi i relativi dati, vengono eliminate. Quando elimini un set di dati utilizzando lo strumento a riga di comando bq, devi utilizzare il flag -r per eliminare tabelle e viste.

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

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.

  3. Espandi l'opzione Azioni e fai clic su Elimina.

  4. Nella finestra di dialogo Elimina set di dati, digita delete nel campo, quindi 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 Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

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

    DROP SCHEMA IF EXISTS mydataset;
    

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

    DROP SCHEMA IF EXISTS mydataset CASCADE;
    

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Usa 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 l'esecuzione del comando, il sistema richiede una conferma. Puoi utilizzare il flag -f per saltare 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 comando seguente per rimuovere dal progetto predefinito un set di dati denominato mydataset e tutte le tabelle al suo interno. Il comando utilizza il flag -d.

bq rm -r -d mydataset

Quando richiesto, digita y e premi Invio.

Inserisci il comando seguente 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 confermare che il set di dati è 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 per la configurazione di C# nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 suoi 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 per la configurazione di Go nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 per la configurazione di Java nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 suoi 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 per la configurazione di Node.js nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 per la configurazione di PHP nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 per la configurazione di Python nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 per la configurazione di Ruby nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di BigQuery.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

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 suoi 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 tabelle da set di dati eliminati

Puoi ripristinare le tabelle da 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 Annullare l'eliminazione dei set di dati.

  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 a partire dall'epoca, ad esempio 1418864998000.
  3. Copia la tabella originaldataset.table1 all'ora 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, esegui una query sulla vista INFORMATION_SCHEMA.TABLE_STORAGE del set di dati all'interno della finestra di spostamento cronologico.

Annulla eliminazione set di dati

Puoi annullare l'eliminazione di un set di dati per recuperarlo nello stato in cui si trovava al momento dell'eliminazione. Puoi annullare l'eliminazione solo dei set di dati che si trovano all'interno della finestra di spostamento cronologico. Questo recupero include tutti gli oggetti contenuti nel set di dati, le proprietà del set di dati e le impostazioni di sicurezza. Per le risorse che non vengono recuperate, consulta Annullare l'eliminazione delle limitazioni del set di dati.

Annulla l'eliminazione delle limitazioni del set di dati

  • I set di dati ripristinati potrebbero fare riferimento a entità di sicurezza che non esistono più.
  • I riferimenti a un set di dati eliminato nei set di dati collegati non vengono ripristinati mediante l'annullamento dell'eliminazione. Per ripristinare manualmente i link, i sottoscrittori devono iscriversi di nuovo.
  • I tag dell'attività non vengono ripristinati annullando l'eliminazione.
  • Devi aggiornare manualmente le viste materializzate e autorizzare di nuovo le visualizzazioni autorizzate, i set di dati autorizzati e le routine autorizzate. Tieni presente che, quando le risorse autorizzate (viste, set di dati e routine) vengono eliminate, l'eliminazione dell'autorizzazione può richiedere fino a 24 ore. Pertanto, se annulli l'eliminazione di un set di dati con una risorsa autorizzata meno di 24 ore dopo l'eliminazione, è possibile che la nuova autorizzazione non sia necessaria. Come best practice, verifica sempre l'autorizzazione dopo aver annullato l'eliminazione delle risorse.

Annullare l'eliminazione di un set di dati

Per annullare l'eliminazione di un set di dati, seleziona una delle seguenti opzioni:

SQL

Utilizza l'istruzione DDL (Data Definition Language) di UNDROP SCHEMA:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

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

    UNDROP SCHEMA DATASET_ID;
    

    Sostituisci DATASET_ID con il set di dati di cui vuoi annullare l'eliminazione.

  3. Specifica la posizione del set di dati di cui vuoi annullare l'eliminazione.

  4. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta Esecuzione di query interattive.

API

Chiama il metodo datasets.undelete.

Quando annulli l'eliminazione di un set di dati, potrebbero verificarsi i seguenti errori:

  • ALREADY_EXISTS: esiste già un set di dati con lo stesso nome nella regione in cui hai provato ad annullare l'eliminazione. Non puoi utilizzare l'annullamento dell'eliminazione per sovrascrivere o unire i set di dati.
  • NOT_FOUND: il set di dati che stai cercando di recuperare ha superato la finestra di spostamento cronologico o non è mai esistito.
  • ACCESS_DENIED: non disponi delle autorizzazioni corrette per annullare l'eliminazione di questo set di dati.

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 Utilizzare i job di copia.

Prezzi

Gli addebiti per il traffico in uscita dai dati copiati tra regioni o più regioni vengono fatturati alle stesse tariffe previste per i prezzi per l'estrazione 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