Migra i dati da un file CSV in Drupal 8/9 - OTraining
Pubblicato: 2022-06-29Il processo di migrazione dei dati in un database Drupal da un file CSV può essere eseguito tramite l'API di migrazione integrata di Drupal e tre moduli aggiuntivi personalizzati (Migrate Source CSV, Migrate Plus e Migrate Tools).
Questo è noto come processo ETL (Extract – Transform – Load), in cui i dati vengono recuperati da un'origine nel primo passaggio, trasformati nel secondo passaggio e infine caricati a destinazione sul database Drupal nel terzo passaggio.
Questo tutorial spiegherà la creazione di 12 nodi di libri per un database di biblioteche. Continua a leggere per sapere come!

Passaggio n. 1: installare Drush e i moduli richiesti
Per eseguire le migrazioni in Drupal, abbiamo bisogno di Drush. Drush non è un modulo Drupal, ma un'interfaccia a riga di comando per eseguire i comandi Drupal. Per installare l'ultima versione di Drush,
- Apri l'applicazione terminale del tuo sistema
- Posizionare il cursore all'esterno della directory
/web
. - Tipo:
composer require drush/drush
Questo installerà Drush all'interno della directory vendor/bin/drush
della tua installazione di Drupal. Tuttavia, è complicato digitare vendor/bin/drush
invece di drush
, ogni volta che si desidera eseguire un comando drush.
Drush Launcher consente di eseguire la versione Drush specifica di ciascuna installazione di Drupal in base al progetto.
Perché questo ha senso?
Ogni progetto ha requisiti diversi, versioni specifiche di Drush aiutano a evitare problemi di dipendenza. Alcuni moduli contrib potrebbero non funzionare correttamente con l'ultima versione di Drush.
Le istruzioni specifiche per i sistemi OSX e Windows sono disponibili qui: https://github.com/drush-ops/drush-launcher#installation—phar
Per un sistema Linux:
- Digita quanto segue per scaricare il file denominato drush.phar da GitHub:
wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
Questo scarica il file denominato drush.phar
da GitHub.

- Digitare quanto segue per rendere eseguibile il file:
chmod +x drush.phar
- Digitare :
sudo mv drush.phar /usr/local/bin/ drush
Ciò sposterà il file .phar nel tuo $PATH ed eseguirà Drush come comando globale.
È giunto il momento di installare i moduli forniti necessari per eseguire la migrazione.
- Digita quanto segue:
composer require drupal/migrate_tools composer require drupal/migrate_source_csv
Una volta che Composer ha finito di scaricare i moduli,
- Apri il backend Drupal nel tuo browser
- Fare clic su Estendi
- Abilita Migrate , Migrate Plus , Migrate Tools e Migrate Source CSV
- Fare clic su Installa

Passaggio n. 2: ulteriori informazioni sul processo ETL
Il processo di estrazione, trasformazione e caricamento dei dati può essere ottenuto definendo la migrazione in un file .yml e quindi eseguendola con un comando Drush, in modo che il database Drupal possa essere popolato correttamente.
Ci sono alcuni fatti importanti da notare:
- Ciascuno dei passaggi viene eseguito tramite i plugin Drupal.
- È consentito utilizzare solo un plug-in nel primo passaggio (definizione della sorgente, ovvero Estrai) e un plug-in nell'ultimo passaggio (definizione della destinazione, ovvero Carica) del processo.
- In altre parole, puoi recuperare i dati solo da un'origine (file CSV, feed JSON, ecc.) e archiviarli in Drupal solo sotto un particolare bundle di entità, ad esempio un articolo, una pagina, un tipo di contenuto personalizzato, un utente o un anche l'entità di configurazione.
- È consentito utilizzare tutti i plug-in necessari per modellare i dati in modo che corrispondano al formato previsto da Drupal.
- Drupal ha per impostazione predefinita un elenco di plugin di origine/processo/destinazione che possono essere utilizzati all'interno del file di definizione.
Per visualizzare un elenco di tutti i plugin di origine,
- Apri la finestra del tuo terminale
- Tipo :
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

Avviso : il plugin csv è presente perché abbiamo già abilitato il modulo Migrate Source CSV.
Per visualizzare un elenco di tutti i plug-in di processo,
- Digita quanto segue:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"
L'elenco è un po' più lungo, ricorda che puoi utilizzare tutti i plugin di cui hai bisogno nella fase del processo.

Per visualizzare un elenco di tutti i plugin di destinazione,
- Digita quanto segue:
drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"

Passaggio n. 3: crea il tipo di contenuto
- Fare clic su Struttura > Tipi di contenuto > Aggiungi tipo di contenuto
- Crea il tipo di contenuto "Libro".
- Fare clic su Salva e gestisci campi
- Utilizza la riga del titolo del file CSV per creare i campi
Concatenerò i valori delle colonne edition_number ed editor, quindi a questo scopo ho bisogno di un solo campo nel database.

Nota: i nomi dei campi (nomi delle macchine) non devono corrispondere esattamente ai nomi delle colonne del file CSV, tuttavia ha senso, perlomeno metterli in relazione con parole simili, il che semplifica la mappatura dei campi nella fase del processo.

Il campo del title
è obbligatorio per ogni nodo Drupal, quindi non è necessario creare un campo del titolo. Puoi lasciare intatto il campo del corpo o eliminarlo, dipende da cosa intendi fare con il tuo particolare tipo di contenuto.
Passaggio n. 4: il file di definizione della migrazione
Passaggio di origine
- Apri il tuo editor di codice preferito
- Digita quanto segue:
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: "'"
L'ID del file corrisponde al suo nome.
Stiamo usando il plugin csv
del modulo contrib Migrate Source CSV nella sezione source.
Il numero 1 nell'opzione header_row_count
indica il valore dei titoli delle colonne (sono tutti posizionati sulla prima riga).
La definizione ids
fornisce l'identificatore univoco per ogni record nel file CSV, in questo caso la colonna id
, che è di tipo integer
. Non dimenticare le parentesi, poiché il modulo si aspetta un array qui.
delimiter
e enclosure
si riferiscono alla struttura del file CSV, nel mio caso particolare è delimitato da “;” caratteri, mentre le stringhe sono racchiuse tra “'“ virgolette singole.

Notare anche la definizione di un percorso. È lì che devi posizionare il file CSV, quindi Drupal sarà in grado di leggere i dati da esso.
- Apri la tua applicazione terminale.
- Tipo :
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/
Questo sarà:
- crea una directory chiamata
csv
all'interno della cartella pubblica della tua installazione di Drupal. - inserire una copia del file CSV all'interno di quella directory.
- rendere il file accessibile a tutti nel sistema (che include il plug-in di origine).
Fase di processo
Qui è dove mappiamo ciascuna delle colonne del file CSV con i campi nel tipo di contenuto:
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
Le prime 5 coppie chiave/valore nella forma drupal_machine_name: csv_column_name associano i record CSV ai campi del database senza eseguire alcuna modifica.
Il campo field_editor sarà il risultato dell'esecuzione della concatenazione di 2 stringhe (i valori all'interno delle colonne editor e edition_number ).
L'opzione delimitatore consente di impostare un delimitatore tra le due stringhe, in questo caso uno spazio vuoto.
Il plugin default_value ci aiuta a definire un tipo di entità poiché queste informazioni non sono disponibili nei dati di origine.
Passaggio di destinazione
La parte finale di questo processo è il passaggio di destinazione.
destination: plugin: entity:node
Stiamo migrando il contenuto e ogni record sarà un nodo.
Passaggio n. 5: eseguire la migrazione
- Fare clic su Configurazione > Sincronizzazione configurazione > Importa > Elemento singolo
- Seleziona Migrazione dal menu a discesa
- Incolla il codice dal file .yml nell'area di testo
- Fare clic su Importa

- Fare clic su Conferma per sincronizzare la configurazione. Verrà visualizzato il messaggio "La configurazione è stata importata con successo"
- Passare all'applicazione terminale.
- Digita quanto segue:
drush migrate:import my_first_migration

Ora puoi controllare il contenuto del tuo sito.

Hai appreso i principi di base della migrazione dei dati da un file CSV a Drupal 8/9.
Come hai già visto, il processo di migrazione richiede attenzione ai dettagli, quindi assicurati di lavorare prima su un server di staging perché un piccolo errore potrebbe rompere l'intero sito. Spero che questo tutorial ti sia piaciuto.
Grazie per aver letto!