Gérer les ensembles de données

Ce document explique comment recréer des ensembles de données dans un autre emplacement, les sécuriser, les supprimer et restaurer les tables d'ensembles de données supprimés dans BigQuery. Pour savoir comment restaurer (ou annuler la suppression) d'un ensemble de données supprimé, consultez Restaurer des ensembles de données supprimés.

En tant qu'administrateur BigQuery, vous pouvez organiser et contrôler l'accès aux tables et aux vues utilisées par les analystes. Pour en savoir plus sur les ensembles de données, consultez la page Présentation des ensembles de données.

Vous ne pouvez pas modifier le nom d'un ensemble de données existant ou déplacer un ensemble de données après sa création.

Rôles requis

Cette section décrit les rôles et les autorisations dont vous avez besoin pour gérer les ensembles de données. Si votre ensemble de données source ou de destination se trouve dans le même projet que celui que vous utilisez pour la copie, vous n'avez pas besoin d'autorisations ni de rôles supplémentaires sur cet ensemble de données.

Supprimer un ensemble de données

Attribuez ces rôles pour supprimer un ensemble de données.

Pour obtenir les autorisations nécessaires pour supprimer des ensembles de données, demandez à votre administrateur de vous accorder le rôle IAM Propriétaire de données BigQuery (roles/bigquery.dataOwner) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour supprimer des ensembles de données. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour supprimer des ensembles de données :

  • bigquery.datasets.delete sur le projet
  • bigquery.tables.delete sur le projet

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Recréer des ensembles de données dans un autre emplacement

Pour déplacer manuellement un ensemble de données d'un emplacement à un autre, procédez comme suit :

  1. Exportez les données de vos tables BigQuery vers un bucket Cloud Storage.

    L'exportation de données depuis BigQuery est sans frais, mais vous payez des frais pour le stockage des données exportées dans Cloud Storage. Les exportations BigQuery sont soumises aux limites applicables aux jobs d'extraction.

  2. Copiez ou déplacez les données de votre bucket Cloud Storage d'exportation vers un nouveau bucket que vous avez créé dans l'emplacement de destination. Par exemple, si vous déplacez vos données de l'emplacement multirégional US vers la région asia-northeast1 de Tokyo, vous les transférez vers un bucket que vous avez créé à Tokyo. Pour en savoir plus sur le transfert d'objets Cloud Storage, consultez la page Renommer, copier et déplacer des objets de la documentation Cloud Storage.

    Le transfert de données entre régions entraîne des frais de sortie réseau dans Cloud Storage.

  3. Créez un ensemble de données BigQuery au nouvel emplacement, puis chargez vos données à partir du bucket Cloud Storage dans le nouvel ensemble de données.

    Le chargement des données dans BigQuery est sans frais, mais vous devrez payer des frais pour le stockage des données dans Cloud Storage jusqu'à ce que vous supprimiez les données ou le bucket. Le stockage des données dans BigQuery après leur chargement vous est également facturé. Le chargement de données dans BigQuery est soumis aux limites des jobs de chargement.

Vous pouvez également utiliser Managed Service pour Apache Airflow pour déplacer et copier automatiquement des ensembles de données volumineux.

Pour en savoir plus sur le stockage de données à l'aide de Cloud Storage, consultez la section Utiliser Cloud Storage avec Big Data.

Sécuriser des ensembles de données

Pour savoir comment contrôler l'accès aux ensembles de données dans BigQuery, consultez la page Contrôler l'accès aux ensembles de données. Pour en savoir plus sur le chiffrement des données, consultez la page Chiffrement au repos.

Supprimer des ensembles de données

Lorsque vous supprimez un ensemble de données à l'aide de la console Cloud de Confiance , les tables et les vues de l'ensemble de données, y compris leurs données, sont supprimées automatiquement. Toutefois, lorsque vous utilisez une autre méthode, vous devez d'abord vider l'ensemble de données ou spécifier les indicateurs, paramètres ou mots clés correspondants qui forcent la suppression du contenu de l'ensemble de données.

Si vous tentez de supprimer un ensemble de données non vide sans les indicateurs ni les paramètres appropriés, l'opération échoue et l'erreur suivante s'affiche : Dataset project:dataset is still in use.

La suppression d'un ensemble de données crée une entrée de journal d'audit pour la suppression de l'ensemble de données. Il ne crée pas d'entrées de journal distinctes pour chaque table supprimée dans l'ensemble de données.

Pour supprimer un ensemble de données, sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet de gauche, cliquez sur Explorateur :

    Bouton du volet Explorateur mis en évidence.

  3. Dans le volet Explorateur, développez votre projet, cliquez sur Ensembles de données, puis sur l'ensemble de données.

  4. Dans le volet "Détails", cliquez sur Supprimer.

  5. Dans la boîte de dialogue Supprimer l'ensemble de données, saisissez delete dans le champ, puis cliquez sur Supprimer.

SQL

Pour supprimer un ensemble de données, utilisez l'instruction DDL DROP SCHEMA.

L'exemple suivant supprime un ensemble de données nommé mydataset :

  1. Dans la console Cloud de Confiance , accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    DROP SCHEMA IF EXISTS mydataset;

    Par défaut, cela ne permet de supprimer qu'un ensemble de données vide. Pour supprimer un ensemble de données et tout son contenu, utilisez le mot clé CASCADE :

    DROP SCHEMA IF EXISTS mydataset CASCADE;

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

bq

Exécutez la commande bq rm avec l'option --dataset ou -d, qui est facultative. Si votre ensemble de données contient des tables, vous devez toutes les supprimer de l'ensemble de données en utilisant l'option -r. Si vous utilisez l'option -r, vous pouvez omettre l'option --dataset ou -d.

Une fois la commande exécutée, le système vous demande une confirmation. Vous pouvez utiliser l'option -f pour ignorer la confirmation.

Si vous supprimez une table dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données en respectant le format suivant : PROJECT_ID:DATASET.

bq rm -r -f -d PROJECT_ID:DATASET

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet
  • DATASET : nom de l'ensemble de données que vous supprimez.

Exemples :

Saisissez la commande suivante pour supprimer de votre projet par défaut un ensemble de données nommé mydataset et toutes les tables qu'il contient. La commande utilise l'option -d.

bq rm -r -d mydataset

Lorsque vous y êtes invité, saisissez y, puis appuyez sur ENTRÉE.

Saisissez la commande ci-dessous pour supprimer mydataset et toutes les tables qu'il contient de myotherproject. La commande n'utilise pas l'option facultative -d. Pour ignorer la confirmation, utilisez l'option -f.

bq rm -r -f myotherproject:mydataset

Vous pouvez utiliser la commande bq ls pour vérifier que l'ensemble de données a bien été supprimé.

API

Appelez la méthode datasets.delete pour supprimer l'ensemble de données et définissez le paramètre deleteContents sur true pour supprimer les tables qu'il contient.

C#

L'exemple de code suivant supprime un ensemble de données vide.

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.

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

L'exemple de code suivant supprime un ensemble de données et tout son contenu :

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.
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

L'exemple de code suivant supprime un ensemble de données vide.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.
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());
    }
  }
}

L'exemple de code suivant supprime un ensemble de données et tout son contenu :

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.
// 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

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour PHP.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.
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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.

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

L'exemple de code suivant supprime un ensemble de données vide.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Ruby.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Avant d'exécuter des exemples de code, définissez la variable d'environnement GOOGLE_CLOUD_UNIVERSE_DOMAIN sur s3nsapis.fr.

Installez le client Python pour l'API Data Transfer de BigQuery en saisissant la commande pip install google-cloud-bigquery-datatransfer. Créez ensuite une configuration de transfert pour copier l'ensemble de données.
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

L'exemple de code suivant supprime un ensemble de données et tout son contenu :

# 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

Restaurer les tables à partir d'ensembles de données supprimés

Vous pouvez restaurer des tables à partir d'un ensemble de données supprimé qui se trouve dans la fenêtre temporelle de l'ensemble de données. Pour restaurer l'intégralité de l'ensemble de données, consultez Restaurer des ensembles de données supprimés.

  1. Créez un ensemble de données portant le même nom et dans le même emplacement que l'original.
  2. Choisissez un horodatage antérieur à la suppression de l'ensemble de données d'origine, en utilisant un format de millisecondes écoulées depuis l'époque, par exemple 1418864998000.
  3. Copiez la table originaldataset.table1 au moment 1418864998000 dans le nouvel ensemble de données :

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

    Pour trouver les noms des tables non vides qui se trouvaient dans l'ensemble de données supprimé, interrogez la vue INFORMATION_SCHEMA.TABLE_STORAGE de l'ensemble de données dans la fenêtre de fonctionnalité temporelle.

Restaurer des ensembles de données supprimés

Pour savoir comment restaurer (ou annuler la suppression) d'un ensemble de données supprimé, consultez Restaurer des ensembles de données supprimés.

Quotas

Pour en savoir plus sur les quotas de copie, consultez la section Jobs de copie. L'utilisation pour les tâches de copie est disponible dans le champ INFORMATION_SCHEMA. Pour savoir comment interroger la vue INFORMATION_SCHEMA.JOBS, consultez Vue JOBS.

Tarifs

Pour en savoir plus sur les tarifs de la copie de jeux de données, consultez Tarifs de la réplication des données.

BigQuery envoie des données compressées pour la copie interrégionale. Par conséquent, le nombre de Go facturés peut être inférieur à la taille de votre ensemble de données. Pour en savoir plus, consultez la page décrivant les tarifs de BigQuery.

Étapes suivantes