Migrare dati a Drupal

 
Migrazione di dati

Nella realizzazione di portali o nella fase di migrazione da una piattaforma ad un altra spesso di riscontra la necessità di effettuare l'inserimento / trasferimento di dati. Fino a che le informazioni sono limitate è conveniente effettuare ua migrazione manuale, permettendo di trasferire le inforazioni in maniera pulita ed eventualmente procedendo ad effettuare tutte le modfiche di markup e struttura necessarie; ma cosa succede se le quantità di informazioni da trasferire sono in numero tale da non consentirci di procedere in maniera manuale?
Analizzeremo ora alcuni tool e tecniche che possono essere utilizzati per migrare grandi quantitativi di dati da una piattaforma X a Drupal, vedendo successivamente come estendere queste funzionalità per poter effettuare operazioni personalizzate sulla propria base dati.

Per effettuare la migrazione di informazioni ricorreremo all'utilizzo dei moduli:

La procedura: teoria

La procedura consiste nell'avere, all'interno dello schema del database dove si trova l'installazione di Drupal, le tabelle contenente i dati da importare. Questo implica che la base dati deve trovarsi all'interno della stessa tipologia di database (MySQL) o deve essere effettuata una prima fase di migrazione, dal database attuale, a MySQL.
Come primo step, quindi, dovremmo procedere a trasferire i dati a disposizione in una (o più) tabelle -eventualmente con campi contenenti le relazioni- all'interno dello stesso schema di Drupal.

Successivamente, tramite l'utilizzo del modulo table wizard queste tabelle aggiuntive verranno analizzate e mappate all'interno dello schema di Drupal, in modo da poter accedere ad esse attraverso gli strumenti a disposizione. In questa fase verranno create delle viste (intese come elementi generati da views) che permetteranno di effettuare filtraggi/ordinamenti/relazioni all'interno delle tabelle.

Infine tramite l'utilizzo del modulo migrate è possibile mappare i campi delle tabelle inserite, e filtrate da views, all'interno degli oggetti base di Drupal (nodi, commenti, utenti, tassonomia, ...). Una volta effetttuata la mappatura è possibile effettuare la migrazione dei dati ed eventualmente rimuovere i dati importati così da poter ripetere la procedura in maniera iterativa, raffinando la qualità dei dati importati.

La procedura: pratica

Preparazione dell'ambiente

Bene, ora ci è chiaro come dobbiamo procedere in via del tutto teorica, ma nella realtà? Quali sono i passaggi che devono essere realizzati? Li riassumiamo d seguito.

Innanzitutto controlliamo di aver installato i moduli sopra indicati e le loro dipendenze, se non volete procedere manualmente potete effettuarlo installandoli con drush:

drush dl schema
drush dl tw
drush dl views
drush dl migrate
drush dl migrate_extra

drush enable schema
drush enable tw
drush enable views
drush enable migrate

I dati da importare

La creazione della base data da importare dipende dalla vostra sorgente, pertanto non è possibile definire procedure standard, ma quasi tutti i database permettono di effettuare un export dei dati in formato CSV, pertanto se non trovaste alternativi potete sempre esportare i dati in questo formato ed importarli all'interno dello schema del database.
Per poter effettuar dei test ho creato un file docn dei dati di test che trovate in allegato. Per poterlo usare importatelo all'interno del vostro database accedete, per esempio tramite phpmyadmin, ed effettuate l'import del file allegato:

Interfaccia PhpMyAdmin

oppure date i seguenti comandi da linea di comndo

wget http://mavimo.org/files/articolo/110/fixtures_sql_gz_10682.gz
mv fixtures.sql._gz fixtures.sql.gz
gunzip fixtures.sql.gz
mysql -u NOME_UTENTE -p SCHEMA_DRUPAL < fixtures.sql

sostituendo i valori per nome utente e lo schema su cui si trova Drupal.

L'analisi delle tabelle

Il secondo passaggio da effettuare, a seguito dell'importazione, delle tabelle nello schema di Drupal, è quello di far riconoscere queste tabelle. Per fare questo ricorriamo al modulo table wizard, in particolare accedendo alla pagina:

all'interno della voce Add existing tables possiamo indicare quali tabelle devono essere importate (1) e possiamo quindi procedere con l'analisi della tabella (2).

Interfaccia table wizard

La pagina successiva ci propone (vedi immagine seguente) l'elenco dei campi presenti all'interno della tabella, evidenziando il formato dei dati presenti al loro interno, i valori minimo e massimo di questi dati, il nome della vista di default da generare, quale è il campo contenente l'indice della tabella e quale campo deve essere ignorato nella migrazione.

Interfaccia di table wizard con l'elenco dei campi

Nella migrazione dei nostri dati vogliamo procedere creando dei contenuti associando i diversi campi, ad esclusione del campo parent, che attualmente non stiamo utilizzando, quindi procederemo flaggando questo campo (1) e confermando (2).

A questo punto, visualizzando i dati estratti (3) ci troveremmo davanti la vista con i dati presenti nella tabella e che abbiamo deciso di estrarre:

elenco dei dati da importare nel sito

Il mapping dei dati

Una volta definita la struttura dei dati da importare dobbiamo procedere indicado dove devono essere importate queste informazioni, il modulo migrate mette già a disposizione una serie di elementi definiti in cui andranno a confluire le immagini, ma di certo il modulo migrate extra mette a disposizione una sere si elementi aggiuntivi non trascurabili, tra cui appunto la possibilità di importare i dati inserendoli in campi CCK. Per il nostro primo esperiemento non faremo uso di questa funzionalità, ma teniamolo presente per oi prossimi passaggi.

Il nostro intento è di inserire le informazioni che abbiamo a disposizione all'interno di un contenuto di tipo page, pertanto effettueremo la procedura di importazione facendo si che i dati presenti nella tabella precedentemente mappata finiscano nei campi appositi dei nodi. Per fare questo andiamo alla pagina:

dove nella sezione Add a content set potremmo inserire le informazioni necessarie a fare si che avvenga l'importazione dei dati. Configuriamo questa sezione con i seguenti settaggi:

Content set name
import_node
Description of the content set
Importazione dei contenuti. Prima prova.
Destination
Node: page
Source view from which to import content
tw: test_import (test_import)

nelllo specifico stiamo indicando al nostro sistema di creare un nuovo mapper (il coi identificativo e descrizione sono quelli indicati) tra la tabella definita come sorgente e la destinazione che nel nostro caso risultano essere dei contenuti di tipo Page.

Interfaccia configurazione del mapper - step 1

Possiamo a questo punto proseguire confermando. La parte successiva ci mostrerà quale è la colonna utilizzata come colonna univoca per la nostra base dati (è un campo obbligatorio, se non è presente nella nostra sorgente originaria dovrete crearla voi inserendo una chiave primaria) ed un riepilogo dei dati precedentemente inseriti.

Interfaccia configurazione del mapper - step 2

La parte da configurare in questo passaggio al troviamo nella parte inferiore della pagina, e riguarda dove devono essere inserite le informazioni che abbiamo ottenuto dalla sorgente all'interno della nostra destinazione. In queesto caso andremo ad impostare gli elementi che abbiamo a disposizione della nostra sorgente all'interno della destinazione come di seguito riassunto. Da notare che alcuni campi li valorizzeremo con un valore di default poiché abbiamo a disposizione dei dati in fase di import e vogliamo avere il controllo su queste informazioni.

Interfaccia configurazione del mapper (relazione dei campi) - step 2

Node: Authored by (uid)
1
Indichiamo che il creatore del nodo è sempre l'utente con UID = 1, cioè l'amministratore.
Node: Authored on
creation_time
La data di creazione del contenuto.
Node: Last updated on
creation_time
La data di creazione del contenuto. Usiamo lo stesso campo in quanto il sistema precedente non differenziava le due date.
Node: Published
0
Indichiamo che il nodo non è pubblicato, in questo modo man mano che procediamo nella revisione dei contenuti possiamo pubblicarli.
Node: In moderation queue
1
Inseriamo il contenuto nella coda di moderazione in modo da effettuarne la revisione.
Node: Promoted to front page
0
Facciamo in modo che il contenuto non venga promosso in prima pagina.
Node: Sticky at top of lists
0
Facciamo in modo che il contenuto non venga messo in evidenza.
Node: Input format
2
Impostiamo il formato del contenuto a Full HTML. Potremmo scegliere di utilizzare altri formati, nel qual caso indicare l'ID dei filtri visibili in http://TUOSITO/admin/settings/filters
Node: Title
title
Il titolo del contenuto
Node: Body
body
Il corpo completo del contenuto
Node: Teaser
teaser
Il corpo del contenuto (anteprima)

Confermando ci troveremo a disposizione un nuovo content set di cui possiamo fare l'import dei dati.

L'importazione dei dati

L'importazione dei dati procede selezionando il campo Import del Content Set da importare e nell'area Execute premendo il pulsane Run

Nella fase di importazione (la cui durata dipende dalla complessità del matching tra gli elementi, dal numero, ....) vedremo una barra di avanzameno. E' comunque possibile interrompere in qualsiasi momento la migrazione dei processi di import effettuati premendo il pulsante Stop all running Task.

Al termine dell'importazione possiamo procedere con la revisione delle informazioni inserite e nel caso volessimo rimuovere i dati importati per modificare la procedura, eventualmente sistemando dei passaggi, o aggiungendo/rimuovendo campi, è possibile farlo semplicemente selezionando -anziché il pulsante Import- il pulsante Clear; in questo modo i dati importati verranno eliminati e potranno essere importati nuovamente.

Sempre nella procedura di import, è possibile limitare il numero di elementi processati nella fase di importazione/cancellazione inserendo il numero di elementi che si desidera processare nello spazio contrassegnato con Sample size; questo è particolarmente comodo quando si vuoglino fare prove di importazione di quantità di dati comunque ridotti rispetto alla quantità dei dati totali da migrare, per esempio nella fase iniziale di test della procedura di importazione.

Tutto qui?

Ovviamente no, ci sono moltissime altre cose che è possibile gestire utilizzando gli stessi strumenti, ma vedremo prossimamente come usare gli strumenti aggiuntivi a disposizione.

Come sempre sono graditi commenti & critiche :)

AllegatoDimensione
fixtures.sql.gz819 byte

Altri contenuti che potrebbero interessarti

  • Caricamento di un form tramite ajax
    Nella creazione di form può essere necessario procede con passi successivi in una serie di scelte, questo comporta una perdita di tempo per gli utenti e quindi è molto comodo sfruttare le potenzialità offerte da ajax per effettuare questi passaggi in cascata senza dover andare a ricaricare la...
  • Drupal si occupa esclusivamente della validazione lato server delle informazioni, ma spesso è consigliabile prevedere ad una prima validazione dei dati inseriti dall'utente lato client, in modo da evitare l'invio della richiesta limitando quindi le possibilità di errore. Ovviamente la validazione...
  • Esempio di vista generata dall'integrazione del nostro modulo con views
    Alzi la mano chi non ha mai usato views. Alzi la mano che l'ha mai usato. Ok, non proprio tutti ma buona parte di voi ha alzato la mano, questo perchè è sicuramente uno strumento potentissimo per la visualizzazione delle informazioni, quindi è fondamentale (o comunque molto utile) andare ad...
  • Pagina di ricerca con filtri dinamici nelle views
    Le viste sono uno strumento estremamente potente e permettono di andare ad elaborare le informazioni creando degli elementi (pagine, blocchi, ...) di presentazione. La possibilità di usare dei filtri esposti ne fa degli strumenti adatti alla creazione di strumenti di ricerca dei contenuti. L'...

Commenti

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4> <table> <thead> <tbody> <tr> <th> <td>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti