Migrați datele dintr-un fișier CSV în Drupal 8/9 - OSTraining

Publicat: 2022-06-29

Procesul de migrare a datelor într-o bază de date Drupal dintr-un fișier CSV poate fi îndeplinit prin intermediul API-ului Migrate integrat al Drupal și a trei module personalizate suplimentare (Migrate Source CSV, Migrate Plus și Migrate Tools).

Acesta este cunoscut sub numele de proces ETL (Extract – Transform – Load), în care datele sunt preluate de la o sursă în primul pas, transformate în a doua etapă și în cele din urmă încărcate la destinație în baza de date Drupal în al treilea pas.

Acest tutorial va explica crearea a 12 noduri de carte pentru o bază de date de bibliotecă. Continuați să citiți pentru a afla cum!

Pasul # 1 - Instalați Drush și modulele necesare

Pentru a executa migrarea în Drupal, avem nevoie de Drush. Drush nu este un modul Drupal, ci o interfață de linie de comandă pentru a executa comenzi Drupal. Pentru a instala cea mai recentă versiune de Drush,

  • Deschideți aplicația terminală a sistemului dvs
  • Plasați cursorul în afara directorului /web .
  • Tip: composer require drush/drush

Aceasta va instala Drush în directorul vendor/bin/drush al instalării Drupal. Cu toate acestea, este greoi să tastați vendor/bin/drush în loc de drush , de fiecare dată când doriți să executați o comandă drush.

Lansatorul Drush face posibilă executarea versiunii specifice Drush a fiecărei instalări Drupal pe bază de proiect.

De ce are sens asta?

Fiecare proiect are cerințe diferite, versiunile specifice Drush ajută la evitarea problemelor de dependență. Este posibil ca unele module contrib să nu funcționeze corect cu cea mai recentă versiune de Drush.

Instrucțiunile specifice pentru sistemele OSX și Windows pot fi găsite aici: https://github.com/drush-ops/drush-launcher#installation—phar

Pentru un sistem Linux:

  • Introduceți următoarele pentru a descărca fișierul numit drush.phar de pe GitHub:
 wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

Aceasta descarcă fișierul numit drush.phar din GitHub.

  • Tastați următoarele pentru a face fișierul executabil: chmod +x drush.phar
  • Tip : sudo mv drush.phar /usr/local/bin/ drush

Aceasta va muta fișierul .phar în $PATH și va rula Drush ca o comandă globală.

Acum este timpul să instalați modulele necesare pentru a efectua migrarea.

  • Introduceți următoarele:
 composer require drupal/migrate_tools composer require drupal/migrate_source_csv

Odată ce Composer a terminat de descărcat modulele,

  • Deschideți backend-ul Drupal în browser
  • Faceți clic pe Extindere
  • Activați Migrate , Migrate Plus , Migrate Tools și Migrate Source CSV
  • Faceți clic pe Instalare

Pasul # 2 – Mai multe despre procesul ETL

Procesul de extragere, transformare și încărcare a datelor poate fi realizat prin definirea migrării într-un fișier .yml și apoi executarea acesteia cu o comandă Drush, astfel încât baza de date Drupal să poată fi populată corect.

Există câteva fapte importante de observat:

  1. Fiecare dintre pași este efectuat prin intermediul pluginurilor Drupal.
  2. Aveți voie să utilizați doar un plugin în primul pas (definiția sursei, adică Extract) și un plugin în ultimul pas (definiția destinației, adică Încărcarea) al procesului.
    • Cu alte cuvinte, puteți prelua date doar dintr-o singură sursă (fișier CSV, feed JSON etc.) și să le stocați în Drupal numai sub un anumit pachet de entitate, de exemplu, articol, pagină, un tip de conținut personalizat, un utilizator sau un entitate de configurare, de asemenea.
  3. Aveți voie să utilizați cât mai multe plugin-uri necesare pentru a modela datele astfel încât să se potrivească cu formatul așteptat de Drupal.
  4. Drupal are implicit o listă de pluginuri sursă/proces/destinație care pot fi utilizate în fișierul de definiție.

Pentru a vedea o listă cu toate pluginurile sursă,

  • Deschideți fereastra terminalului
  • Tip :
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Observație : pluginul csv este acolo, deoarece am activat deja modulul Migrate Source CSV.

Pentru a vedea o listă cu toate pluginurile de proces,

  • Introduceți următoarele:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Această listă este puțin mai lungă, amintiți-vă că puteți utiliza atâtea pluginuri cât aveți nevoie în pasul procesului.

Pentru a vedea o listă cu toate pluginurile de destinație,

  • Introduceți următoarele:
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


Pasul # 3 - Creați tipul de conținut

  • Faceți clic pe Structură > Tipuri de conținut > Adăugați tip de conținut
  • Creați tipul de conținut „Carte”.
  • Faceți clic pe Salvați și gestionați câmpurile
  • Utilizați rândul de titlu al fișierului CSV pentru a crea câmpurile

Am de gând să concatenez valorile coloanelor edition_number și editor, așa că am nevoie de un singur câmp în baza de date în acest scop.

Observație: numele câmpurilor (numele mașinilor) nu trebuie să se potrivească exact cu numele coloanelor din fișierul CSV, dar are sens, cel puțin să le relaționăm cu cuvinte similare - asta ușurează maparea câmpului în pasul procesului.

Câmpul de title este obligatoriu pentru fiecare nod Drupal, deci nu este nevoie să creați un câmp de titlu. Puteți lăsa câmpul corporal neatins sau îl puteți șterge, depinde de ce intenționați să faceți cu tipul dvs. de conținut.


Pasul # 4 – Fișierul de definire a migrației

Pasul sursă

  • Deschideți editorul de cod preferat
  • Introduceți următoarele:
 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: "'"

Id-ul fișierului se potrivește cu numele acestuia.

Folosim pluginul csv al modulului contrib Migrate Source CSV în secțiunea sursă.

Numărul 1 la opțiunea header_row_count indică valoarea titlurilor coloanei (toate sunt plasate pe primul rând).

Definiția ids oferă identificatorul unic pentru fiecare înregistrare din fișierul CSV, în acest caz, coloana id , care este de tipul integer . Nu uitați de paranteze, deoarece modulul așteaptă o matrice aici.

delimiter și enclosure se referă la structura fișierului CSV, în cazul meu particular, acesta este delimitat de „;” caractere, în timp ce șirurile sunt cuprinse între ghilimele simple „'”.

Observați, de asemenea, definiția unei căi. Acolo trebuie să plasați fișierul CSV, astfel încât Drupal va putea citi datele din acesta.

  • Deschideți aplicația pentru terminal.
  • Tip :
 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/

Asta va:

  1. creați un director numit csv în folderul public al instalării Drupal.
  2. plasați o copie a fișierului CSV în acel director.
  3. faceți fișierul accesibil tuturor din sistem (care include pluginul sursă).

Pasul procesului

Aici mapăm fiecare dintre coloanele fișierului CSV cu câmpurile din tipul de conținut:

 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

Primele 5 perechi cheie/valoare sub forma drupal_machine_name: csv_column_name mapează înregistrările CSV la câmpurile bazei de date fără a efectua modificări.

Câmpul field_editor va fi rezultatul efectuării concatenării a 2 șiruri (valorile din interiorul coloanelor editor și edition_number ).

Opțiunea delimitare face posibilă setarea unui delimitator între ambele șiruri, în acest caz, un spațiu liber.

Pluginul default_value ne ajută să definim un tip de entitate, deoarece aceste informații nu sunt disponibile în datele sursă.

Pasul de destinație

Partea finală a acestui proces este etapa de destinație.

 destination: plugin: entity:node

Migrem conținut și fiecare înregistrare va fi un nod.


Pasul # 5 - Executați migrarea

  • Faceți clic pe Configurare > Sincronizare configurație > Import > Un singur articol
  • Selectați Migrare din meniul drop-down
  • Lipiți codul din fișierul .yml în zona de text
  • Faceți clic pe Import
  • Faceți clic pe Confirmare pentru a sincroniza configurația. Veți primi mesajul „Configurația a fost importată cu succes”
  • Treceți la aplicația terminal.
  • Introduceți următoarele:
 drush migrate:import my_first_migration

Acum puteți verifica conținutul de pe site-ul dvs.

Ați învățat principiile de bază ale migrării datelor dintr-un fișier CSV la Drupal 8/9.

După cum ați văzut deja, procesul de migrare necesită atenție la detalii, așa că asigurați-vă că lucrați mai întâi pe un server de staging, deoarece o mică greșeală ar putea distruge întregul site. Sper că v-a plăcut acest tutorial.

Multumesc pentru lectura!