Fermer

avril 9, 2023

Migration de données Drupal avec l’API Migrate

Migration de données Drupal avec l’API Migrate


L’API Migrate fournit des services pour migrer des données d’un système source vers Drupal 9.

La migration est un processus Extract, Transform, Load (ETL). Dans l’API Drupal Migrate :

  • La phase d’extraction est appelée la source
  • La phase de transformation est appelée le processus
  • La phase de charge est appelée la destination

Il est essentiel de réaliser que, bien que dans un contexte Drupal typique, le terme « charger » se réfère au chargement de données à partir du stockage, dans ETL, le terme « charger » fait référence à la mise de données dans le magasin.
Un ensemble de données, appelé ligne, est extrait de la source de données pendant la phase source. Les informations peuvent être récupérées à partir d’un service Web, chargées à partir d’un fichier (tel que CSV, JSON ou XML) ou déplacées à partir d’une base de données (par exemple, RSS ou REST). La ligne est transmise à l’étape de traitement, où elle est soit modifiée si nécessaire, soit marquée pour être ignorée. La ligne modifiée est transférée à la phase de destination après le traitement, où elle est chargée (enregistrée) dans le site Drupal prévu.

Nous allons commencer par un exemple de base, en créant des nœuds à l’aide de l’API de migration pour le type de contenu d’article. Dans le prochain blog, je montrerai comment migrer des données depuis CSV déposer.

  • L’exemple ci-dessous suppose que le type de contenu Article a un champ field_image qui accepte les fichiers PNG.
  • Cet exemple montre comment définir le répertoire de destination où les fichiers image seront téléchargés.
  • L’exemple utilise le plug-in de source embedded_data pour plus de simplicité.

Ecriture du fichier de définition de la migration

Tout d’abord, créez un module personnalisé appelé migration_example

fichier migration_example.info.yml

Les modules répertoriés dans les dépendances doivent être installés en premier. Le module Core migrate et les modules Contrib migrate_plus, migrate_file, migrate_tools.

Maintenant, notre article_migration.yml ira dans le dossier migrations

Code

Ce fichier comporte trois parties principales source, processus et destination.

La clé ‘id’ il est recommandé d’avoir le même nom que le nom du fichier. Cette clé sert d’identifiant interne que Drupal et l’API Migrate ont utilisé pour exécuter et suivre la migration. ‘label’ doit être une chaîne lisible par l’homme utilisée pour nommer la migration dans diverses interfaces.

Dans le source, nous avons la valeur `id` qui devrait être des caractères alphanumériques. Pour garder l’exemple simple, nous utilisons le plugin embedded_data. Il vous permet de définir les données à migrer directement dans le fichier de définition. Pour le configurer, vous définissez une clé `data_rows` dont la valeur est un tableau de tous les éléments que vous souhaitez migrer.

Pour la clé ‘constantes

Vous écrivez une clé `constants` dont la valeur est une liste de paires nom-valeur. Même s’ils sont définis dans le source section, ils sont indépendants du plugin source particulier utilisé. Vous pouvez définir autant de constantes que nécessaire. La valeur peut être définie sur tout ce que vous devez utiliser ultérieurement.

Vous affectez des colonnes source aux champs de nœud et aux propriétés dans le processus section. Les noms des propriétés d’entité ou les noms de machine du champ servent de clés. Dans ce cas, nous définissons des valeurs pour les champs « body » et « title » du nœud. La page de configuration du type de contenu, située dans « /admin/structure/types/manage/page/fields », répertorie les noms des machines de champ. Les valeurs peuvent être copiées directement depuis la source lors de la migration ou modifiées à l’aide de plugins de processus. Dans cette illustration, les valeurs sont copiées exactement de la source vers la destination. Il n’est pas nécessaire que la propriété de destination ou le nom du champ corresponde aux noms des colonnes dans la source.

Pour migration d’imagele plugin source fournit une URL complète(clé de fichier) pour le fichier à télécharger mais la valeur peut aussi être /path/to/foo.png ou public: si le fichier est déjà présent dans votre système de fichiers.

Le image_import Le plugin process étend le plugin file_import. En plus des clés de configuration héritées du plug-in de processus file_import, image_import possède les clés de configuration facultatives supplémentaires suivantes.

  • Autre : L’attribut alt de l’image.
  • Titre: L’attribut de titre de l’image.
  • Largeur: La largeur de l’image.
  • Hauteur: La hauteur de l’image.

Nous utilisons le plugin ‘entity:node’ pour la destination, vous permettant de construire n’importe quel nœud de type de contenu. La clé ‘default bundle’ indique que tous les nœuds nouvellement produits seront par défaut de type ‘Article’. Il est important de se rappeler que le nom de machine du type de contenu est la valeur de la clé ‘default bundle’. Il est accessible à « /admin/structure/types/manage/article ».

Les noms de machine sont généralement utilisés pour les valeurs dans l’API Migrate. Nous soulignerons quand et où trouver les bons pendant que nous examinons le système.

La structure finale du dossier sera

Custom -> migration_example ->

migration_example.info.yml

migrations->article_migration.yml

YAML est un format clé-valeur qui permet l’imbrication facultative d’éléments. Il est extrêmement sensible à l’indentation et aux espaces blancs. Par exemple, le signe deux-points (:) qui sépare la clé de la valeur doit être suivi d’au moins un espace. De plus, notez les deux espaces précis utilisés pour indenter chaque niveau de la hiérarchie. Un espace de fichier ou une indentation YAML incorrect est une cause typique de problèmes lors de l’écriture de migrations.

Exécution de la migration

Utilisons Drush pour exécuter les migrations avec les commandes fournies par Migrate Run.

drush mim article_migration or drush migrate:import article_migration

si la commande est exécutée avec succès, vous devriez la voir dans le terminal. Avec cela, la migration est terminée avec succès.

[notice] Traitement de 3 éléments (3 créés, 0 mis à jour, 0 échoué, 0 ignoré) – fait avec ‘article_migration’

TROUVÉ CELA UTILE ? PARTAGEZ-LE




Source link