Copier des ensembles de données

Vous pouvez copier un ensemble de données dans la même région ou d'une région à une autre sans avoir à extraire, déplacer ou actualiser des données dans BigQuery. Vous pouvez copier l'ensemble de données ponctuellement ou selon un calendrier récurrent personnalisé.

Avant de commencer

Avant de copier un ensemble de données, procédez comme suit :

  • La copie d'un ensemble de données utilise les fonctionnalités du service de transfert de données BigQuery. Dans le projet Google Cloud de votre ensemble de données de destination, vérifiez que vous avez effectué toutes les actions requises pour activer le service de transfert de données BigQuery.
  • Créez un ensemble de données BigQuery faisant office d'ensemble de données de destination dans la même région que votre ensemble de données source ou dans une région différente. Lorsque vous créez un ensemble de données, vous spécifiez un emplacement pour le stockage de vos données BigQuery. Toutes les régions ne sont pas encore compatibles avec les copies d'ensembles de données (consultez la section Régions où le service est disponible). Les noms d'ensembles de données doivent être uniques par projet.
  • Recherchez l'ID de l'ensemble de données source que vous souhaitez copier et l'ID du projet source.
  • Si vous avez l'intention de configurer des notifications d'exécution de transfert pour Pub/Sub, vous devez disposer des autorisations pubsub.topics.setIamPolicy. Les autorisations Pub/Sub ne sont pas nécessaires si vous ne configurez que des notifications par e-mail. Pour plus d'informations, consultez la page Notifications d'exécution du service de transfert de données BigQuery.
  • Si vous avez l'intention d'écraser la table de destination lors de la copie à l'aide de l'option overwrite_destination_table, les deux tables doivent avoir le même schéma de partitionnement.

Autorisations requises

Avant de copier un ensemble de données, assurez-vous que la personne qui crée cette copie dispose des autorisations suivantes dans BigQuery :

  • Les autorisations bigquery.transfers.update et bigquery.jobs.create sur le projet pour créer le transfert de copie

  • L'autorisation bigquery.datasets.get sur l'ensemble de données source

  • Les autorisations bigquery.datasets.get, bigquery.datasets.update et bigquery.tables.create sur l'ensemble de données de destination

Le rôle IAM prédéfini au niveau du projet bigquery.admin comprend toutes les autorisations requises pour la copie d'un ensemble de données. Pour en savoir plus sur les rôles IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations ou la documentation de référence sur les autorisations IAM.

Configurer la copie d'un ensemble de données

Pour créer un ensemble de données, procédez comme suit :

Console

Option 1 : Utiliser l'icône Copy Dataset (Copier l'ensemble de données).

  1. Accédez à la page "BigQuery" de Cloud Console.

    Accéder à BigQuery

  2. Sélectionnez le nom de l'ensemble de données source que vous souhaitez copier.

  3. Cliquez sur l'icône Copy Dataset (Copier l'ensemble de données).

    Icône "Copier l'ensemble de données".

  4. Dans la boîte de dialogue Copy dataset (Copier l'ensemble de données), sélectionnez l'ID du projet et l'ID de l'ensemble de données de destination. 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.

  5. Les noms des ensembles de données d'un projet doivent être uniques.

  6. Vous pouvez éventuellement cocher la case Overwrite destination table (Écraser la table de destination) si vous souhaitez actualiser (c'est-à-dire écraser) toutes les données de l'ensemble de données de destination. Les tables et le schéma sont écrasés.

    Boîte de dialogue "Copier l'ensemble de données".

  7. Envisagez de supprimer l'ancien ensemble de données pour ne pas avoir à payer des coûts de stockage supplémentaires.

Option 2 : Utiliser le bouton Transfers (Transferts).

  1. Accédez à la page "BigQuery" de Cloud Console.

    Accéder à BigQuery

  2. Cliquez sur Transfers (Transferts).

  3. Cliquez sur + CRÉER UN TRANSFERT.

  4. Sur la page Créer un transfert :

    • Dans le champ Source de la section Source type (Type de source), choisissez Dataset Copy (Copie d'ensemble de données).

      Source de transfert.

    • Dans la section Transfer config name (Nom de la configuration de transfert), sous Display name (Nom à afficher), saisissez un nom pour le transfert, tel que My Transfer. Ce nom peut correspondre à toute valeur permettant d'identifier facilement le transfert si vous devez le modifier ultérieurement.

      Nom du transfert.

    • Dans la section Schedule options (Options de programmation), pour le champ Custom Schedule (Programmation personnalisée), laissez la valeur par défaut Start now (Commencer), ou cliquez sur Start at a set time (Démarrer à l'heure définie).

      • Pour le champ Repeats (Périodicité), choisissez une option pour la fréquence d'exécution du transfert. Les options proposées comprennent :

        • Daily (Tous les jours) (par défaut)
        • Weekly (Toutes les semaines)
        • Monthly (Tous les mois)
        • Custom (Personnalisé)
        • On-demand (À la demande)

        Si vous choisissez une option autre que Daily (Tous les jours), des options supplémentaires sont disponibles. Par exemple, si vous choisissez Weekly (Toutes les semaines), une option vous permet de sélectionner le jour de la semaine. Si vous choisissez Custom (Personnalisé), vous devez ajouter une spécification temporelle de type Cron, par exemple every 12 hours. La période la plus courte autorisée est de 12 heures.

      • 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).

        Planning de transfert

    • Pour le champ Ensemble de données de destination, choisissez l'ensemble de données que vous avez créé pour stocker vos données, dans une région différente.

    • Pour le champ Source dataset (Ensemble de données source), saisissez le nom de l'ensemble de données que vous souhaitez copier.

    • Pour le champ Source project (Projet source), entrez l'ID du projet dans lequel se trouve votre ensemble de données source.

    • (Facultatif) Cochez la case Overwrite destination table (Écraser la table de destination) si vous souhaitez actualiser (c'est-à-dire écraser) toutes les données de l'ensemble de données de destination. Les tables et le schéma sont écrasés.

      Nouvelle copie de l'ensemble de données.

    • (Facultatif) Dans la section Options de notification :

      • Cliquez sur le bouton pour activer les notifications par e-mail. Lorsque vous activez cette option, l'administrateur de transfert reçoit une notification par e-mail en cas d'échec de l'exécution du transfert.
      • Pour Select a Cloud Pub/Sub topic (Sélectionnez un sujet Cloud Pub/Sub), choisissez le nom de votre sujet ou cliquez sur Create a topic (Créer un sujet) pour en créer un. Cette option configure les notifications d'exécution Cloud Pub/Sub pour votre transfert.

      Sujet Pub/Sub

  5. Cliquez sur Enregistrer.

  6. Envisagez de supprimer l'ancien ensemble de données pour ne pas avoir à payer des coûts de stockage supplémentaires.

bq

Saisissez la commande bq mk, puis spécifiez l'option de création de transfert --transfer_config. Les paramètres suivants sont également requis :

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params

    bq mk --transfer_config --project_id=PROJECT_ID --data_source=DATA_SOURCE --target_dataset=DATASET --display_name=NAME --params='PARAMETERS'
    

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet Google Cloud. Si --project_id n'est pas spécifié, le projet par défaut est utilisé.
  • DATA_SOURCE : source de données cross_region_copy.
  • DATASET : ensemble de données cible de BigQuery pour la configuration de transfert.
  • NAME : nom à afficher pour la tâche de copie ou la configuration de transfert. Ce nom peut correspondre à toute valeur permettant d'identifier facilement le transfert si vous devez le modifier ultérieurement.
  • PARAMETERS contient les paramètres de la configuration de transfert créée au format JSON. Exemple : --params='{"param":"param_value"}'. Pour copier un ensemble de données, vous devez fournir les paramètres source_dataset_id, source_project_id et, éventuellement, overwrite_destination_table.

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.
  • (Facultatif) overwrite_destination_table : incluez ce paramètre si vous souhaitez tronquer les tables d'une copie précédente et actualiser toutes les données.

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 Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'

Pour en savoir plus sur la commande bq mk, consultez la documentation de référence sur l'outil de ligne de commande.

API

Utilisez la méthode projects.locations.transferConfigs.create et fournissez une instance de la ressource TransferConfig.

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le 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 Java.

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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le 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 Python.

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

Afficher et actualiser des tâches de copie d'ensembles de données

Vous pouvez suivre la progression de la copie d'un ensemble de données et en afficher les détails sous Transfers (Transferts).

Console

Bouton Transferts de la console.

Afficher les détails du transfert dans la console.

Les opérations d'actualisation sur une copie d'un ensemble de données sont planifiées en suivant un calendrier personnalisable, que vous spécifiez. Par défaut, elles sont planifiées toutes les 24 heures. Cliquez sur le menu More (Plus), puis sur Refresh Now (Actualiser maintenant) si vous souhaitez demander une nouvelle exécution immédiate.

Bouton permettant d&#39;actualiser la copie de l&#39;ensemble de données

Tarifs

La copie des ensembles de données est gratuite pendant la phase bêta.

En disponibilité générale, la copie de données entre régions est facturée selon le tarif de sortie réseau Compute Engine entre régions.

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 relative aux tarifs de BigQuery.

Quotas et limites

Les copies d'ensembles de données BigQuery sont soumises aux quotas et limites suivants.

Quotas de copies

La copie d'un ensemble de données nécessite une tâche de copie pour chaque table de l'ensemble de données.

Les limites suivantes s'appliquent aux tâches BigQuery permettant de copier des tables. Ces limites concernent les tâches que vous créez à l'aide de l'outil de ligne de commande bq, de Cloud Console ou de la méthode API jobs.insert de type copie. Toutes les tâches de copie sont comptabilisées dans cette limite, qu'elles aboutissent ou non.

Limite Par défaut Remarques
Tâches de copie par table de destination et par jour Consultez la section Opérations de table par jour.
Tâches de copie par jour 100 000 Tâches Votre projet peut exécuter jusqu'à 100 000 tâches de copie par jour.
Tâches de copie interrégionales par table de destination et par jour 100 Tâches Votre projet peut exécuter jusqu'à 100 tâches de copie interrégionales par jour et par table de destination.
Tâches de copie interrégionales par jour 2 000 Tâches Votre projet peut exécuter jusqu'à 2 000 tâches de copie interrégionales par jour.

Les limites suivantes s'appliquent à la copie d'ensembles de données :

Limite Par défaut Remarques
Nombre maximal de tables dans l'ensemble de données source 20 000 TABLES Un ensemble de données source peut comporter jusqu'à 20 000 tables.
Nombre maximal de tables pouvant être copiées par exécution dans un ensemble de données de destination dans la même région 20 000 TABLES Votre projet peut copier 20 000 tables par exécution dans un ensemble de données de destination situé dans la même région.
Nombre maximal de tables pouvant être copiées par exécution dans un ensemble de données de destination dans une autre région 1 000 TABLES Votre projet peut copier 1 000 tables par exécution dans un ensemble de données de destination situé dans une région différente. Par exemple, si vous configurez une copie interrégionale d'un ensemble de données comprenant 8 000 tables, le service de transfert de données BigQuery crée automatiquement huit exécutions de manière séquentielle. La première exécution copie 1 000 tables. Vingt-quatre heures plus tard, la deuxième exécution copie 1 000 tables. Ce processus se poursuit jusqu'à ce que toutes les tables de l'ensemble de données soient copiées, dans la limite de 20 000 tables par ensemble de données.

Pour en savoir plus, consultez la section Tâches de copie.

Limites générales

  • Vous devez créer l'ensemble de données de destination avant de pouvoir créer une configuration de transfert pour la copie de l'ensemble de données.

  • Pour chaque configuration de copie d'un ensemble de données, vous disposez d'une copie active à la fois. Les exécutions de transfert supplémentaires sont mises en file d'attente.

Limites des types de données

  • La copie de vues n'est pas compatible.
  • La copie de tables externes n'est pas compatible.
  • La copie d'emplacements de stockage dans un tampon de diffusion en continu n'est pas compatible.
  • La compatibilité avec les copies de tables chiffrées avec des clés gérées par le client varie selon si vous effectuez une copie régionale ou interrégionale.

Copie régionale

La copie de tables chiffrées, y compris de celles chiffrées avec des clés gérées par le client, est compatible avec la copie d'ensembles de données situés dans la même région.

Copie interrégionale

Il est possible d'effectuer des copies interrégionales de tables protégées par le chiffrement par défaut. La copie interrégionale de tables chiffrées avec des clés gérées par le client n'est actuellement pas compatible. Les tables chiffrées avec des clés gérées par le client sont ignorées lors de la copie des tables dans l'ensemble de données de destination.

Limites des ensembles de données de destination

Les ensembles de données comportant des clés gérées par le client (CMEK) ne peuvent pas être utilisés comme destination lors d'une opération de copie entre régions. Cependant, une table avec CMEK est autorisée comme destination lors d'une opération de copie intrarégionale.

Limites des tables

  • Actuellement, la copie de tables partitionnées est compatible. Toutefois, l'ajout de données à une table partitionnée n'est pas possible.

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

  • Lorsque vous tronquez des tables, la copie de l'ensemble de données ne détecte aucune modification apportée à l'ensemble de données de destination avant de commencer l'opération. Toutes les données de l'ensemble de données de destination sont actualisées (écrasées). Les tables et le schéma sont écrasés.

    • Si vous avez l'intention d'écraser la table de destination lors de la copie à l'aide de l'option overwrite_destination_table, les deux tables doivent avoir le même schéma de partitionnement.

Régions où le service est disponible

Il existe deux types de zones :

  • Une région est un emplacement géographique spécifique, par exemple Londres.

  • Une zone multirégionale correspond à un secteur géographique de grande étendue, par exemple les États-Unis, et comporte au moins deux lieux géographiques.

Les ensembles de données peuvent être copiés d'une zone à une autre, d'une zone régionale à une zone multirégionale, d'une zone multirégionale à une zone régionale, ou d'une zone multirégionale à une zone multirégionale.

Actuellement, toutes les régions ne sont pas compatibles avec les copies d'ensembles de données. Vous pouvez créer des copies d'ensembles de données dans les régions où le service de transfert de données BigQuery est actuellement accepté, comme indiqué ci-dessous.

Zones régionales

Description de la région Nom de la région Remarques
Amériques
Iowa us-central1 Icône Feuille Faibles émissions de CO2
Las Vegas us-west4
Los Angeles us-west2
Montréal northamerica-northeast1 Icône Feuille Faibles émissions de CO2
Virginie du Nord us-east4
Oregon us-west1 Icône Feuille Faibles émissions de CO2
Salt Lake City us-west3
São Paulo southamerica-east1 Icône Feuille Faibles émissions de CO2
Caroline du Sud us-east1
Toronto northamerica-northeast2
Europe
Belgique europe-west1 Icône Feuille Faibles émissions de CO2
Finlande europe-north1 Icône Feuille Faibles émissions de CO2
Francfort europe-west3
Londres europe-west2
Pays-Bas europe-west4
Varsovie europe-central2
Zurich europe-west6 Icône Feuille Faibles émissions de CO2
Asie-Pacifique
Delhi asia-south2
Hong Kong asia-east2
Jakarta asia-southeast2
Melbourne australia-southeast2
Mumbai asia-south1
Osaka asia-northeast2
Séoul asia-northeast3
Singapour asia-southeast1
Sydney australia-southeast1
Taïwan asia-east1
Tokyo asia-northeast1

Zones multirégionales

Description de la zone multirégionale Nom de l'emplacement multirégional
Centres de données dans les États membres de l'Union européenne1 EU
Centres de données aux États-Unis US

1 Les données situées dans la zone multirégionale EU ne sont pas stockées dans les centres de données des régions europe-west2 (Londres) ou europe-west6 (Zurich).

Sécurité 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.

Étape suivante

  • Pour plus d'informations sur l'utilisation des transferts, y compris l'obtention d'informations sur une configuration de transfert, la liste des configurations de transfert et l'affichage de l'historique d'exécution d'un transfert, consultez la page Utiliser les transferts.