Migrieren Sie Daten aus einer CSV-Datei in Drupal 8/9 - OSTraining
Veröffentlicht: 2022-06-29Der 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:
- Jeder der Schritte wird durch Drupal-Plugins ausgeführt.
- 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.
- Sie dürfen so viele Plugins wie nötig verwenden, um die Daten so zu modellieren, dass sie dem von Drupal erwarteten Format entsprechen.
- 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:
- Erstellen Sie ein Verzeichnis namens
csv
im öffentlichen Ordner Ihrer Drupal-Installation. - Legen Sie eine Kopie der CSV-Datei in diesem Verzeichnis ab.
- 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!