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 à l'aide d'un calendrier récurrent personnalisé.

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, y compris les tâches qui créent une copie, un clone ou un instantané d'une table standard, d'un clone de table ou d'un instantané de table. Elles concernent les tâches créées à l'aide de la console, de l'outil de ligne de commande bq ou de la méthode API jobs.insert de type copie. Les tâches de copie sont comptabilisées dans ces limites, 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 de données dans l'espace de stockage optimisé en écriture 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 les tables 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.

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.
  • Attribuez aux utilisateurs des rôles IAM (Identity and Access Management) incluant les autorisations nécessaires pour effectuer l'ensemble des tâches du présent document.

Autorisations requises

Pour créer une copie d'un ensemble de données, vous devez disposer des autorisations IAM suivantes :

  • Pour créer le transfert de copie, vous devez disposer des autorisations suivantes sur le projet :

    • bigquery.transfers.update
    • bigquery.jobs.create
  • Vous avez besoin des éléments suivants sur l'ensemble de données source :

    • bigquery.datasets.get
    • bigquery.tables.list
  • Vous avez besoin des éléments suivants sur l'ensemble de données de destination :

    • bigquery.datasets.get
    • bigquery.datasets.update
    • bigquery.tables.create
    • bigquery.tables.list

Le rôle Cloud IAM prédéfini roles/bigquery.admin inclut les autorisations dont vous avez besoin pour créer une 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 le bouton Copier.

  1. Accédez à la page BigQuery de la console.

    Accéder à la page "BigQuery"

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

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

  4. Cliquez sur Copier. Dans la boîte de dialogue Copier l'ensemble de données qui s'affiche, 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.

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

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

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

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

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

  1. Activez le service de transfert de données BigQuery
  2. Créez un transfert pour votre source de données.

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=cross_region_copy --target_dataset=DATASET --display_name=NAME --params='PARAMETERS'
    

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud. Si --project_id n'est pas spécifié, le projet par défaut est utilisé.
  • 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

Pour afficher la progression et afficher les détails d'une copie d'un ensemble de données dans Transferts de données, procédez comme suit :

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

    Accéder à la page "BigQuery"

  2. Cliquez sur Transferts de données.

  3. Sélectionnez un transfert pour lequel vous souhaitez afficher les détails.

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

    2. Pour actualiser, cliquez sur Plus > Actualiser le transfert.

Tarifs

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

En disponibilité générale, les frais de sortie de données copiées entre des régions ou des emplacements multirégionaux sont facturés aux mêmes tarifs que la tarification de l'extraction de données BigQuery. Aucuns frais ne s'appliquent aux ensembles de données copiés dans une ou plusieurs régions.

Si vous copiez un ensemble de données dans une seule région (ou dans un emplacement multirégional), les frais de sortie ne vous sont pas facturés. Lorsque vous copiez un ensemble de données entre des régions (ou entre une région et un emplacement multirégional, ou inversement), des frais de sortie vous sont facturés.

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.

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.

Régions

Le tableau suivant répertorie les régions Amériques où BigQuery est disponible.
Description de la région Nom de la région Détails
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
Santiago southamerica-west1
Caroline du Sud us-east1
Toronto northamerica-northeast2
Le tableau suivant répertorie les régions d'Asie-Pacifique où BigQuery est disponible.
Description de la région Nom de la région Détails
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
Le tableau suivant répertorie les régions d'Europe où BigQuery est disponible.
Description de la région Nom de la région Détails
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

Emplacements multirégionaux

Le tableau suivant répertorie les emplacements multirégionaux où BigQuery est disponible.
Description de la zone multirégionale Nom de la zone multirégionale
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. Pour en savoir plus sur le chiffrement des données, consultez la page Chiffrement au repos.

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