Importer et exporter des données au format CSV

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Cette page explique comment exporter des données de Cloud Spanner vers des fichiers CSV ou importer des données de fichiers CSV dans une base de données Spanner.

Le processus utilise Dataflow. Vous pouvez exporter des données de Spanner vers un bucket Cloud Storage, ou importer des données dans Spanner à partir d'un bucket Cloud Storage contenant un fichier manifeste JSON et un ensemble de fichiers CSV.

Avant de commencer

Pour importer ou exporter une base de données Spanner, vous devez d'abord activer les API Spanner, Cloud Storage, Compute Engine et Dataflow :

Activer les API

Vous devez également disposer d'un quota suffisant, ainsi que des autorisations IAM requises.

Exigences relatives aux quotas

Voici les exigences de quota pour les tâches d'importation ou d'exportation:

  • Spanner : vous devez disposer d'une capacité de calcul suffisante pour gérer la quantité de données que vous importez. Aucune capacité de calcul supplémentaire n'est requise pour importer ou exporter une base de données, mais il peut s'avérer nécessaire d'ajouter de la capacité de calcul pour que la tâche se termine dans un délai raisonnable. Pour en savoir plus, consultez Tâches Optimize.
  • Cloud Storage : pour effectuer des importations, vous devez disposer d'un bucket contenant les fichiers que vous avez exportés auparavant. Pour effectuer des exportations, vous devez créer un bucket pour vos fichiers exportés, si ce n'est pas déjà fait. Vous pouvez le faire dans la console Google Cloud, via la page Cloud Storage ou lors de la création de votre exportation via la page Spanner. Il n'est pas nécessaire de spécifier une taille pour ce bucket.
  • Dataflow : les tâches d'importation ou d'exportation sont soumises aux mêmes exigences que les autres tâches Dataflow en ce qui concerne les quotas Compute Engine, aussi bien pour l'utilisation de processeurs et d'espace disque que pour le nombre d'adresses IP.
  • Compute Engine : avant d'exécuter une tâche d'importation ou d'exportation, vous devez définir les quotas initiaux Compute Engine utilisés par Dataflow. Ces quotas représentent le nombre maximal de ressources que vous permettez à Dataflow d'utiliser pour votre tâche. Les valeurs de départ recommandées sont les suivantes :

    • Processeurs : 200
    • Adresses IP en cours d'utilisation : 200
    • Disque persistant standard : 50 To

    En règle générale, vous n'avez pas d'autres réglages à effectuer. Dataflow gère l'autoscaling de sorte que vous n'ayez à payer que pour les ressources effectivement utilisées lors de l'importation ou de l'exportation. S'il apparaît que votre tâche pourrait utiliser davantage de ressources, l'interface utilisateur de Dataflow affiche une icône d'avertissement, mais cela n'empêche normalement pas la tâche d'aboutir.

Exigences IAM

Pour importer ou exporter une base de données, vous devez également disposer de rôles IAM accordant des autorisations suffisantes pour utiliser tous les services impliqués dans une tâche d'importation ou d'exportation. Pour en savoir plus sur l'attribution de rôles et les autorisations, consultez la page Appliquer des rôles IAM.

Pour importer ou exporter une base de données, vous avez besoin des rôles suivants :

  • Au niveau du projet Google Cloud :
    • Lecteur Spanner
    • Administrateur Dataflow
    • Administrateur de l'espace de stockage
  • Au niveau de la base de données ou de l'instance Spanner, ou au niveau du projet Google Cloud :
    • Lecteur Spanner
    • Administrateur de bases de données Spanner (obligatoire uniquement pour les tâches d'importation)

Exporter des données Spanner vers des fichiers CSV

Pour exporter des données de Spanner vers des fichiers CSV dans Cloud Storage, suivez les instructions permettant d'utiliser la CLI Google Cloud pour exécuter une tâche avec le modèle Spanner to Cloud Storage Text.

Vous pouvez également vous reporter aux informations de ce document concernant l'affichage ou le dépannage des tâches, l'optimisation des tâches lentes et les facteurs affectant les performances des tâches.

Importer des données à partir de fichiers CSV dans Spanner

Le processus d'importation de données à partir de fichiers CSV comprend les étapes suivantes :

  1. Exportez vos données vers des fichiers CSV et stockez ces fichiers dans Cloud Storage. N'incluez pas de ligne d'en-tête.
  2. Créez un fichier manifeste JSON et stockez-le avec vos fichiers CSV.
  3. Créez des tables cibles vides dans votre base de données Spanner ou assurez-vous que les types de données des colonnes de vos fichiers CSV correspondent aux colonnes de vos tables existantes.
  4. Exécutez votre tâche d'importation.

Étape 1: Exportez les données d'une base de données non-Spanner vers des fichiers CSV

Le processus d'importation apporte des données issues de fichiers CSV situés dans un bucket Cloud Storage. Vous pouvez exporter des données au format CSV depuis n'importe quelle source.

Tenez compte des points suivants lorsque vous exportez vos données :

  • Les fichiers texte à importer doivent être au format CSV.
  • Les données doivent correspondre à l'un des types suivants :

SQL standard Google

BOOL
INT64
FLOAT64
NUMERIC
STRING
DATE
TIMESTAMP
BYTES
JSON

PostgreSQL

boolean
bigint
double precision
numeric
character varying, text
date
timestamp with time zone
bytea
  • Il n'est pas nécessaire d'inclure ou de générer des métadonnées lorsque vous exportez les fichiers CSV.

  • Il n'est pas nécessaire de suivre une convention d'attribution de noms particulière pour vos fichiers.

Si vous n'exportez pas vos fichiers directement vers Cloud Storage, vous devez importer les fichiers CSV dans un bucket Cloud Storage.

Étape 2: Créez un fichier manifeste JSON

Vous devez également créer un fichier manifeste comprenant une description JSON des fichiers à importer et le placer dans le même bucket Cloud Storage que celui dans lequel vous avez stocké vos fichiers CSV. Ce fichier contient un tableau tables qui répertorie le nom et les emplacements des fichiers de données pour chaque table. Le fichier spécifie également le dialecte de la base de données de réception. Si le dialecte est omis, le langage SQL standard est utilisé par défaut.

Le format du fichier manifeste correspond au type de message suivant, présenté ici au format de tampon de protocole:

message ImportManifest {
  // The per-table import manifest.
  message TableManifest {
    // Required. The name of the destination table.
    string table_name = 1;
    // Required. The CSV files to import. This value can be either a filepath or a glob pattern.
    repeated string file_patterns = 2;
    // The schema for a table column.
    message Column {
      // Required for each Column that you specify. The name of the column in the
      // destination table.
      string column_name = 1;
      // Required for each Column that you specify. The type of the column.
      string type_name = 2;
    }
    // Optional. The schema for the table columns.
    repeated Column columns = 3;
  }
  // Required. The TableManifest of the tables to be imported.
  repeated TableManifest tables = 1;

  enum ProtoDialect {
    GOOGLE_STANDARD_SQL = 0;
    POSTGRESQL = 1;
  }
  // Optional. The dialect of the receiving database. Defaults to GOOGLE_STANDARD_SQL.
  ProtoDialect dialect = 2;
}

L'exemple suivant illustre un fichier manifeste pour l'importation de tables nommées Albums et Singers dans une base de données en dialecte SQL standard de Google. La table Albums utilise le schéma de la colonne que la tâche extrait de la base de données, et la table Singers utilise le schéma spécifié par le fichier manifeste :

{
  "tables": [
    {
      "table_name": "Albums",
      "file_patterns": [
        "gs://bucket1/Albums_1.csv",
        "gs://bucket1/Albums_2.csv"
      ]
    },
    {
      "table_name": "Singers",
      "file_patterns": [
        "gs://bucket1/Singers*.csv"
      ],
      "columns": [
        {"column_name": "SingerId", "type_name": "INT64"},
        {"column_name": "FirstName", "type_name": "STRING"},
        {"column_name": "LastName", "type_name": "STRING"}
      ]
    }
  ]
}

Étape 3: Créez la table pour votre base de données Spanner

Avant d'exécuter votre importation, vous devez créer les tables cibles dans votre base de données Spanner. Si la table cible Spanner dispose déjà d'un schéma, toutes les colonnes spécifiées dans le fichier manifeste doivent disposer des mêmes types de données que les colonnes correspondantes du schéma de la table cible.

Nous vous recommandons de créer des index secondaires et des clés étrangères, et de modifier des flux après avoir importé vos données dans Spanner, et non lors de la création initiale de la table. Si votre table contient déjà ces structures, nous vous recommandons de les supprimer et de les recréer après avoir importé vos données.

Étape 4: Exécutez une tâche d'importation Dataflow à l'aide de gcloud

Pour démarrer votre tâche d'importation, suivez les instructions d'utilisation de Google Cloud CLI afin d'exécuter une tâche avec le modèle CSV vers Spanner.

Après avoir démarré une tâche d'importation, vous pouvez afficher les détails de cette tâche dans Google Cloud Console.

Une fois la tâche d'importation terminée, ajoutez les index secondaires, les clés étrangères et les flux de modifications nécessaires.

Choisir une région pour votre tâche d'importation

Vous pouvez choisir une autre région en fonction de l'emplacement de votre bucket Cloud Storage. Pour éviter les frais de sortie du réseau, choisissez une région correspondant à l'emplacement de votre bucket Cloud Storage.

  • Si l'emplacement de votre bucket Cloud Storage est une région, vous pouvez profiter de l'utilisation gratuite du réseau en choisissant la même région pour votre tâche d'importation, à condition que cette région soit disponible.

  • Si l'emplacement de votre bucket Cloud Storage est un emplacement birégional, vous pouvez profiter de l'utilisation gratuite du réseau en choisissant l'une des deux régions qui constituent la zone birégionale pour votre tâche d'importation, à condition que l'une des régions soit disponible.

  • Si une région hébergée en colocation n'est pas disponible pour votre tâche d'importation ou si l'emplacement de votre bucket Cloud Storage est un emplacement multirégional, des frais de sortie s'appliquent. Consultez les tarifs de sortie de réseau relatifs à Cloud Storage et sélectionnez la région qui générera le moins de frais de sortie.

Afficher ou dépanner des tâches dans l'interface utilisateur Dataflow

Après avoir démarré une tâche d'importation ou d'exportation, vous pouvez afficher les détails de cette tâche, y compris les journaux, dans la section Dataflow de Google Cloud Console.

Afficher les détails de la tâche Dataflow

Pour afficher les détails des tâches d'importation/exportation exécutées au cours de la dernière semaine, y compris les tâches en cours d'exécution :

  1. Accédez à la page Présentation de la base de données correspondant à la base de données.
  2. Cliquez sur l'élément de menu du volet Importations/Exportations à gauche. La page Importations/Exportations de la base de données affiche la liste des tâches récentes.
  3. Sur la page Importations/Exportations de la base de données, cliquez sur le nom de la tâche dans la colonne Nom de la tâche Dataflow :

    Message d'état de la tâche en cours

    Google Cloud Console affiche les détails de la tâche Dataflow.

Pour afficher une tâche que vous avez exécutée il y a plus d'une semaine :

  1. Accédez à la page des tâches Dataflow dans Google Cloud Console.

    Accéder à la page "Tâches"

  2. Recherchez votre tâche dans la liste, puis cliquez sur son nom.

    Google Cloud Console affiche les détails de la tâche Dataflow.

Afficher les journaux Dataflow pour votre tâche

Pour afficher les journaux d'une tâche Dataflow, accédez à la page des détails de la tâche comme décrit ci-dessus, puis cliquez sur Journaux à droite du nom de la tâche.

Si une tâche échoue, recherchez les erreurs dans les journaux. Si des erreurs ont été enregistrées, leur nombre s'affiche à côté du bouton Logs (Journaux) :

Exemple de nombre d'erreurs affiché à côté du bouton "Journaux"

Pour afficher les erreurs relatives à une tâche :

  1. Cliquez sur le nombre d'erreurs affiché à côté du bouton Logs (Journaux).

    Google Cloud Console affiche les journaux de la tâche. Vous devrez éventuellement faire défiler l'affichage pour voir les erreurs.

  2. Repérez les entrées signalées par l'icône d'erreur Icône "Erreur".

  3. Cliquez sur une entrée de journal pour développer son contenu.

Pour en savoir plus sur le dépannage des tâches Dataflow, consultez la page Résoudre les problèmes liés à votre pipeline.

Résoudre les échecs de tâches d'importation ou d'exportation

Si les erreurs suivantes s'affichent dans les journaux de vos tâches :

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Vérifiez la latence de lecture/écriture à 99% dans l'onglet Monitoring de votre base de données Spanner dans Google Cloud Console. Si elle affiche des valeurs élevées (plusieurs secondes), cela signifie que l'instance est surchargée, ce qui entraîne l'expiration et l'échec des lectures et écritures.

L'une des causes d'une latence élevée est que la tâche Dataflow s'exécute avec trop de nœuds de calcul, ce qui charge trop l'instance Spanner.

Pour spécifier le nombre maximal de nœuds de calcul Dataflow :
  • Si vous utilisez la console Dataflow, le paramètre Nombre maximal de nœuds de calcul se trouve dans la section Paramètres facultatifs de la page Créer une tâche à partir d'un modèle.

  • Si vous utilisez gcloud, spécifiez l'argument max-workers. Exemple :

    gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Optimiser les tâches d'importation ou d'exportation lentes

Si vous avez adopté les paramètres initiaux suggérés plus haut, vous n'avez en principe aucun autre réglage à effectuer. Voici toutefois quelques possibilités d'optimisation supplémentaires à envisager si l'exécution de votre tâche est lente :

  • Optimisez la tâche et l'emplacement des données: exécutez la tâche Dataflow dans la même région que celle où se trouvent votre instance Spanner et votre bucket Cloud Storage.

  • Assurez-vous de disposer de ressources Dataflow suffisantes : si les quotas Compute Engine pertinents limitent les ressources de votre tâche Dataflow, la page Dataflow de la tâche dans Google Cloud Console affiche une icône d'avertissement Icône Avertissement et des messages de journal.

    Capture d'écran de l'avertissement de limite de quota

    Dans ce cas, l'augmentation des quotas en termes de processeurs, d'adresses IP en cours d'utilisation et de disques persistants standards peut accélérer l'exécution de votre tâche, mais également augmenter les frais facturés pour Compute Engine.

  • Vérifiez l'utilisation du processeur Spanner : si vous constatez que l'utilisation du processeur de l'instance est supérieure à 65%, vous pouvez augmenter la capacité de calcul de cette instance. La capacité permet d'ajouter des ressources Spanner et la tâche devrait s'accélérer, mais des frais supplémentaires vous seront facturés.

Facteurs affectant les performances des tâches d'importation ou d'exportation

Plusieurs facteurs influent sur le temps nécessaire pour mener à bien une tâche d'importation ou d'exportation.

  • Taille de la base de données Spanner: le traitement de données supplémentaires nécessite plus de temps et de ressources.

  • Schéma de base de données Spanner, y compris:

    • Nombre de tables
    • Taille des lignes
    • Nombre d'index secondaires
    • Nombre de clés étrangères
    • Nombre de flux de modifications

  • Emplacement des données: les données sont transférées de Spanner à Cloud Storage à l'aide de Dataflow. Dans l'idéal, ces trois composants doivent se trouver dans la même région. Dans le cas contraire, le déplacement des données entre les régions ralentit l'exécution de la tâche.

  • Nombre de nœuds de calcul Dataflow : les nœuds de calcul Dataflow optimaux sont nécessaires pour de bonnes performances. En utilisant l'autoscaling, Dataflow choisit le nombre de nœuds de calcul pour la tâche en fonction de la quantité de travail à effectuer. Le nombre de nœuds de calcul sera toutefois limité par les quotas en matière de processeurs, d'adresses IP en cours d'utilisation et de disques persistants standards. L'interface utilisateur de Dataflow affiche une icône d'avertissement lorsque des limites de quota sont atteintes. Dans ce cas, la progression est ralentie, mais la tâche doit néanmoins aboutir. L'autoscaling peut surcharger Spanner, ce qui entraîne des erreurs lorsqu'il y a une grande quantité de données à importer.

  • Charge existante sur Spanner : une tâche d'importation ajoute une charge de processeur importante sur une instance Spanner. Une tâche d'exportation ajoute généralement une charge légère sur une instance Spanner. Si cette instance présentait déjà une charge importante, l'exécution de la tâche est ralentie.

  • Quantité de capacité de calcul Spanner: si l'utilisation du processeur de l'instance est supérieure à 65%, la tâche s'exécute plus lentement.

Régler les nœuds de calcul pour optimiser les performances d'importation

Lorsque vous démarrez une tâche d'importation Spanner, les nœuds de calcul Dataflow doivent être définis sur une valeur optimale pour obtenir de bonnes performances. Trop de nœuds de calcul surchargent Spanner et trop peu de nœuds de calcul, ce qui entraîne des performances d'importation insuffisantes.

Le nombre maximal de nœuds de calcul dépend fortement de la taille des données. Idéalement, l'utilisation totale du processeur associée à Spanner doit être comprise entre 70 % et 90 %. Cela permet d'obtenir un bon équilibre entre l'efficacité de Spanner et l'exécution d'une tâche sans erreur.

Pour atteindre cet objectif d'utilisation dans la majorité des schémas/scénarios, nous recommandons un nombre maximal de processeurs virtuels de nœud de calcul compris entre 4 et 6 fois le nombre de nœuds Spanner.

Par exemple, pour une instance Spanner à 10 nœuds utilisant des nœuds de calcul n1-standard-2, vous devez définir un nombre maximal de nœuds de calcul sur 25, ce qui donne 50 processeurs virtuels.