Exporter et importer des entités

Cette page explique comment exporter et importer des entités Cloud Firestore en mode Datastore à l'aide du service d'exportation et d'importation géré. Le service d'exportation et d'importation géré est disponible via Cloud Console, l'outil de ligne de commande gcloud et l'API Cloud Datastore Admin (REST, RPC).

Le service d'exportation et d'importation géré vous permet de récupérer des données supprimées de manière accidentelle et de les exporter pour un traitement hors ligne. Vous pouvez exporter toutes les entités ou n'exporter que des genres d'entités spécifiques. De même, vous pouvez importer toutes les données d'une exportation ou n'importer que des genres spécifiques. Lorsque vous utilisez le service d'exportation et d'importation géré, veuillez prendre en compte les éléments suivants :

  • Le service d'exportation utilise des lectures cohérentes à terme. Vous ne pouvez pas supposer qu'une exportation a lieu à un moment donné. L'exportation peut inclure des entités écrites après le lancement de l'exportation et exclure des entités écrites avant le début de l'exportation.

  • Une exportation ne contient aucun index. Lorsque vous importez des données, les index requis sont automatiquement recréés à l'aide des définitions d'index actuelles de votre base de données. Les paramètres d'index de valeur de propriété par entité sont exportés et reconnus lors de l'importation.

  • Les opérations d'importation n'attribuent pas de nouveaux ID aux entités. Elles utilisent les ID qui existaient au moment de l'exportation et écrasent toutes les entités existantes avec le même ID. Lors d'une opération d'importation, les ID sont réservés à mesure que les entités sont importées. Cette fonctionnalité empêche les conflits d'ID avec de nouvelles entités si les opérations d'écriture sont activées lorsqu'une importation est en cours d'exécution.

  • Si une entité de votre base de données n'est pas affectée par une importation, elle restera dans votre base de données une fois l'importation terminée.

  • Les données exportées à partir d'une base de données en mode Datastore peuvent être importées dans une autre base de données en mode Datastore, même si elle se trouve dans un autre projet.

  • Le service d'exportation et d'importation géré limite le nombre d'exportations et d'importations simultanées à 50 et autorise un maximum de 20 requêtes d'exportation et d'importation par minute pour un projet.

  • Le résultat d'une exportation gérée utilise le format de journal LevelDB.

  • Pour importer uniquement un sous-ensemble d'entités ou pour importer des données dans BigQuery, vous devez spécifier un filtre d'entité dans votre exportation.

Avant de commencer

Pour pouvoir utiliser le service d'exportation et d'importation géré, vous devez effectuer les tâches ci-dessous.

  1. Activer la facturation pour votre projet Google Cloud. Seuls les projets Google Cloud pour lesquels la facturation est activée peuvent utiliser les fonctionnalités d'exportation et d'importation.

  2. Créer un bucket Cloud Storage à l'emplacement où se trouve votre base de données Cloud Firestore en mode Datastore. Vous ne pouvez pas utiliser de bucket "Paiements du demandeur" pour les opérations d'exportation et d'importation.

  3. Attribuer à votre compte utilisateur un rôle IAM, qui accorde l'autorisation datastore.databases.export si vous exportez des données ou l'autorisation datastore.databases.import si vous importez des données. Le rôle Datastore Import Export Admin, par exemple, accorde les deux autorisations.

  4. Si le bucket Cloud Storage se trouve dans un autre projet, donnez-lui accès au compte de service par défaut de votre projet.

Configurer gcloud pour votre projet

Si vous prévoyez d'utiliser gcloud pour lancer vos opérations d'importation et d'exportation, configurez gcloud et connectez-vous à votre projet de l'une des manières suivantes :

Lancer des opérations d'exportation et d'importation gérées

Cette section décrit comment lancer une opération d'exportation ou d'importation gérée.

Exporter toutes les entités

Console

  1. Accédez à la page Exporter des entités Cloud Datastore dans Google Cloud Console.

    Accéder à la page Exportation Cloud Datastore

  2. Définissez la valeur du champ Espace de noms sur All Namespaces, puis la valeur du champ Genre sur All Kinds.

  3. Au-dessous de Destination, saisissez le nom de votre bucket Cloud Storage.

  4. Cliquez sur Exporter.

La console ouvre la page Entités et indique la réussite ou l'échec de votre requête d'exportation gérée.

La console affiche également un bouton Afficher l'état. Cliquez sur ce bouton pour ouvrir un terminal Cloud Shell prérempli avec la commande gcloud nécessaire pour connaître l'état de votre opération.

Exécutez cette commande chaque fois que vous souhaitez afficher l'état de l'opération.

gcloud

Utilisez la commande gcloud datastore export pour exporter toutes les entités de votre base de données.

 gcloud datastore export gs://bucket-name --async

bucket-name correspond au nom de votre bucket Cloud Storage et à un préfixe facultatif, par exemple bucket-name/firestore-exports/export-name. Vous ne pouvez pas réutiliser le même préfixe pour une autre opération d'exportation. Si vous ne fournissez pas de préfixe de fichier, le service d'exportation géré en crée un sur la base de l'heure actuelle.

Utilisez l'option --async pour empêcher l'outil gcloud d'attendre la fin de l'opération. Si vous omettez l'option --async, Ctrl+c peut déduire la zone souhaitée en fonction de vos propriétés par défaut. L'opération ne sera pas annulée.

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet
  • bucket-name : nom de votre bucket Cloud Storage

Méthode HTTP et URL :

POST https://datastore.googleapis.com/v1/projects/project-id:export

Corps JSON de la requête :

    {
      "outputUrlPrefix": "gs://bucket-name",
    }
    

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

    {
      "name": "projects/project-id/operations/operation-id",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        "common": {
          "startTime": "2019-09-18T18:42:26.591949Z",
          "operationType": "EXPORT_ENTITIES",
          "state": "PROCESSING"
        },
        "entityFilter": {},
        "outputUrlPrefix": "gs://bucket-name/2019-09-18T18:42:26_85726"
      }
    }
    
La réponse est une opération de longue durée dont vous pouvez vérifier l'état d'exécution.

Exporter des genres ou des espaces de noms spécifiques

Pour exporter un sous-ensemble spécifique de genres et/ou d'espaces de noms, fournissez un filtre d'entité avec des valeurs pour les genres et les ID d'espaces de noms.

Console

Dans la console, vous pouvez sélectionner tous les genres ou un genre spécifique. De même, vous pouvez sélectionner tous les espaces de noms ou un espace de noms spécifique.

Pour spécifier une liste d'espaces de noms et de genres à exporter, utilisez plutôt gcloud.

  1. Accédez à la page Exportation Cloud Datastore dans Google Cloud Console.

    Accéder à la page Exportation Cloud Datastore

  2. Définissez la valeur du champ Namespace sur All Namespaces ou sur le nom de l'un de vos espaces de noms.

  3. Définissez la valeur du champ Genre sur All Kinds ou sur le nom d'un genre.

  4. Sous Destination, saisissez le nom de votre bucket Cloud Storage.

  5. Cliquez sur Exporter.

La console ouvre la page Entités et indique la réussite ou l'échec de votre requête d'exportation gérée.

La console affiche également un bouton Afficher l'état. Cliquez sur ce bouton pour ouvrir un terminal Cloud Shell prérempli avec la commande gcloud nécessaire pour connaître l'état de votre opération.

Exécutez cette commande chaque fois que vous souhaitez afficher l'état de l'opération.

gcloud

    gcloud datastore export --kinds="KIND1,KIND2" --namespaces="(default),NAMESPACE2" gs://bucket-name --async
    

bucket-name correspond au nom de votre bucket Cloud Storage et à un préfixe facultatif, par exemple bucket-name/firestore-exports/export-name. Vous ne pouvez pas réutiliser le même préfixe pour une autre opération d'exportation. Si vous ne fournissez pas de préfixe de fichier, le service d'exportation géré en crée un sur la base de l'heure actuelle.

Utilisez l'option --async pour empêcher l'outil gcloud d'attendre la fin de l'opération. Si vous omettez l'option --async, Ctrl+c peut déduire la zone souhaitée en fonction de vos propriétés par défaut. L'opération ne sera pas annulée.

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet
  • bucket-name : nom de votre bucket Cloud Storage
  • kind : genre de l'entité
  • namespace : ID de l'espace de noms (utilisez "" pour l'ID d'espace de noms par défaut)

Méthode HTTP et URL :

POST https://datastore.googleapis.com/v1/projects/project-id:export

Corps JSON de la requête :

    {
      "outputUrlPrefix": "gs://bucket-name",
      "entityFilter": {
        "kinds": ["kind"],
        "namespaceIds": ["namespace"],
      },
    }
    

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

    {
      "name": "projects/project-id/operations/operation-id",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        "common": {
          "startTime": "2019-09-18T21:17:36.232704Z",
          "operationType": "EXPORT_ENTITIES",
          "state": "PROCESSING"
        },
        "entityFilter": {
          "kinds": [
            "Task"
          ],
          "namespaceIds": [
            ""
          ]
        },
        "outputUrlPrefix": "gs://bucket-name/2019-09-18T21:17:36_82974"
      }
    }
    
La réponse est une opération de longue durée dont vous pouvez vérifier l'état d'exécution.

Fichiers de métadonnées :

Une opération d'exportation crée un fichier de métadonnées pour chaque paire espace de noms/genre spécifiée. Les fichiers de métadonnées sont généralement nommés NAMESPACE_NAME_KIND_NAME.export_metadata. Toutefois, si un espace de noms ou un genre crée un nom d'objet Cloud Storage non valide, le fichier est nommé export[NUM].export_metadata.

Les fichiers de métadonnées sont des tampons de protocole et peuvent être décodés à l'aide du compilateur de protocole protoc. Par exemple, vous pouvez décoder un fichier de métadonnées afin de déterminer l'espace de noms et les genres que les fichiers d'exportation contiennent :

    protoc --decode_raw < export0.export_metadata
    

Importer toutes les entités

Console

  1. Accédez à la page Importation Cloud Datastore dans Google Cloud Console.

    Accéder à la page Importation Cloud Datastore

  2. Dans le champ File, cliquez sur Parcourir et sélectionnez un fichier overall_export_metadata.

  3. Définissez la valeur du champ Espace de noms sur All Namespaces, puis la valeur du champ Genre sur All Kinds.

  4. Cliquez sur Importer.

La console ouvre la page Entités et indique la réussite ou l'échec de votre requête d'importation gérée.

La console affiche également un bouton Afficher l'état. Cliquez sur ce bouton pour ouvrir un terminal Cloud Shell prérempli avec la commande gcloud nécessaire pour connaître l'état de votre opération.

Exécutez cette commande chaque fois que vous souhaitez afficher l'état de l'opération.

gcloud

Utilisez la commande gcloud datastore import pour importer toutes les entités précédemment exportées avec le service d'exportation géré.

    gcloud datastore import gs://bucket-name/file-path/file-name.overall_export_metadata --async

bucket-name/file-path/file-name correspond au chemin d'accès au fichier overall_export_metadata dans votre bucket Cloud Storage.

Utilisez l'option --async pour empêcher l'outil gcloud d'attendre la fin de l'opération. Si vous omettez l'option --async, Ctrl+c peut déduire la zone souhaitée en fonction de vos propriétés par défaut. L'opération ne sera pas annulée.

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet
  • bucket-name : nom de votre bucket Cloud Storage
  • object-name : nom de votre objet Cloud Storage (exemple : 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata)

Méthode HTTP et URL :

POST https://datastore.googleapis.com/v1/projects/project-id:import

Corps JSON de la requête :

    {
      "inputUrl": "gs://bucket-name/object-name",
    }
    

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

    {
      "name": "projects/project-id/operations/operation-id",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata",
        "common": {
          "startTime": "2019-09-18T21:25:02.863621Z",
          "operationType": "IMPORT_ENTITIES",
          "state": "PROCESSING"
        },
        "entityFilter": {},
        "inputUrl": "gs://bucket-name/2019-09-18T18:42:26_85726/2019-09-18T18:42:26_85726.overall_export_metadata"
      }
    }
    
La réponse est une opération de longue durée dont vous pouvez vérifier l'état d'exécution.

Localiser votre fichier overall_export_metadata

Ouvrez le navigateur Cloud Storage dans Google Cloud Console pour déterminer la valeur de l'emplacement d'importation à utiliser :

Ouvrir le navigateur Cloud Storage

Vous pouvez également répertorier et décrire les opérations terminées. Le champ outputURL indique le nom du fichier overall_export_metadata :

    "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata",
    

Importer des genres ou des espaces de noms spécifiques

Pour importer un sous-ensemble spécifique de genres et/ou d'espaces de noms, fournissez un filtre d'entité avec des valeurs pour les genres et les ID d'espaces de noms.

Vous ne pouvez spécifier des genres et des espaces de noms que si les fichiers d'exportation ont été créés avec un filtre d'entité. Vous ne pouvez pas importer un sous-ensemble de genres et d'espaces de noms à partir d'une exportation de toutes les entités.

Console

Dans la console, vous pouvez sélectionner tous les genres ou un genre spécifique. De même, vous pouvez sélectionner tous les espaces de noms ou un espace de noms spécifique.

Pour spécifier une liste d'espaces de noms et de genres à exporter, utilisez plutôt gcloud.

  1. Accédez à la page Importation Cloud Datastore dans Google Cloud Console.

    Accéder à la page Importation Cloud Datastore

  2. Dans le champ File, cliquez sur Parcourir et sélectionnez un fichier overall_export_metadata.

  3. Définissez le champ Espace de nom sur All Namespaces ou sur un espace de noms spécifique.

  4. Définissez la valeur du champ Genre sur All Kinds ou sur le nom d'un genre.

  5. Cliquez sur Importer.

La console ouvre la page Entités et indique la réussite ou l'échec de votre requête d'importation gérée.

La console affiche également un bouton Afficher l'état. Cliquez sur ce bouton pour ouvrir un terminal Cloud Shell prérempli avec la commande gcloud nécessaire pour connaître l'état de votre opération.

Exécutez cette commande chaque fois que vous souhaitez afficher l'état de l'opération.

gcloud

    gcloud datastore import --kinds="KIND1,KIND2" --namespaces="(default),NAMESPACE2" gs://bucket-name/file-path/file-name.overall_export_metadata --async

bucket-name/file-path/file-name correspond au chemin d'accès au fichier overall_export_metadata dans votre bucket Cloud Storage.

Utilisez l'option --async pour empêcher l'outil gcloud d'attendre la fin de l'opération. Si vous omettez l'option --async, Ctrl+c peut déduire la zone souhaitée en fonction de vos propriétés par défaut. L'opération ne sera pas annulée.

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet
  • bucket-name : nom de votre bucket Cloud Storage
  • object-name : nom de votre objet Cloud Storage (exemple : 2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata)
  • kind : genre de l'entité
  • namespace : ID de l'espace de noms (utilisez "" pour l'ID d'espace de noms par défaut)

Méthode HTTP et URL :

POST https://datastore.googleapis.com/v1/projects/project-id:import

Corps JSON de la requête :

    {
      "inputUrl": "gs://bucket-name/object-name",
      "entityFilter": {
        "kinds": ["kind"],
        "namespaceIds": ["namespace"],
      },
    }
    

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

    {
      "name": "projects/project-id/operations/operation-id",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata",
        "common": {
          "startTime": "2019-09-18T21:51:02.830608Z",
          "operationType": "IMPORT_ENTITIES",
          "state": "PROCESSING"
        },
        "entityFilter": {
          "kinds": [
            "Task"
          ],
          "namespaceIds": [
            ""
          ]
        },
        "inputUrl": "gs://bucket-name/2019-09-18T21:49:25_96833/2019-09-18T21:49:25_96833.overall_export_metadata"
      }
    }
    
La réponse est une opération de longue durée dont vous pouvez vérifier l'état d'exécution.

Gérer les opérations de longue durée

Les opérations d'importation et d'exportation gérées sont des opérations de longue durée. Ces appels de méthode peuvent prendre beaucoup de temps.

Lorsque vous lancez une opération d'exportation ou d'importation, le mode Datastore attribue un nom unique à l'opération. Vous pouvez utiliser le nom de l'opération pour supprimer, annuler ou vérifier l'état de l'opération.

Les noms des opérations sont précédés du préfixe projects/[PROJECT_ID]/databases/(default)/operations/, par exemple :

    projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
    

Cependant, vous pouvez omettre le préfixe lorsque vous spécifiez un nom d'opération pour les commandes describe, cancel et delete.

Répertorier toutes les opérations de longue durée

Pour répertorier les opérations de longue durée, utilisez la commande gcloud datastore operations list : Cette commande répertorie les opérations en cours et récemment terminées. Une fois terminées, les opérations restent accessibles pendant quelques jours :

gcloud

    gcloud datastore operations list
    

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet

Méthode HTTP et URL :

GET https://datastore.googleapis.com/v1/projects/project-id/operations

Pour envoyer votre requête, développez l'une des options suivantes :

Consultez les informations concernant la réponse ci-dessous.

Par exemple, une opération d'exportation récemment terminée affiche les informations suivantes :

    {
      "operations": [
        {
          "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI",
          "metadata": {
            "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
            "common": {
              "startTime": "2017-12-05T23:01:39.583780Z",
              "endTime": "2017-12-05T23:54:58.474750Z",
              "operationType": "EXPORT_ENTITIES"
            },
            "progressEntities": {
              "workCompleted": "21933027",
              "workEstimated": "21898182"
            },
            "progressBytes": {
              "workCompleted": "12421451292",
              "workEstimated": "9759724245"
            },
            "entityFilter": {
              "namespaceIds": [
                ""
              ]
            },
            "outputUrlPrefix": "gs://bucket-name"
          },
          "done": true,
          "response": {
            "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse",
            "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata"
          }
        }
      ]
    }
    

Décrire une seule opération

Au lieu de répertorier toutes les opérations de longue durée, vous pouvez répertorier les détails d'une seule opération :

gcloud

Utilisez la commande operations describe pour afficher l'état d'une opération d'exportation ou d'importation.

    gcloud datastore operations describe operation-name

rest

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet
  • opération-name : nom de l'opération

Méthode HTTP et URL :

GET https://datastore.googleapis.com/v1/projects/project-id/operations/operation-name

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

    
    {
      "name": "projects/project-id/operations/ASA3ODAwMzQxNjIyChp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKLRI",
      "metadata": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
        "common": {
          "startTime": "2019-10-08T20:07:28.105236Z",
          "endTime": "2019-10-08T20:07:36.310653Z",
          "operationType": "EXPORT_ENTITIES",
          "state": "SUCCESSFUL"
        },
        "progressEntities": {
          "workCompleted": "21",
          "workEstimated": "21"
        },
        "progressBytes": {
          "workCompleted": "2272",
          "workEstimated": "2065"
        },
        "entityFilter": {},
        "outputUrlPrefix": "gs://bucket-name/2019-10-08T20:07:28_28481"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse",
        "outputUrl": "gs://bucket-name/2019-10-08T20:07:28_28481/2019-10-08T20:07:28_28481.overall_export_metadata"
      }
    }
    

Estimation du délai d'exécution

Lorsque l'opération s'exécute, consultez la valeur du champ state pour connaître son état global.

Une requête permettant d'obtenir l'état d'une opération de longue durée renvoie les métriques workEstimated et workCompleted. Chacune de ces métriques est renvoyée à la fois en nombre d'octets et en nombre d'entités : workEstimated indique le nombre total estimé d'octets et d'entités qu'une opération va traiter, en fonction des métriques de la base de données. workCompleted indique le nombre d'octets et d'entités traités jusqu'à présent. Une fois l'opération terminée, workCompleted indique le nombre total d'octets et d'entités réellement traités, qui peut être supérieur à la valeur de workEstimated.

Divisez workCompleted par workEstimated pour obtenir une estimation approximative de la progression. L'estimation peut être inexacte, car elle dépend de la collecte de statistiques retardée.

Par exemple, voici l'état de la progression d'une opération d'exportation :

    {
      "operations": [
        {
          "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI",
          "metadata": {
            "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata",
            ...
            "progressEntities": {
              "workCompleted": "1",
              "workEstimated": "3"
            },
            "progressBytes": {
              "workCompleted": "85",
              "workEstimated": "257"
            },
            ...
    

Lorsqu'une opération est effectuée, la description de l'opération contient "done": true. Consultez la valeur du champ state pour afficher le résultat de l'opération. Si le champ done n'est pas défini dans la réponse, sa valeur est false. Ne vous basez pas sur l'existence de la valeur done pour les opérations en cours.

Annuler une opération

Utilisez la commande operations cancel pour arrêter une opération en cours :

    gcloud datastore operations cancel operation-name
    

L'annulation d'une opération en cours n'annule pas l'opération. Une opération d'exportation annulée laisse des documents déjà exportés dans Cloud Storage, et une opération d'importation annulée conserve les mises à jour déjà effectuées dans votre base de données. Vous ne pouvez pas importer une exportation partiellement terminée.

Supprimer une opération

Utilisez la commande operations delete pour supprimer une opération du résultat de operations list. Cette commande ne supprime pas les fichiers d'exportation de Cloud Storage.

    gcloud datastore operations delete operation-name
    

Facturation et tarifs des importations et exportations

Vous devez activer la facturation pour votre projet Google Cloud pour pouvoir utiliser le service d'exportation et d'importation géré. Les opérations d'exportation et d'importation contribuent à vos coûts Google Cloud de différentes manières :

Les frais liés aux opérations d'exportation et d'importation ne sont pas comptabilisés parmi les plafonds budgétaires App Engine. Les opérations d'exportation ou d'importation ne déclencheront pas vos alertes budgétaires Google Cloud avant la fin de leur exécution. De même, les opérations de lecture et d'écriture effectuées lors d'une opération d'exportation ou d'importation sont imputées à votre quota quotidien une fois l'opération terminée.

Autorisations

Pour exécuter des opérations d'exportation et d'importation, votre compte utilisateur et le compte de service par défaut de votre projet requièrent les autorisations Cloud Identity and Access Management décrites ci-dessous.

Autorisations du compte utilisateur

Le compte utilisateur ou le compte de service à l'origine de l'opération nécessite les autorisations Cloud IAM datastore.databases.export et datastore.databases.import. Si vous êtes le propriétaire du projet, votre compte dispose des autorisations requises. Sinon, les rôles Cloud IAM suivants accordent les autorisations nécessaires :

  • Propriétaire Datastore
  • Administrateur des importations et des exportations Cloud Datastore

Un propriétaire de projet peut attribuer l'un de ces rôles en suivant les étapes de la section Accorder l'accès.

Autorisations du compte de service par défaut

Chaque projet Google Cloud crée automatiquement un compte de service par défaut nommé PROJECT_ID@appspot.gserviceaccount.com. Les opérations d'exportation et d'importation utilisent ce compte de service pour autoriser les opérations Cloud Storage.

Le compte de service par défaut de votre projet nécessite un accès au bucket Cloud Storage utilisé dans une opération d'exportation ou d'importation. Si votre bucket Cloud Storage se situe dans le même projet que votre base de données en mode Datastore, le compte de service par défaut a accès au bucket par défaut.

Si le bucket Cloud Storage se trouve dans un autre projet, vous devez autoriser le compte de service par défaut à accéder au bucket Cloud Storage.

Attribuer des rôles au compte de service par défaut

Vous pouvez utiliser l'outil de ligne de commande gsutil pour attribuer l'un des rôles ci-dessous. Par exemple, pour attribuer le rôle "Administrateur de l'espace de stockage" au compte de service par défaut, exécutez la commande suivante :

    gsutil iam ch serviceAccount:[PROJECT_ID]@appspot.gserviceaccount.com:roles/storage.admin \
        gs://[BUCKET_NAME]
    

Vous pouvez également attribuer ce rôle à l'aide de Cloud Console.

Opérations d'exportation

Pour les opérations d'exportation impliquant un bucket situé dans un autre projet, modifiez les autorisations du bucket pour attribuer l'un des rôles Cloud Storage suivants au compte de service par défaut du projet contenant votre base de données en mode Datastore :

  • Administrateur de l'espace de stockage
  • Administrateur des objets de l'espace de stockage
  • Rédacteur des anciens buckets de l'espace de stockage

Vous pouvez également créer un rôle personnalisé Cloud IAM avec les autorisations suivantes :

  • storage.buckets.get
  • storage.objects.create
  • storage.objects.list

Opérations d'importation

Pour les opérations d'importation impliquant un bucket Cloud Storage situé dans un autre projet, modifiez les autorisations du bucket pour attribuer l'un des rôles Cloud Storage suivants au compte de service par défaut du projet contenant votre base de données en mode Datastore :

  • Administrateur de l'espace de stockage
  • Lecteur des objets de l'espace de stockage et Lecteur des anciens buckets de l'espace de stockage

Vous pouvez également créer un rôle personnalisé Cloud IAM avec les autorisations suivantes :

  • storage.buckets.get
  • storage.objects.get

Différences par rapport aux sauvegardes de l'administration Cloud Datastore

Si vous avez déjà utilisé la console d'administration Cloud Datastore pour les opérations de sauvegarde, vous remarquerez les différences suivantes :

  • Les exportations créées par une opération d'exportation gérée n'apparaissent pas dans la console d'administration Cloud Datastore. Les exportations et les importations gérées constituent un nouveau service qui ne partage pas les données avec la fonctionnalité de sauvegarde et de restauration d'App Engine, gérée via Cloud Console.

  • Le service d'exportation et d'importation géré n'utilise pas les mêmes métadonnées que la sauvegarde de l'administration Cloud Datastore et ne stocke pas l'état de progression dans votre base de données. Pour en savoir plus sur la vérification de la progression des opérations d'exportation et d'importation, consultez la section Gérer les opérations de longue durée.

  • Vous ne pouvez pas afficher les journaux de service des opérations d'exportation et d'importation gérées.

  • Le service d'importation géré est rétrocompatible avec les fichiers de sauvegarde de l'administration Cloud Datastore. Vous pouvez importer un fichier de sauvegarde administrateur Cloud Datastore à l'aide du service d'importation géré, mais vous ne pouvez pas importer le résultat d'une exportation gérée à l'aide de la console d'administration Cloud Datastore.

Importer des données dans BigQuery

Pour importer des données d'une exportation gérée dans BigQuery, consultez la section Charger des données du service d'exportation Cloud Datastore.

Les données exportées sans filtre d'entité spécifié ne peuvent pas être chargées dans BigQuery. Si vous souhaitez importer des données dans BigQuery, votre requête d'exportation doit inclure un ou plusieurs noms de genre dans le filtre d'entité.

Limite des colonnes BigQuery

BigQuery impose une limite de 10 000 colonnes par table. Les opérations d'exportation génèrent un schéma de table BigQuery pour chaque genre. Dans ce schéma, chaque propriété unique dans les entités d'un genre devient une colonne de schéma.

Si le schéma BigQuery d'un genre dépasse 10 000 colonnes, l'opération d'exportation tente de rester sous la limite des colonnes en traitant les entités intégrées comme des objets blob. Si cette conversion réduit le nombre de colonnes du schéma à moins de 10 000, vous pouvez charger les données dans BigQuery, mais vous ne pouvez pas interroger les propriétés dans les entités intégrées. Si le nombre de colonnes dépasse toujours 10 000, l'opération d'exportation ne génère pas de schéma BigQuery pour le genre et vous ne pouvez pas charger ses données dans BigQuery.