Cette page explique comment exporter des données de Spanner vers des fichiers CSV ou importer des données de fichiers CSV dans des bases de données Spanner utilisant le dialecte GoogleSQL ou PostgreSQL.
- Si vous souhaitez importer une base de données Spanner que vous avez précédemment exportée vers des fichiers Avro dans Cloud Storage, consultez Importer des fichiers Avro Spanner.
- Si vous souhaitez importer des fichiers Avro à partir d'une base de données autre que Spanner, consultez Importer des données à partir de bases de données autres que 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 :
Rôles requis pour activer les API
Pour activer des API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
Vous devez également disposer d'un quota suffisant, ainsi que des autorisations IAM requises.
Exigences en matière de quota
Les exigences de quota pour les jobs d'importation ou d'exportation sont les suivantes :
- Spanner : vous devez disposer d'une capacité de calcul suffisante pour prendre en charge 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 Optimiser les jobs.
- Cloud Storage : pour effectuer des importations, vous devez disposer d'un bucket contenant les fichiers que vous avez exportés auparavant. Pour exporter, vous devez créer un bucket pour vos fichiers exportés si vous n'en avez pas déjà un. Pour ce faire, accédez à la console Google Cloud , soit via la page Cloud Storage, soit lors de la création de votre exportation via la page Spanner. Vous n'avez pas besoin de définir une taille pour votre 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 général, vous n'avez pas besoin d'effectuer d'autres ajustements. 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.
Rôles requis
Pour obtenir les autorisations nécessaires pour exporter une base de données, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre compte de service de nœud de calcul Dataflow :
- Lecteur Cloud Spanner (
roles/spanner.viewer) - Nœud de calcul Dataflow (
roles/dataflow.worker) - Administrateur de l'espace de stockage (
roles/storage.admin) - Lecteur de bases de données Spanner (
roles/spanner.databaseReader) - Administrateur de base de données (
roles/spanner.databaseAdmin)
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 d'utilisation de la Google Cloud CLI pour exécuter un job avec le modèle Spanner vers texte Cloud Storage.
Vous pouvez également consulter les informations de cette page sur l'optimisation des jobs lents et les facteurs affectant les performances des jobs.
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 :
- Exportez vos données vers des fichiers CSV et stockez-les dans Cloud Storage. N'incluez pas de ligne d'en-tête.
- Créez un fichier manifeste JSON et stockez-le avec vos fichiers CSV.
- 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 correspondantes de vos tables existantes.
- 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 :
GoogleSQL
BOOL INT64 FLOAT64 NUMERIC STRING DATE TIMESTAMP BYTES JSON
PostgreSQL
boolean bigint double precision numeric character varying, text date timestamp with time zone bytea
Vous n'avez pas besoin d'inclure ni de générer de métadonnées lorsque vous exportez les fichiers CSV.
Vous n'avez pas besoin de suivre une convention de nommage 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, il est défini par défaut sur GoogleSQL.
Le format du fichier manifeste correspond au type de message suivant, affiché 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 Google SQL. 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 l'importation, vous devez créer les tables cibles dans votre base de données Spanner. Si la table Spanner cible possède déjà 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 dans le schéma de la table cible.
Nous vous recommandons de créer des index secondaires, des clés étrangères et des flux de modifications 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 un job d'importation Dataflow à l'aide de gcloud
Pour lancer votre job d'importation, suivez les instructions d'utilisation de la gcloud CLI pour exécuter un job avec le modèle Cloud Storage Text to Spanner.
Après avoir démarré un job d'importation, vous pouvez afficher ses détails dans la console Google Cloud .
Une fois le job d'importation terminé, ajoutez les index secondaires, les clés étrangères et les flux de modifications nécessaires.
Sélectionner une région pour votre job d'importation
Vous pouvez choisir une autre région en fonction de l'emplacement de votre bucket Cloud Storage. Pour éviter des frais de transfert de données sortantes, 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 du réseau sans frais en choisissant la même région pour votre job d'importation, à condition que cette région soit disponible.
Si l'emplacement de votre bucket Cloud Storage est une zone birégionale, vous pouvez profiter de l'utilisation du réseau sans frais en choisissant l'une des deux régions qui composent la zone birégionale pour votre job d'importation, en supposant que l'une des régions est disponible.
- Si aucune région colocalisée n'est disponible pour votre job d'importation ou si l'emplacement de votre bucket Cloud Storage est un emplacement multirégional, des frais de transfert de données sortantes s'appliquent. Consultez les tarifs de transfert de données Cloud Storage pour choisir une région qui entraîne les frais de transfert de données les plus bas.
Afficher ou dépanner des jobs dans l'UI de Dataflow
Après avoir démarré une tâche d'importation ou d'exportation, vous pouvez afficher les détails de la tâche, y compris les journaux, dans la section Dataflow de la console Google Cloud .
Afficher les détails du job Dataflow
Pour afficher les détails des jobs d'importation ou d'exportation que vous avez exécutés au cours de la semaine dernière, y compris ceux en cours d'exécution :
- Accédez à la page Présentation de la base de données correspondant à la base de données.
- 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.
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 :

La console Google Cloud affiche les détails du job Dataflow.
Pour afficher une tâche que vous avez exécutée il y a plus d'une semaine :
Accédez à la page des jobs Dataflow dans la console Google Cloud .
Recherchez votre tâche dans la liste, puis cliquez sur son nom.
La console Google Cloud affiche les détails du job Dataflow.
Afficher les journaux Dataflow de votre job
Pour afficher les journaux d'un job Dataflow, accédez à la page d'informations du job, puis cliquez sur Journaux à droite du nom du job.
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) :

Pour afficher les erreurs relatives à une tâche :
Cliquez sur le nombre d'erreurs à côté de Journaux.
La console Google Cloud affiche les journaux du job. Vous devrez éventuellement faire défiler l'affichage pour voir les erreurs.
Repérez les entrées signalées par l'icône d'erreur
.Cliquez sur une entrée de journal pour développer son contenu.
Pour en savoir plus sur la résolution des problèmes liés aux jobs Dataflow, consultez Résoudre les problèmes liés à votre pipeline.
Résoudre les problèmes d'échec des jobs 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 de 99 % dans l'onglet Surveillance de votre base de données Spanner dans la consoleGoogle Cloud . Si les valeurs sont élevées (plusieurs secondes), cela indique que l'instance est surchargée, ce qui entraîne l'expiration et l'échec des opérations de lecture/écriture.
Une latence élevée peut être due au fait que le job Dataflow s'exécute avec trop de nœuds de calcul, ce qui surcharge l'instance Spanner.
Pour spécifier une limite du nombre de nœuds de calcul Dataflow :Console
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 un job à partir d'un modèle.
gcloud
Exécutez la commande gcloud dataflow jobs run, puis 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 \
--network=network-123
Résoudre une erreur réseau
L'erreur suivante peut se produire lorsque vous exportez vos bases de données Spanner :
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
Cette erreur se produit, car Spanner part du principe que vous avez l'intention d'utiliser un réseau VPC en mode automatique nommé default dans le même projet que le job Dataflow. Si vous n'avez pas de réseau VPC par défaut dans le projet, ou si votre réseau VPC est en mode personnalisé, vous devez créer un job Dataflow et spécifier un autre réseau ou sous-réseau.
Optimiser les jobs d'importation ou d'exportation lents
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 l'emplacement du job et des données : exécutez votre job 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 job Dataflow, la page Dataflow du job dans la console Google Cloud affiche une icône d'avertissement
et des messages de journal :
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 pour l'instance est supérieure à 65 %, vous pouvez augmenter la capacité de calcul de cette instance. La capacité ajoute des ressources Spanner et le job devrait s'accélérer, mais vous encourez des frais Spanner supplémentaires.
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 d'un plus grand nombre de données nécessite plus de temps et de ressources.
Schéma de base de données Spanner, y compris :
- Le nombre de tables
- Taille des lignes
- Le nombre d'index secondaires
- Le nombre de clés étrangères
- Nombre de flux de modifications
Emplacement des données : les données sont transférées entre Spanner et 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'une grande quantité de données doit être importée.
Charge existante sur Spanner : un job 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 pour l'instance est supérieure à 65 %, le job s'exécute plus lentement.
Régler les nœuds de calcul pour obtenir de bonnes performances d'importation
Lors du démarrage d'un job d'importation Spanner, les nœuds de calcul Dataflow doivent être définis sur une valeur optimale pour garantir de bonnes performances. Un nombre trop élevé de nœuds de calcul surcharge Spanner, tandis qu'un nombre insuffisant de nœuds de calcul entraîne des performances d'importation insuffisantes.
Le nombre maximal de nœuds de calcul dépend fortement de la taille des données, mais idéalement, l'utilisation totale du processeur Spanner doit être comprise entre 70 % et 90 %. Cela offre un bon équilibre entre l'efficacité de Spanner et l'exécution sans erreur des jobs.
Pour atteindre cette cible d'utilisation dans la majorité des schémas et des scénarios, nous vous recommandons de définir un nombre maximal de vCPU de nœuds de calcul compris entre quatre et six fois le nombre de nœuds Spanner.
Par exemple, pour une instance Spanner à 10 nœuds, en utilisant des nœuds de calcul n1-standard-2, vous devez définir le nombre maximal de nœuds de calcul sur 25, ce qui donne 50 processeurs virtuels.