Migrer des données à partir d'un fichier CSV dans Drupal 8/9 - OSTraining
Publié: 2022-06-29Le processus de migration des données vers une base de données Drupal à partir d'un fichier CSV peut être effectué via l'API Migrate intégrée de Drupal et trois modules personnalisés supplémentaires (Migrate Source CSV, Migrate Plus et Migrate Tools).
C'est ce qu'on appelle le processus ETL (Extraire - Transformer - Charger), dans lequel les données sont extraites d'une source dans la première étape, transformées dans la deuxième étape, et enfin chargées vers leur destination sur la base de données Drupal dans la troisième étape.
Ce didacticiel explique la création de 12 nœuds de livre pour une base de données de bibliothèque. Continuez à lire pour savoir comment!
Étape # 1 - Installer Drush et les modules requis
Pour exécuter des migrations dans Drupal, nous avons besoin de Drush. Drush n'est pas un module Drupal, mais une interface de ligne de commande pour exécuter des commandes Drupal. Pour installer la dernière version de Drush,
- Ouvrez l'application terminal de votre système
- Placez le curseur en dehors du répertoire
/web
. - Type :
composer require drush/drush
Cela installera Drush dans le répertoire vendor/bin/drush
de votre installation Drupal. Cependant, il est fastidieux de taper vendor/bin/drush
au lieu de drush
, chaque fois que vous souhaitez exécuter une commande drush.
Le lanceur Drush permet d'exécuter la version Drush spécifique de chaque installation Drupal par projet.
Pourquoi cela a-t-il un sens ?
Chaque projet a des exigences différentes, des versions spécifiques de Drush permettent d'éviter les problèmes de dépendance. Certains modules contrib peuvent ne pas fonctionner correctement avec la dernière version de Drush.
Les instructions spécifiques pour les systèmes OSX et Windows peuvent être trouvées ici : https://github.com/drush-ops/drush-launcher#installation—phar
Pour un système Linux :
- Tapez ce qui suit pour télécharger le fichier nommé drush.phar depuis GitHub :
wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
Cela télécharge le fichier nommé drush.phar
depuis GitHub.
- Tapez ce qui suit pour rendre le fichier exécutable :
chmod +x drush.phar
- Tapez :
sudo mv drush.phar /usr/local/bin/ drush
Cela déplacera le fichier .phar vers votre $PATH et exécutera Drush en tant que commande globale.
Il est maintenant temps d'installer les modules contribués requis pour effectuer la migration.
- Tapez ce qui suit :
composer require drupal/migrate_tools composer require drupal/migrate_source_csv
Une fois que Composer a fini de télécharger les modules,
- Ouvrez le backend Drupal dans votre navigateur
- Cliquez sur Étendre
- Activer Migrate , Migrate Plus , Migrate Tools et Migrate Source CSV
- Cliquez sur Installer
Étape # 2 - En savoir plus sur le processus ETL
Le processus d'extraction, de transformation et de chargement des données peut être réalisé en définissant la migration dans un fichier .yml, puis en l'exécutant avec une commande Drush, afin que la base de données Drupal puisse être correctement remplie.
Il y a quelques faits importants à noter :
- Chacune des étapes est réalisée via des plugins Drupal.
- Vous n'êtes autorisé à utiliser qu'un seul plugin dans la première étape (définition de la source, c'est-à-dire extraire) et un plugin dans la dernière étape (définition de la destination, c'est-à-dire charger) du processus.
- En d'autres termes, vous ne pouvez récupérer des données qu'à partir d'une source (fichier CSV, flux JSON, etc.) et les stocker dans Drupal uniquement sous un groupe d'entités particulier, par exemple, Article, Page, un type de contenu personnalisé, un utilisateur ou un entité de configuration également.
- Vous êtes autorisé à utiliser autant de plugins que nécessaire pour modéliser les données afin qu'elles correspondent au format attendu par Drupal.
- Drupal a par défaut une liste de plugins source/processus/destination qui peuvent être utilisés dans le fichier de définition.
Pour voir une liste de tous les plugins sources,
- Ouvrez la fenêtre de votre terminal
- Tapez :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Remarque : le plugin csv est là car nous avons déjà activé le module Migrate Source CSV.
Pour voir une liste de tous les plugins de processus,
- Tapez ce qui suit :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
Cette liste est un peu plus longue, rappelez-vous que vous pouvez utiliser autant de plugins que nécessaire dans l'étape du processus.
Pour voir une liste de tous les plugins de destination,
- Tapez ce qui suit :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"
Étape # 3 - Créer le type de contenu
- Cliquez sur Structure > Types de contenu > Ajouter un type de contenu
- Créer le type de contenu "Livre"
- Cliquez sur Enregistrer et gérer les champs
- Utilisez la ligne de titre du fichier CSV pour créer les champs
Je vais concaténer les valeurs des colonnes edition_number et editor, donc je n'ai besoin que d'un seul champ dans la base de données à cette fin.
Remarque : les noms de champ (noms de machine) ne doivent pas correspondre exactement aux noms de colonne du fichier CSV, mais il est logique de les associer au moins à des mots similaires - cela facilite le mappage des champs dans l'étape du processus.
Le champ de title
est obligatoire pour chaque nœud Drupal, il n'est donc pas nécessaire de créer un champ de titre. Vous pouvez laisser le champ du corps intact ou vous pouvez le supprimer, cela dépend de ce que vous prévoyez de faire avec votre type de contenu particulier.
Étape # 4 - Le fichier de définition de migration
Étape source
- Ouvrez votre éditeur de code préféré
- Tapez ce qui suit :
id: my_first_migration label: Migrate terms from a CSV source source: plugin: csv path: public://csv/library.csv header_row_count: 1 ids: [id] delimiter: ';' enclosure: "'"
L'id du fichier correspond à son nom.
Nous utilisons le plugin csv
du module contrib Migrate Source CSV dans la section source.
Le chiffre 1 à l'option header_row_count
indique la valeur des titres de colonne (ils sont tous placés sur la première ligne).
La définition ids
fournit l'identifiant unique pour chaque enregistrement du fichier CSV, dans ce cas, la colonne id
, qui est de type integer
. N'oubliez pas les crochets, puisque le module attend un tableau ici.
delimiter
et pièce enclosure
font référence à la structure du fichier CSV, dans mon cas particulier, il est délimité par ";" caractères, alors que les chaînes sont entre guillemets simples "'".
Remarquez également la définition d'un chemin. C'est là que vous devez placer le fichier CSV, afin que Drupal puisse en lire les données.
- Ouvrez votre application terminale.
- Tapez :
mkdir web/sites/default/files/csv cp /home/ path/to /library.csv web/sites/default/files/csv/ chmod -R 777 web/sites/default/files/csv/
Cette volonté:
- créez un répertoire appelé
csv
dans le dossier public de votre installation Drupal. - placez une copie du fichier CSV dans ce répertoire.
- rendre le fichier accessible à tout le monde dans le système (y compris le plugin source).
Marche à suivre
C'est ici que nous mappons chacune des colonnes du fichier CSV avec les champs du type de contenu :
process: title: title field_id: id field_author: author field_location: location field_availability: availability field_editor: plugin: concat source: - editor - edition_number delimiter: ' ' type: plugin: default_value default_value: book
Les 5 premières paires clé/valeur sous la forme drupal_machine_name : csv_column_name mappent les enregistrements CSV aux champs de la base de données sans effectuer de modifications.
Le champ field_editor sera le résultat de la concaténation de 2 chaînes (les valeurs à l'intérieur des colonnes editor et edition_number ).
L'option délimiteur permet de définir un délimiteur entre les deux chaînes, dans ce cas, un espace vide.
Le plugin default_value nous aide à définir un type d'entité puisque cette information n'est pas disponible dans les données source.
Étape de destination
La dernière partie de ce processus est l'étape de destination.
destination: plugin: entity:node
Nous migrons du contenu et chaque enregistrement sera un nœud.
Étape # 5 - Exécuter la migration
- Cliquez sur Configuration > Synchronisation de la configuration > Importer > Élément unique
- Sélectionnez Migration dans le menu déroulant
- Collez le code du fichier .yml dans la zone de texte
- Cliquez sur Importer
- Cliquez sur Confirmer pour synchroniser la configuration. Vous obtiendrez le message "La configuration a été importée avec succès"
- Passez à l'application terminale.
- Tapez ce qui suit :
drush migrate:import my_first_migration
Vous pouvez maintenant vérifier le contenu de votre site.
Vous avez appris les principes de base de la migration de données d'un fichier CSV vers Drupal 8/9.
Comme vous l'avez déjà vu, le processus de migration nécessite une attention aux détails, alors assurez-vous que vous travaillez d'abord sur un serveur intermédiaire car une petite erreur pourrait casser tout le site. J'espère que ce tutoriel vous a plu.
Merci d'avoir lu!