Migrieren Sie Daten aus einer CSV-Datei in Drupal 8/9 - OSTraining

Veröffentlicht: 2022-06-29

Der Prozess der Migration von Daten aus einer CSV-Datei in eine Drupal-Datenbank kann über die integrierte Migrate-API von Drupal und drei zusätzliche benutzerdefinierte Module (Migrate Source CSV, Migrate Plus und Migrate Tools) durchgeführt werden.

Dies ist als ETL-Prozess (Extract – Transform – Load) bekannt, bei dem Daten im ersten Schritt aus einer Quelle geholt, im zweiten Schritt transformiert und schließlich im dritten Schritt an ihr Ziel in der Drupal-Datenbank geladen werden.

Dieses Tutorial erklärt die Erstellung von 12 Buchknoten für eine Bibliotheksdatenbank. Lesen Sie weiter, um zu erfahren, wie!

Schritt Nr. 1 – Installieren Sie Drush und die erforderlichen Module

Um Migrationen in Drupal durchzuführen, benötigen wir Drush. Drush ist kein Drupal-Modul, sondern eine Befehlszeilenschnittstelle zum Ausführen von Drupal-Befehlen. Um die neueste Version von Drush zu installieren,

  • Öffnen Sie die Terminalanwendung Ihres Systems
  • Platzieren Sie den Cursor außerhalb des Verzeichnisses /web .
  • Typ: composer require drush/drush

Dadurch wird Drush im Verzeichnis vendor/bin/drush Ihrer Drupal-Installation installiert. Es ist jedoch umständlich, jedes Mal, wenn Sie einen Drush-Befehl ausführen möchten, vendor/bin/drush anstelle von drush einzugeben.

Drush Launcher ermöglicht es, die spezifische Drush-Version jeder Drupal-Installation auf Projektbasis auszuführen.

Warum ist das sinnvoll?

Jedes Projekt hat unterschiedliche Anforderungen, spezifische Drush-Versionen helfen, Abhängigkeitsprobleme zu vermeiden. Einige Contrib-Module funktionieren möglicherweise nicht richtig mit der neuesten Version von Drush.

Die spezifischen Anweisungen für OSX- und Windows-Systeme finden Sie hier: https://github.com/drush-ops/drush-launcher#installation—phar

Für ein Linux-System:

  • Geben Sie Folgendes ein, um die Datei namens drush.phar von GitHub herunterzuladen:
 wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

Dadurch wird die Datei mit dem Namen drush.phar von GitHub heruntergeladen.

  • Geben Sie Folgendes ein, um die Datei ausführbar zu machen: chmod +x drush.phar
  • Geben Sie Folgendes ein: sudo mv drush.phar sudo mv drush.phar /usr/local/bin/ drush

Dadurch wird die .phar -Datei in Ihren $PATH verschoben und Drush als globaler Befehl ausgeführt.

Es ist jetzt an der Zeit, die erforderlichen beigetragenen Module zu installieren, um die Migration durchzuführen.

  • Geben Sie Folgendes ein:
 composer require drupal/migrate_tools composer require drupal/migrate_source_csv

Sobald Composer das Herunterladen der Module abgeschlossen hat,

  • Öffnen Sie das Drupal-Backend in Ihrem Browser
  • Klicken Sie auf Erweitern
  • Aktivieren Sie Migrate , Migrate Plus , Migrate Tools und Migrate Source CSV
  • Klicken Sie auf Installieren

Schritt Nr. 2 – Mehr über den ETL-Prozess

Der Prozess des Extrahierens, Transformierens und Ladens von Daten kann erreicht werden, indem die Migration in einer .yml-Datei definiert und dann mit einem Drush-Befehl ausgeführt wird, damit die Drupal-Datenbank korrekt gefüllt werden kann.

Es gibt einige wichtige Fakten zu beachten:

  1. Jeder der Schritte wird durch Drupal-Plugins ausgeführt.
  2. Sie dürfen nur ein Plugin im ersten Schritt (Quelldefinition, dh Extrahieren) und ein Plugin im letzten Schritt (Zieldefinition, dh Laden) des Prozesses verwenden.
    • Mit anderen Worten, Sie dürfen Daten nur aus einer Quelle (CSV-Datei, JSON-Feed usw.) abrufen und sie in Drupal nur unter einem bestimmten Entitätsbündel speichern, z. B. Artikel, Seite, einem benutzerdefinierten Inhaltstyp, einem Benutzer oder einem auch Konfigurationsentität.
  3. Sie dürfen so viele Plugins wie nötig verwenden, um die Daten so zu modellieren, dass sie dem von Drupal erwarteten Format entsprechen.
  4. Drupal hat standardmäßig eine Liste von Quell-/Prozess-/Ziel-Plugins, die in der Definitionsdatei verwendet werden können.

Um eine Liste aller Quell-Plug-ins anzuzeigen,

  • Öffnen Sie Ihr Terminalfenster
  • Typ :
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Hinweis : Das CSV-Plug-in ist vorhanden, weil wir das Migrate Source CSV-Modul bereits aktiviert haben.

Um eine Liste aller Prozess-Plugins anzuzeigen,

  • Geben Sie Folgendes ein:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Diese Liste ist etwas länger, denken Sie daran, dass Sie im Prozessschritt so viele Plugins verwenden können, wie Sie benötigen.

Um eine Liste aller Ziel-Plugins anzuzeigen,

  • Geben Sie Folgendes ein:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


Schritt Nr. 3 – Erstellen Sie den Inhaltstyp

  • Klicken Sie auf Struktur > Inhaltstypen > Inhaltstyp hinzufügen
  • Erstellen Sie den Inhaltstyp „Buch“.
  • Klicken Sie auf Felder speichern und verwalten
  • Verwenden Sie die Titelzeile der CSV-Datei, um die Felder zu erstellen

Ich werde die Werte der Spalten edition_number und editor verketten, daher benötige ich für diesen Zweck nur ein Feld in der Datenbank.

Hinweis: Die Feldnamen (Maschinennamen) müssen nicht exakt mit den Spaltennamen der CSV-Datei übereinstimmen, dennoch ist es sinnvoll, sie zumindest mit ähnlichen Wörtern zu verknüpfen – das erleichtert die Feldzuordnung im Prozessschritt.

Das title ist für jeden Drupal-Knoten obligatorisch, daher muss kein Titelfeld erstellt werden. Sie können das Textfeld unverändert lassen oder es löschen, es hängt davon ab, was Sie mit Ihrem speziellen Inhaltstyp vorhaben.


Schritt Nr. 4 – Die Migrationsdefinitionsdatei

Quellschritt

  • Öffnen Sie Ihren bevorzugten Code-Editor
  • Geben Sie Folgendes ein:
 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: "'"

Die ID der Datei stimmt mit ihrem Namen überein.

Wir verwenden das csv -Plugin des Contrib-Moduls Migrate Source CSV im Source-Bereich.

Die Zahl 1 bei der Option header_row_count gibt den Wert der Spaltentitel an (sie werden alle in der ersten Zeile platziert).

Die ids -Definition stellt die eindeutige Kennung für jeden Datensatz in der CSV-Datei bereit, in diesem Fall die id -Spalte, die vom Typ integer ist. Vergessen Sie die Klammern nicht, da das Modul hier ein Array erwartet.

delimiter und enclosure beziehen sich auf die Struktur der CSV-Datei, in meinem speziellen Fall wird sie durch „;“ getrennt. Zeichen, während Zeichenfolgen in einfache Anführungszeichen „'“ gesetzt werden.

Beachten Sie auch die Definition eines Pfades. Dort müssen Sie die CSV-Datei ablegen, damit Drupal die Daten daraus lesen kann.

  • Öffnen Sie Ihre Terminalanwendung.
  • Typ :
 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/

Dieser Wille:

  1. Erstellen Sie ein Verzeichnis namens csv im öffentlichen Ordner Ihrer Drupal-Installation.
  2. Legen Sie eine Kopie der CSV-Datei in diesem Verzeichnis ab.
  3. Machen Sie die Datei für alle im System zugänglich (einschließlich des Quell-Plugins).

Prozessstufe

Hier ordnen wir jede der Spalten der CSV-Datei den Feldern im Inhaltstyp zu:

 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

Die ersten 5 Schlüssel/Wert-Paare in der Form drupal_machine_name: csv_column_name ordnen die CSV-Einträge den Datenbankfeldern zu, ohne Änderungen vorzunehmen.

Das Feld field_editor ist das Ergebnis der Verkettung von 2 Strings (die Werte in den Spalten editor und edition_number ).

Die Option delimiter ermöglicht es, zwischen den beiden Strings ein Trennzeichen zu setzen, in diesem Fall ein Leerzeichen.

Das Plugin default_value hilft uns, einen Entitätstyp zu definieren, da diese Informationen in den Quelldaten nicht verfügbar sind.

Zielschritt

Der letzte Teil dieses Prozesses ist der Zielschritt.

 destination: plugin: entity:node

Wir migrieren Inhalte und jeder Datensatz wird ein Knoten sein.


Schritt Nr. 5 – Führen Sie die Migration durch

  • Klicken Sie auf Konfiguration > Konfigurationssynchronisierung > Importieren > Einzelnes Element
  • Wählen Sie Migration aus der Dropdown-Liste aus
  • Fügen Sie den Code aus der .yml - Datei in das Textfeld ein
  • Klicken Sie auf Importieren
  • Klicken Sie auf Bestätigen, um die Konfiguration zu synchronisieren. Sie erhalten die Meldung „Die Konfiguration wurde erfolgreich importiert“
  • Wechseln Sie in die Terminalanwendung.
  • Geben Sie Folgendes ein:
 drush migrate:import my_first_migration

Sie können jetzt den Inhalt Ihrer Website überprüfen.

Sie haben die Grundprinzipien der Migration von Daten aus einer CSV-Datei nach Drupal 8/9 erlernt.

Wie Sie bereits gesehen haben, erfordert der Migrationsprozess Aufmerksamkeit für die Details. Stellen Sie also sicher, dass Sie zuerst auf einem Staging-Server arbeiten, da ein kleiner Fehler die gesamte Site beschädigen kann. Ich hoffe, Ihnen hat dieses Tutorial gefallen.

Danke fürs Lesen!