Tales & Tips from the Trenches: Agile Data Transformation using MDOX

COL03x - feature image oneil already 300x300Cos’è l’agilità? La definirei come la capacità di muoversi rapidamente, in modo fluido ed efficiente in qualsiasi direzione. Nella trasformazione dei dati, le informazioni si muovono attraverso un processo che consiste in una sequenza di operazioni. Idealmente, i processi dovrebbero essere reversibili, garantendo così che nessuna informazione vada persa.

Modellando le operazioni di trasformazione genericamente in tabella, MDOX consente la creazione di trasformazioni di dati agili che possono essere facilmente eseguite, invertite, riviste e ripetute, o rimosse.

Nel nostro precedente articolo, Introducing MDOX, ci siamo concentrati sui Meta-Data Objects (MDO) come modello di dati universale che memorizza le informazioni come oggetti: collezioni gerarchicamente strutturate di dati Elementi e Attributi, collegati a una gerarchia di metadati Termini con Proprietà opzionali. In questo articolo, ci concentreremo sui processi che implementano le trasformazioni agili dei dati, mettendo così la “X” in MDOX.

La tabella 5 dell’articolo precedente, “Introduzione a MDOX” mostra i campi principali della tabella:

Picture1

La tabella contiene anche diversi campi che controllano come l’espressione regolare opzionale viene applicata agli elementi del termine padre, per consentire il parsing ricorsivo degli elementi figli dal testo padre:

Picture2

Le corrispondenze per l’espressione regolare nel campo sono temporaneamente memorizzate nella tabella :

Picture3Ogni record nella tabella definisce una singola operazione di trasformazione:

  1. Se il campo contiene un’espressione regolare valida, allora tale espressione viene applicata al testo lungo . per tutti gli elementi relativi al termine padre di .. Le corrispondenze Regex sono temporaneamente memorizzate nella tabella .
  2. Se il campo contiene un’istruzione SQL valida, allora l’istruzione viene eseguita dall’applicazione. Le query Select e Transform sono mostrate sullo schermo o, se il processo è automatizzato, esportate come fogli di calcolo nella directory corrente dell’applicazione. Le istruzioni Insert aggiungono nuovi record a una tabella o a una vista aggiornabile. Le istruzioni Update o Delete hanno effetto sui record selezionati.

Nota che la presenza di un’espressione regolare non valida o di un’istruzione SQL causerà il fallimento del processo. Lo sviluppatore deve testare ripetutamente ogni operazione fino a quando l’intero processo non viene eseguito in modo impeccabile.

Le operazioni per un dato termine vengono eseguite in ordine di . Se un termine ha termini figli e l’opzione “descend tree” è selezionata, allora i termini figli vengono elaborati in ordine di sequenza. Così, l’ordine complessivo delle operazioni all’interno di una trasformazione è determinato sia da . che da .. È possibile spostare un’operazione precedentemente sviluppata in una nuova posizione semplicemente aggiornando quei campi. Usando l’applicazione MDOX, si possono facilmente creare nuovi termini e operazioni, o aggiornare il nome, la descrizione e l’ordine di sequenza di termini e operazioni esistenti. Se un oggetto di dati o metadati viene cancellato, le cancellazioni a cascata rimuoveranno qualsiasi oggetto discendente da esso, ad esempio sottotermini, proprietà, processi, elementi, attributi e corrispondenze regex. Questo comportamento è vantaggioso. Sotto è mostrato un termine chiamato “test” che ha un termine figlio “regex” con un processo che riporta le corrispondenze regex trovate negli elementi “test”. Più tardi, il termine “test” può essere cancellato, e tutti gli oggetti sussidiari scompariranno dal database.

Esempio 1: Operazione di trasformazione che crea una tabella incrociata dalle corrispondenze regex

Picture4 La regex “(\d+)\s(\w+)” contiene 2 sottoespressioni, racchiuse tra parentesi. La prima sottoespressione (\d+) corrisponde a una o più cifre. La seconda (w+) corrisponde a una o più lettere. Tra queste sottoespressioni, l’espressione ” \.\s” corrisponde a un punto seguito da un carattere di spazio bianco. In questo esempio, MDOX cerca la regex, “(\d+)\.\s(\w+)” negli elementi del termine padre, “test”:

Picture5

Le corrispondenze regex sono memorizzate nella tabella dove

  • = 0 => la corrispondenza regex completa, es.10. foo”
  • = 1 => la prima sotto-espressione, ad es. “10”
  • = 2 => la 2a sotto-espressione, per esempio “bar”

Picture6

Dopo che le corrispondenze regex sono state raccolte, un’altra operazione compila ed esegue questo testo SQL:

TRANSFORM First(.value) AS FirstOfvalue
SELECT Element.elem_id, Element.elem_value, .nmatch
FROM Element INNER JOIN _regexp ON Element.elem_id = .rid
GROUP BY Element.elem_id, Element.elem_value, .nmatch
PIVOT .nsub;

Il recordset risultante viene visualizzato o esportato in “Test_regex.csv”:

Picture7

Esempio 2: operazione di trasformazione che crea un catalogo di oggetti del filesystem

La vista aggiornabile è definita come segue:

SELECT Elements.*, Attributes.attr_name, Attributes.attr_value, Attributes.elem_id AS attr_id
FROM Elements LEFT JOIN Attributes ON Elements.elem_id = Attributes.elem_id;

La seguente dichiarazione inserisce un nuovo elemento insieme ad un attributo correlato in :

INSERT INTO attributes ( elem_id, attr_name, attr_value )
SELECT GetFileSystem(GetFolderDialog("Select root folder for files"),".*"
,True,True) AS elem_id, "insertDateTime" AS attr_name, Now() AS attr_value;

Questa operazione utilizza l’istruzione precedente per creare un catalogo di un filesystem:

Picture8

Il catalogo creato è una gerarchia di elementi con attributi di filesystem, es.

Picture9

Una successiva operazione può riportare i file selezionati attraverso una vista basata su Elementi e Attributi, ad es.

Picture10

Come mostrato sopra, la funzione GetFileSystem() può estrarre il testo del file e memorizzarlo in ., con o senza sostituzione dei caratteri speciali con i loro equivalenti ASCII più vicini. Questa opzione è utile per l’analisi regex dei file con contenuto testuale, ad esempio i tipi di file txt, sql, doc, ppt, pdf, html, ecc.

Funzioni simili a GetData() importano altri tipi di dati nello schema del database MDOX. Per esempio, GetSheets() importa dati tabulari da fogli di calcolo Excel e documenti Word. GetWordDoc() importa il contenuto testuale da qualsiasi formato di documento che può essere aperto da Microsoft Word, inclusi PDF e PowerPoint. GetXml() importa dati strutturati come elementi con relativi attributi da formati di markup basati sul testo come XML, XSD e file WSDL. I dettagli di implementazione per questi metodi di importazione dei dati saranno descritti dal prossimo articolo di TDAN, MDOX Application Development.

Dopo l’importazione iniziale dei dati sorgente in MDOX usando i metodi GetData(), possono essere sviluppati nuovi termini e processi per trasformare ulteriormente i dati nel formato di output desiderato, che può essere esportato o caricato direttamente in una tabella di database collegata. Alcuni esempi di trasformazioni con vari gradi di complessità saranno descritti nell’ultimo articolo di questa serie, MDOX Data Transformation Techniques.

In sintesi, MDOX permette un’agile trasformazione dei dati modellando dati e processi in modo generico. Questo rende possibile costruire un’applicazione che faciliti l’elaborazione dei dati all’interno di un modello di dati statico. MDOX può eseguire trasformazioni complicate automaticamente, attraverso un processo, costruito di operazioni, che può essere eseguito, invertito, rivisto e ripetuto, o rimosso come necessario.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.