Mappatura dei dati per oggetti binari
Gli oggetti binari sono difficili da gestire nei database. Sono di grandi dimensioni, il loro contenuto non è leggibile dagli esseri umani e possono contenere byte di dati che possono essere facilmente interpretati come caratteri di controllo. Anche il nome del tipo di dati per gli oggetti binari di grandi dimensioni – BLOB – riflette la scarsa predilezione che molti gestori di database nutrono nei loro confronti. Prima dell'avvento dei database relazionali, la definizione di un BLOB era "qualcosa di indefinito o amorfo"
Altova MapForce, il software pluripremiato, Strumento di mappatura grafica dei dati per la conversione e l'integrazione da qualsiasi formato a qualsiasi altro, Include funzionalità che consentono di mappare facilmente dati binari verso o da tutti i principali database relazionali. È possibile mappare dati come immagini, file PDF, file video o qualsiasi altro tipo di dato binario. Vediamo un esempio.

MapForce include due funzioni integrate, "read-binary-file" e "write-binary-file", per la mappatura tra oggetti binari e database. In questo articolo, espanderemo un esempio di "read-binary-file" tratto dalla guida online di MapForce, al fine di creare una mappatura completa per inserire diversi tipi di oggetti binari in un database relazionale.
Ecco un esempio che illustra come inserire un'immagine in un database:

Questa mappatura inserisce il file locale denominato image01.png in una tabella del database. Possiamo notare che il database è strutturato in modo da includere alcune informazioni aggiuntive sull'immagine in colonne separate, che possono essere utilizzate per interrogare il database e recuperare la stessa immagine. Non si vuole caricare file di dati binari di grandi dimensioni nel database senza avere un modo per ritrovarli in seguito!
Per il nostro caso d'uso, creeremo un database SQLite per tracciare vari file binari che rappresentano risorse a supporto di diversi prodotti per un dipartimento di marketing. Questi dati binari potrebbero includere file di immagini di loghi, file PDF per le schede tecniche dei prodotti, schermate del prodotto in uso, fotografie, file video, ecc.
Inizieremo con un semplice file di testo in formato CSV per descrivere le informazioni che desideriamo inserire:

Al termine di questo progetto, gli utenti potrebbero avere decine, o addirittura centinaia, di risorse nel database. Quando sarà necessario estrarre una risorsa in seguito, i nomi dei tipi di risorsa saranno metadati fondamentali per le query. Tuttavia, se anche una sola voce nella colonna dei tipi contiene errori di ortografia o è incoerente, un enorme oggetto binario risulterà orfano e irrecuperabile.
Possiamo definire un elenco di tipi di risorse importando il file CSV in XMLSpy e generando uno schema XML in cui l'elemento "Type" viene selezionato da un elenco predefinito. In questo modo, anche un tirocinante del reparto marketing può creare un elenco di risorse nella visualizzazione a griglia di XMLSpy. Il campo "Tipo" sarà obbligatorio:

Potremmo anche aggiungere un elenco di nomi di prodotto allo schema XML, oppure, almeno, rendere obbligatoria la presenza dell'elemento "Prodotto". Possiamo persino impostare il tipo di risorsa su "xs:anyURI", obbligando così il riferimento a un file. Ecco la finestra di aiuto "Dettagli" nella vista dello schema di XMLSpy, con l'impostazione del tipo di dati per l'elemento "Risorsa":

La mappatura degli oggetti binari in MapForce è sostanzialmente identica, sia che si mappino dati provenienti da un file CSV o da un file XML.
Inizieremo aprendo una nuova istanza di MapForce, uno strumento per la mappatura e la trasformazione dei dati, e importeremo l'elenco delle nostre risorse e la tabella del database.

Abbiamo utilizzato DatabaseSpy per creare una nuova tabella in un database SQLite, apportando alcune modifiche all'esempio presente nella guida di MapForce. La colonna "prodotto" conterrà il nome del prodotto, mentre la colonna "descrizione" conterrà il tipo di risorsa. La colonna "recordDate" terrà traccia della data di creazione di ciascun oggetto binario.
Ora, impostiamo la colonna "id" in modo che generi automaticamente un numero, come descritto nella guida di MapForce, e creiamo le semplici connessioni tra la sorgente e la destinazione

Il prodotto e il tipo, estratti dalla mappa di origine, vengono direttamente associati alle colonne del database. La mappatura dell'elemento "Riga" indica che ogni riga di dati in ingresso deve creare un nuovo record nel database.
Ora, mapperemo i dati binari a oggetti BLOB (Binary Large Object) nel database:

La funzione integrata MapForce, "read-binary-file", utilizza il nome del file fornito nell'elemento "Asset" della sorgente per creare l'oggetto binario (BLOB). La funzione "read-binary-file" considera sempre la sorgente come dati in formato base64, indipendentemente da eventuali convenzioni basate sul nome del file di origine.
Per completare la mappatura, abbiamo bisogno di connessioni che permettano di estrarre il nome del file dall'elemento e di salvare la data di archiviazione

La funzione "rimuovi cartella" estrae automaticamente il nome del file da qualsiasi percorso, che si tratti di file locali, file di rete o file presenti sul web.
La funzione "now" registra la data e l'ora di esecuzione dell'operazione, ma noi vogliamo solo la data, quindi abbiamo utilizzato la funzione "substring-before" per eliminare la parte relativa all'ora.
Il pulsante "Esegui" situato nella parte inferiore della finestra di mappatura esegue la mappatura e genera uno script SQL:

Lo script è solo un'anteprima per verificare i risultati ottenuti finora. Per eseguire lo script, selezionare l'opzione corrispondente nel menu principale "Output"

Il risultato dello script viene visualizzato:

Cliccheremo sul pulsante "Query DB" per connetterci al database e, successivamente, verificheremo i risultati direttamente in MapForce:

Non si possono ricavare molte informazioni osservando i dati binari (BLOB) nella colonna "productfile", ma le altre colonne forniscono metadati utili su ciascun elemento.
In una [data-mapping-binary-objects-part-2|post di aggiornamento mostreremo come mappare i dati, associando oggetti binari a [estrarre i dati dal database]] e salvarli nella loro forma originale. Se proprio non potete aspettare, scaricare una versione di prova gratuita compresi tutorial, guide e numerosi esempi per iniziare subito con il vostro progetto di mappatura, conversione e trasformazione dei dati!