Gérer les ensembles de données

Ce document explique comment copier des ensembles de données, les recréer dans un autre emplacement, sécuriser les ensembles de données, supprimer des ensembles de données, restaurer les tables d'ensembles de données supprimés et annuler la suppression d'ensembles de données dans BigQuery.

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. Pour contourner ce problème, vous pouvez copier un ensemble de données et modifier le nom de l'ensemble de données de destination. Pour déplacer un ensemble de données, vous pouvez suivre l'une des méthodes suivantes :

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.

Pour obtenir les autorisations nécessaires pour gérer les ensembles de données, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

Ces rôles prédéfinis contiennent les autorisations requises pour gérer les 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 gérer les ensembles de données :

  • Copier un ensemble de données :
    • bigquery.transfers.update sur le projet de destination
    • bigquery.jobs.create sur le projet de destination
    • bigquery.datasets.get sur les ensembles de données source et de destination
    • bigquery.tables.list sur les ensembles de données source et de destination
    • bigquery.datasets.update sur l'ensemble de données de destination
    • bigquery.tables.create sur l'ensemble de données de destination
  • Supprimer un ensemble de données :
    • bigquery.datasets.delete sur le projet
    • bigquery.tables.delete sur le projet
  • Restaurer un ensemble de données supprimé :
    • bigquery.datasets.create sur le projet
    • bigquery.datasets.get sur l'ensemble de données

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

Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.

Copier des ensembles de données

Vous pouvez copier un ensemble de données, y compris des données partitionnées au sein d'une même région ou entre différentes régions, sans avoir à extraire, déplacer ou actualiser des données dans BigQuery. BigQuery utilise le service de transfert de données BigQuery dans le backend pour copier les ensembles de données. Pour plus d'informations sur l'emplacement lorsque vous transférez des données, consultez la page Emplacement des données et transferts.

Pour chaque configuration de copie d'un ensemble de données, une seule exécution de transfert peut être active à la fois. Les exécutions de transfert supplémentaires sont mises en file d'attente. Si vous utilisez la console Google Cloud, vous pouvez planifier des copies récurrentes et configurer des notifications e-mail ou Pub/Sub avec le service de transfert de données BigQuery.

Limites

Les limites suivantes s'appliquent lorsque vous copiez des ensembles de données :

  • Vous ne pouvez pas copier les ressources suivantes à partir d'un ensemble de données source :

    • Vues.
    • Routines, y compris les fonctions définies par l'utilisateur.
    • Tables externes.
    • Tables de capture de données modifiées (CDC) si le job de copie concerne plusieurs régions. Il est possible de copier des tables CDC dans la même région.
    • Tables chiffrées avec des clés de chiffrement gérées par le client (CMEK) si le job de copie concerne plusieurs régions. Il est possible d'effectuer des copies interrégionales de tables protégées par le chiffrement par défaut.

      Vous pouvez copier toutes les tables chiffrées dans la même région, y compris celles qui sont chiffrées avec des clés CMEK.

  • Vous ne pouvez pas utiliser les ressources suivantes en tant qu'ensembles de données de destination pour les jobs de copie :

    • Stockage optimisé pour l'écriture.
    • Ensembles de données chiffrés avec des clés CMEK si le job de copie concerne plusieurs régions.

      Cependant, les tables chiffrées avec des CMEK sont autorisées en tant que tables de destination en cas de copie dans la même région.

  • La fréquence minimale entre les jobs de copie est de 12 heures.

  • Il n'est pas possible d'ajouter des données à une table partitionnée de l'ensemble de données de destination.

  • Si une table existe dans l'ensemble de données source et dans l'ensemble de données de destination, et que la table source n'a pas été modifiée depuis la dernière copie réussie, elle est ignorée. La table source est ignorée même si la case Écraser les tables de destination est cochée.

  • Lorsque vous tronquez des tables dans l'ensemble de données de destination, le job de copie de l'ensemble de données ne détecte aucune modification apportée aux ressources de l'ensemble de données de destination avant de commencer le job de copie. Le job de copie de l'ensemble de données écrase toutes les données de l'ensemble de données de destination, y compris les tables et le schéma.

  • La table de destination peut ne pas refléter les modifications apportées aux tables sources après le démarrage d'un job de copie.

  • La copie d'un ensemble de données n'est pas disponible dans les régions BigQuery Omni.

  • Pour copier un ensemble de données dans un projet situé dans un autre périmètre de service VPC Service Controls, vous devez définir les règles de sortie suivantes :

    • Dans la configuration du périmètre de service VPC Service Controls du projet de destination, le compte principal IAM doit disposer des méthodes suivantes :

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • Dans la configuration du périmètre de service VPC Service Controls du projet source, la méthode du compte principal IAM utilisé doit être définie sur All Methods.

Copier un ensemble de données

Sélectionnez l'une des options suivantes :

Console

  1. Activez le service de transfert de données BigQuery pour votre ensemble de données de destination.

    Activer l'API du service de transfert de données BigQuery

  2. Assurez-vous de disposer des rôles requis.

    Si vous avez l'intention de configurer des notifications d'exécution de transfert pour Pub/Sub (option 2 plus loin dans les présentes étapes), vous devez disposer de l'autorisation pubsub.topics.setIamPolicy.

    Si vous ne configurez que des notifications par e-mail, les autorisations Pub/Sub ne sont pas nécessaires. Pour en savoir plus, consultez la page Notifications d'exécution du service de transfert de données BigQuery.

  3. Créez un ensemble de données BigQuery dans la même région ou dans une région différente de votre ensemble de données source.

Option 1 : Utiliser la fonction de copie BigQuery

Pour créer un transfert ponctuel, utilisez la fonction de copie BigQuery :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le panneau Explorateur, développez votre projet et sélectionnez un ensemble de données.

  3. Dans la section Informations sur l'ensemble de données, cliquez sur Copier, puis procédez comme suit :

    1. Dans le champ Ensemble de données, créez un nouvel ensemble de données ou sélectionnez un ID d'ensemble de données existant dans la liste.

      Les noms des ensembles de données d'un projet doivent être uniques. Le projet et l'ensemble de données peuvent se trouver dans des régions distinctes, mais toutes les régions ne sont pas compatibles avec les copies interrégionales d'ensembles de données.

      Dans le champ Emplacement, l'emplacement de l'ensemble de données source est affiché.

    2. Facultatif : pour écraser les données et le schéma des tables de destination avec les tables sources, cochez la case Écraser les tables de destination. Les tables source et de destination doivent avoir le même schéma de partitionnement.

    3. Pour copier l'ensemble de données, cliquez sur Copier.

Option 2 : Utiliser le service de transfert de données BigQuery.

Pour planifier des copies récurrentes et configurer des notifications par e-mail ou Pub/Sub, utilisez le service de transfert de données BigQuery dans la console Google Cloud :

  1. Accédez à la page Transferts de données.

    Accéder à la page Transferts de données

  2. Cliquez sur Créer un transfert.

  3. Dans la liste Source, sélectionnez Copie de l'ensemble de données.

  4. Dans le champ Nom à afficher, saisissez le nom de votre exécution de transfert.

  5. Dans la section Options de programmation, procédez comme suit :

    1. Pour le champ Fréquence de répétition, choisissez la fréquence d'exécution du transfert :

      Si vous sélectionnez Personnalisé, saisissez une fréquence personnalisée, par exemple every day 00:00. Pour en savoir plus, consultez la section Mettre en forme l'élément schedule.

    2. Pour Start date and run time (Date de début et heure d'exécution), saisissez la date et l'heure de début du transfert. Cette option est désactivée si vous choisissez Start now (Commencer).

  6. Dans la section Paramètres de destination, sélectionnez un ensemble de données de destination pour stocker vos données de transfert. Vous pouvez également cliquer sur CRÉER UN ENSEMBLE DE DONNÉES pour créer un ensemble de données avant de le sélectionner pour ce transfert.

  7. Dans la section Détails de la source de données, saisissez les informations suivantes :

    1. Pour Ensemble de données source, saisissez l'ID de l'ensemble de données que vous souhaitez copier.
    2. Pour Projet source, saisissez l'ID de projet de votre ensemble de données source.
  8. Pour écraser les données et le schéma des tables de destination avec les tables sources, cochez la case Écraser les tables de destination. Les tables source et de destination doivent avoir le même schéma de partitionnement.

  9. Dans le menu Compte de service, sélectionnez un compte de service parmi ceux associés à votre projet Google Cloud. Vous pouvez associer un compte de service à votre transfert au lieu d'utiliser vos identifiants utilisateur. Pour en savoir plus sur l'utilisation des comptes de service avec des transferts de données, consultez la page Utiliser des comptes de service.

    • Si vous vous êtes connecté avec une identité fédérée, vous devez disposer d'un compte de service pour créer un transfert. Si vous vous êtes connecté avec un compte Google, il n'est pas nécessaire de disposer d'un compte de service pour le transfert.
    • Le compte de service doit disposer des rôles requis.
  10. Facultatif : dans la section Options de notification, procédez comme suit :

    • Pour activer les notifications par e-mail, cliquez sur le bouton d'activation/désactivation. Lorsque vous activez cette option, le propriétaire de la configuration de transfert reçoit une notification par e-mail en cas d'échec de l'exécution du transfert.
    • Pour activer les notifications Pub/Sub, cliquez sur le bouton d'activation, puis sélectionnez un nom de Sujet dans la liste ou cliquez sur Créer un sujet. Cette option configure les notifications d'exécution Pub/Sub pour votre transfert.
  11. Cliquez sur Save (Enregistrer).

bq

  1. Activez le service de transfert de données BigQuery pour votre ensemble de données de destination.

  2. Assurez-vous de disposer des rôles requis.

  3. Pour créer un ensemble de données BigQuery, exécutez la commande bq mk avec l'option de création d'ensemble de données --dataset et l'option location :

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

    Remplacez les éléments suivants :

    • LOCATION : emplacement dans lequel vous souhaitez copier l'ensemble de données.
    • PROJECT : ID de projet de votre ensemble de données cible.
    • DATASET : nom de l'ensemble de données cible.
  4. Pour copier un ensemble de données, exécutez la commande bq mk avec l'option de création de transfert --transfer_config et l'option --data_source. Vous devez définir l'option --data_source sur cross_region_copy. Pour obtenir la liste complète des valeurs valides pour l'option --data_source, consultez les options de configuration de transfert dans la documentation de référence de l'outil de ligne de commande 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'
    

    Remplacez les éléments suivants :

    • NAME : nom à afficher pour le job de copie ou la configuration de transfert.

    • SERVICE_ACCOUNT : nom du compte de service utilisé pour authentifier le transfert. Le compte de service doit appartenir au même project_id que celui utilisé pour créer le transfert et disposer de toutes les autorisations requises.

    • PARAMETERS : paramètres pour la configuration de transfert au format JSON.

      Les paramètres pour la configuration d'une copie d'un ensemble de données sont les suivants :

      • source_dataset_id : ID de l'ensemble de données source que vous souhaitez copier.
      • source_project_id : ID du projet contenant l'ensemble de données source.
      • overwrite_destination_table : option facultative permettant de tronquer les tables d'une copie précédente et d'actualiser toutes les données.

      Les tables source et de destination doivent avoir le même schéma de partitionnement.

    Les exemples suivants montrent la mise en forme des paramètres en fonction de l'environnement de votre système :

    • Linux : utilisez des guillemets simples pour délimiter la chaîne JSON, par exemple :

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Ligne de commande Windows : utilisez des guillemets doubles pour délimiter la chaîne JSON et échappez les guillemets doubles de la chaîne à l'aide d'une barre oblique inverse, par exemple :

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • Powershell : utilisez des guillemets simples pour délimiter la chaîne JSON et échappez les guillemets doubles de la chaîne à l'aide d'une barre oblique inverse, par exemple :

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

    Par exemple, la commande suivante crée une configuration de copie d'ensemble de données nommée My Transfer, qui comprend un ensemble de données cible nommé mydataset et un projet dont l'ID est 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. Activez le service de transfert de données BigQuery pour votre ensemble de données de destination.

  2. Assurez-vous de disposer des rôles requis.

  3. Pour créer un ensemble de données BigQuery, appelez la méthode datasets.insert avec une ressource d'ensemble de données définie.

  4. Pour copier un ensemble de données, utilisez la méthode projects.locations.transferConfigs.create et fournissez une instance de la ressource TransferConfig.

Java

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.

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

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.

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

Pour éviter des coûts de stockage supplémentaires, vous pouvez supprimer l'ensemble de données précédent.

Afficher les jobs de copie d'un ensemble de données

Pour afficher l'état et les détails d'un job de copie d'ensembles de données dans la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Transferts de données.

    Accéder à la page Transferts de données

  2. Sélectionnez un transfert dont vous souhaitez afficher les détails, puis procédez comme suit :

    1. Sur la page Détails du transfert, sélectionnez une exécution de transfert.

    2. Pour actualiser, cliquez sur Actualiser.

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 situé dans le même emplacement que votre ensemble de données ou dans un emplacement contenu dans l'emplacement de votre ensemble de données. Par exemple, si votre ensemble de données se trouve dans l'emplacement multirégional EU, vous pouvez exporter vos données vers l'emplacement europe-west1 en Belgique, qui fait partie de l'UE.

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

  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 gratuit, 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 Cloud Composer 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 Google Cloud, les tables et les vues de l'ensemble de données, y compris leurs données, sont supprimées. Lorsque vous supprimez un ensemble de données à l'aide de l'outil de ligne de commande bq, vous devez utiliser l'option -r pour supprimer les tables et les vues.

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 Explorateur, développez votre projet et sélectionnez un ensemble de données.

  3. Développez l'option Actions, puis cliquez sur Supprimer.

  4. 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 Google Cloud, 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.

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.

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.

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.

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.

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.

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.

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 la page Annuler la suppression d'ensembles de données.

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

Annuler la suppression d'ensembles de données

Vous pouvez annuler la suppression d'un ensemble de données pour le restaurer à l'état dans lequel il se trouvait lors de sa suppression. Vous ne pouvez annuler la suppression que des ensembles de données situés dans votre fenêtre de fonctionnalité temporelle. Cette récupération inclut tous les objets qu'il contenait ainsi que leurs propriétés et les paramètres de sécurité. Pour connaître les ressources non récupérées, consultez la section Limitations de l'annulation de suppression pour les ensembles de données.

Limitations de l'annulation de suppression pour les ensembles de données

  • Les ensembles de données restaurés peuvent faire référence à des comptes principaux de sécurité qui n'existent plus.
  • Les références à un ensemble de données supprimé dans les ensembles de données associés ne sont pas restaurées lorsque vous annulez la suppression. Les abonnés doivent se réabonner pour restaurer manuellement les liens.
  • Les tags d'entreprise ne sont pas restaurés lorsque la suppression est annulée.
  • Vous devez actualiser manuellement les vues matérialisées et réautoriser les vues autorisées, les ensembles de données autorisés et les routines autorisées. Notez que lorsque des ressources autorisées (vues, ensembles de données et routines) sont supprimées, la suppression de l'autorisation peut prendre jusqu'à 24 heures. Ainsi, si vous annulez la suppression d'un ensemble de données avec une ressource autorisée moins de 24 heures après la suppression, il est possible que cette nouvelle autorisation ne soit pas nécessaire. Il est recommandé de toujours vérifier l'autorisation après l'annulation de la suppression des ressources.

Annuler la suppression d'un ensemble de données

Pour annuler la suppression d'un ensemble de données, sélectionnez l'une des options suivantes :

SQL

Utilisez l'instruction LDD (langage de définition de données) UNDROP SCHEMA :

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

    Accéder à BigQuery

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

    UNDROP SCHEMA DATASET_ID;
    

    Remplacez DATASET_ID par l'ensemble de données dont vous souhaitez annuler la suppression.

  3. Spécifiez l'emplacement de l'ensemble de données dont vous souhaitez annuler la suppression.

  4. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez la page Exécuter des requêtes interactives.

API

Appelez la méthode datasets.undelete.

Lorsque vous annulez la suppression d'un ensemble de données, les erreurs suivantes peuvent se produire :

  • ALREADY_EXISTS : un ensemble de données portant le même nom existe déjà dans la région pour laquelle vous avez tenté d'annuler la suppression. Vous ne pouvez pas utiliser l'annulation de suppression pour écraser ou fusionner des ensembles de données.
  • NOT_FOUND : l'ensemble de données que vous essayez de récupérer a dépassé sa fenêtre de fonctionnalité temporelle ou n'a jamais existé.
  • ACCESS_DENIED : vous ne disposez pas des autorisations appropriées pour annuler la suppression de cet ensemble de données.

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 la section Obtenir l'utilisation des tâches de copie.

Tarifs

Les frais de sortie des données copiées entre des régions ou des emplacements multirégionaux sont facturés aux mêmes tarifs que ceux de l'extraction de 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