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

Publicat: 2022-02-16

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 denumirea de proces ETL (Extract - Transform - Load), în care datele sunt preluate de la o sursă în primul pas, transformate în al doilea pas ș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!

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

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: compozitorul necesită 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

  • Tastați următoarele pentru a face fișierul executabil: chmod +x drush.phar
  • Tastați următoarele pentru a muta fișierul .phar în $PATH și rulați Drush ca o comandă globală: sudo mv drush.phar /usr/local/bin/ drush

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


Migrați datele dintr-un fișier CSV în Drupal 8/9 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

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


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 de exemplu Extras) ș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.
  • 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,

  • Tip :

drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->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.

Observație: pluginul csv este acolo, deoarece am activat deja modulul Migrate Source CSV. Pentru a vedea o listă cu toate pluginurile de proces, tastați: 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, tastați: drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

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()));"


Observație: pluginul csv este acolo, deoarece am activat deja modulul Migrate Source CSV. Pentru a vedea o listă cu toate pluginurile de proces, tastați: 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, tastați: 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.

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

Câmpul de titlu 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 id-urilor oferă identificatorul unic pentru fiecare înregistrare din fișierul CSV, în acest caz, coloana id , care este de tipul întreg . Nu uitați de paranteze, deoarece modulul așteaptă o matrice aici.

delimitatorul și anexarea 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 „'”.

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

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

Câmpul field_editor va fi rezultatul efectuării concatenării a 2 șiruri (valorile din interiorul coloanelor editor și edition_number ).
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.

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 > Element unic
  • Selectați Migrare din meniul drop-down
  • Lipiți codul din fișierul .yml în zona de text
  • Faceți clic pe Import

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

  • 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


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

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

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

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!