Povești și sfaturi din tranșee: Agile Data Transformation using MDOX

COL03x - feature image oneil already 300x300Ce este agilitatea? Eu aș defini-o ca fiind abilitatea de a se mișca rapid, fluid și eficient în orice direcție. În transformarea datelor, informațiile se deplasează printr-un proces care constă într-o secvență de operații. În mod ideal, procesele ar trebui să fie reversibile, asigurând astfel că nu se pierde nicio informație.

Prin modelarea operațiilor de transformare în mod generic în tabel , MDOX permite crearea de transformări de date agile care pot fi ușor executate, inversate, revizuite și repetate sau eliminate.

În articolul nostru anterior, Introducere în MDOX, ne-am concentrat pe Meta-Data Objects (MDO) ca model universal de date care stochează informațiile sub formă de obiecte: colecții structurate ierarhic de Elemente și Atribute de date, legate de o ierarhie de Termeni de metadate cu Proprietăți opționale. În acest articol, ne vom concentra pe Procesele care implementează transformări agile de date, punând astfel “X” în MDOX.

Tabelul 5 din articolul anterior, “Introducere în MDOX”, prezintă principalele câmpuri ale tabelului:

Picture1

Tabelul conține, de asemenea, mai multe câmpuri care controlează modul în care expresia regulată opțională este aplicată elementelor din termenul părinte, pentru a permite analiza recursivă a elementelor copil din textul părinte:

Picture2

Concordanțele pentru expresia regulată din câmp sunt stocate temporar în tabel :

Picture3Care înregistrare din tabel definește o singură operație de transformare:

  1. Dacă câmpul conține o expresie regulată validă, atunci această expresie se aplică textului lung . pentru toate elementele legate de termenul părinte al lui .. Potrivirile Regex sunt stocate temporar în tabel.
  2. Dacă câmpul conține o instrucțiune SQL validă, atunci instrucțiunea este executată de aplicație. Interogările Select și Transform sunt fie afișate pe ecran, fie, dacă procesul este automatizat, exportate sub formă de foi de calcul în directorul curent al aplicației. Instrucțiunile Insert adaugă noi înregistrări într-un tabel sau într-o vizualizare actualizabilă. Instrucțiunile Update sau Delete afectează înregistrarea selectată.

Rețineți că prezența unei expresii regulate sau a unei instrucțiuni SQL invalide va determina eșecul unui proces. Dezvoltatorul trebuie să testeze în mod repetat fiecare operație până când întregul proces se execută impecabil.

Operațiile pentru un anumit termen sunt executate în ordinea . Dacă un termen are termeni copii și este selectată opțiunea “descendență în arbore”, atunci termenii copii sunt procesați în ordinea succesiunii. Astfel, ordinea generală a operațiilor în cadrul unei transformări este determinată atât de . cât și de .. Puteți muta o operație dezvoltată anterior într-o nouă locație prin simpla actualizare a acestor câmpuri. Cu ajutorul aplicației MDOX, se pot crea cu ușurință noi termeni și operații sau se pot actualiza denumirea, descrierea și ordinea de succesiune a termenilor și operațiilor existente. Dacă un obiect de date sau de metadate este șters, atunci ștergerile în cascadă vor elimina toate obiectele care descind din acesta, de exemplu, subtermeni, proprietăți, procese, elemente, atribute și corespondențe regex. Acest comportament este benefic. Mai jos este prezentat un termen numit “test” care are un termen copil “regex” cu un proces care raportează corespondențele regex găsite în elementele “test”. Ulterior, termenul “test” poate fi șters, iar toate obiectele subsidiare vor dispărea din baza de date.

Exemplu 1: Operațiune de transformare care creează un raport crosstab din potriviri regex

Picture4 Regexul “(\d+)\.\s(\w+)” conține 2 subexpresii, închise între paranteze. Prima subexpresie (\d+) se potrivește cu una sau mai multe cifre. A doua (w+) se potrivește cu una sau mai multe litere. Între aceste subexpresii, expresia ” \.\s” se potrivește cu un punct urmat de un caracter de spațiu alb. În acest exemplu, MDOX caută regex-ul, “(\d+)\.\s(\w+)” în elementele termenului părinte, “test”:

Picture5

Corecordanțele regex-ului sunt stocate în tabelul unde

  • = 0 => potrivirea completă a regex-ului, e.g. “10. foo”
  • = 1 => potrivirea primei subexpresii, de ex. “10”
  • = 2 => a 2-a potrivire de sub-expresii, de exemplu “bar”

Picture6

După ce au fost colectate potrivirile regex, o altă operațiune compilează și execută acest text 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;

Setul de înregistrări rezultat este afișat sau exportat în “Test_regex.csv”:

Picture7

Exemplu 2: Operație de transformare care creează un catalog de obiecte de sistem de fișiere

Visualizarea actualizabilă este definită după cum urmează:

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;

Următoarea instrucțiune inserează un element nou împreună cu un atribut asociat în :

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;

Această operațiune utilizează instrucțiunea de mai sus pentru a crea un catalog al unui sistem de fișiere:

Picture8

Catalogul creat este o ierarhie de elemente cu atribute de sistem de fișiere, de ex.g.

Picture9

O operație ulterioară poate raporta fișierele selectate printr-o vizualizare bazată pe elemente și atribute, de exemplu:

Picture10

Cum se arată mai sus, funcția GetFileSystem() poate extrage textul fișierului și îl poate stoca în ., fie cu sau fără înlocuirea caracterelor speciale cu cele mai apropiate echivalente ASCII ale acestora. Această opțiune este utilă pentru analiza regex a fișierelor cu conținut text, de exemplu, tipurile de fișiere txt, sql, doc, ppt, pdf, html, etc.

Funcțiile similare GetData() importă alte tipuri de date în schema bazei de date MDOX. De exemplu, GetSheets() importă date tabelare din foi de calcul Excel și documente Word. GetWordDoc() importă conținutul de text din orice format de document care poate fi deschis de Microsoft Word, inclusiv PDF și PowerPoint. GetXml() importă date structurate sub formă de elemente cu atribute aferente din formate de marcare bazate pe text, cum ar fi fișierele XML, XSD și WSDL. Detaliile de implementare pentru aceste metode de import de date vor fi descrise de următorul articol TDAN, MDOX Application Development.

După importul inițial de date sursă în MDOX cu ajutorul metodelor GetData(), se pot dezvolta noi termeni și procese pentru a transforma în continuare datele în formatul de ieșire dorit, care poate fi exportat sau încărcat direct într-o tabelă de bază de date legată. Câteva exemple de transformări cu diferite grade de complexitate vor fi descrise în ultimul articol din această serie, Tehnici de transformare a datelor MDOX.

În concluzie, MDOX permite transformarea agilă a datelor prin modelarea generică a datelor și proceselor. Acest lucru face posibilă construirea unei aplicații care să faciliteze prelucrarea datelor în cadrul unui model de date static. MDOX poate executa transformări complicate în mod automat, printr-un proces, construit din operații, care poate fi executat, inversat, revizuit și repetat, sau eliminat după cum este necesar.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.