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

COL03x - feature image oneil already 300x300Mi az agilitás? Én úgy definiálnám, mint a gyors, gördülékeny és hatékony mozgás képességét bármilyen irányba. Az adattranszformációban az információ egy műveletsorozatból álló folyamaton keresztül mozog. Ideális esetben a folyamatoknak visszafordíthatónak kell lenniük, így biztosítva, hogy egyetlen információ sem vész el.

Az MDOX az átalakítási műveletek általános táblázatos modellezésével lehetővé teszi az agilis adattranszformációk létrehozását, amelyek könnyen lefuttathatók, visszafordíthatók, felülvizsgálhatók és megismételhetők, vagy eltávolíthatók.

Az MDOX bemutatása című előző cikkünkben a Meta-adatobjektumokra (MDO) mint olyan univerzális adatmodellre összpontosítottunk, amely az információt objektumként tárolja: adatelemek és attribútumok hierarchikusan strukturált gyűjteményei, amelyek opcionális tulajdonságokkal rendelkező metaadat-kifejezések hierarchiájához kapcsolódnak. Ebben a cikkben az agilis adattranszformációkat megvalósító folyamatokra összpontosítunk, így téve az “X”-et az MDOX-ba.

A korábbi, “Az MDOX bemutatása” című cikk 5. táblázata mutatja a táblázat főbb mezőit:

Picture1

A táblázat több olyan mezőt is tartalmaz, amelyek azt szabályozzák, hogy az opcionális reguláris kifejezés hogyan kerül alkalmazásra a szülő kifejezés elemeire, hogy a szülő szövegből a gyermek elemek rekurzív elemzése lehetővé váljon:

Picture2

A mezőben szereplő reguláris kifejezésre vonatkozó találatokat a táblázat ideiglenesen tárolja :

Picture3A táblázat minden rekordja egyetlen transzformációs műveletet határoz meg:

  1. Ha a mező érvényes reguláris kifejezést tartalmaz, akkor ezt a kifejezést alkalmazza a hosszú szövegre . . szülő kifejezéséhez kapcsolódó összes elemre. A regex találatok ideiglenesen tárolódnak a táblázatban.
  2. Ha a mező érvényes SQL-kijelentést tartalmaz, akkor a kijelentést az alkalmazás végrehajtja. A Select és Transform lekérdezések vagy megjelennek a képernyőn, vagy ha a folyamat automatizált, akkor táblázatként exportálódnak az aktuális alkalmazás könyvtárába. Az Insert utasítások új rekordokat adnak hozzá egy táblához vagy frissíthető nézethez. A frissítési vagy törlési utasítások a kiválasztott rekordot érintik.

Megjegyzendő, hogy az érvénytelen reguláris kifejezés vagy SQL utasítás jelenléte a folyamat sikertelenségét okozza. A fejlesztőnek minden műveletet ismételten tesztelnie kell, amíg a teljes folyamat hibátlanul nem fut le.

A műveletek egy adott kifejezésre vonatkozóan sorrendben kerülnek végrehajtásra. Ha egy kifejezésnek vannak gyermek kifejezései, és a “descend tree” opció be van jelölve, akkor a gyermek kifejezések sorrendben kerülnek feldolgozásra. Így a műveletek általános sorrendjét egy átalakításon belül a . és a . határozza meg. Egy korábban kidolgozott műveletet egyszerűen áthelyezhet egy új helyre az említett mezők frissítésével. Az MDOX alkalmazás segítségével könnyen létrehozhatunk új kifejezéseket és műveleteket, vagy frissíthetjük a meglévő kifejezések és műveletek nevét, leírását és sorrendjét. Ha egy adat- vagy metaadat-objektum törlésre kerül, akkor a kaszkádos törlés eltávolítja a belőle leszármazott objektumokat, pl. az al-fogalmakat, tulajdonságokat, folyamatokat, elemeket, attribútumokat és regex-illesztéseket. Ez a viselkedés előnyös. Az alábbiakban egy “test” nevű terminus látható, amelynek van egy “regex” nevű gyermekterminusa egy olyan folyamattal, amely a “test” elemekben talált regex egyezéseket jelenti. Később a “teszt” kifejezés törölhető, és az összes leányobjektum eltűnik az adatbázisból.

1. példa: Átalakítási művelet, amely a regex találatokból kereszttáblás jelentést készít

Picture4 A “(\d+)\.\s(\w+)” regex 2 zárójelbe zárt részkifejezést tartalmaz. Az első alkifejezés (\d+) egy vagy több számjegyre illik. A második (w+) egy vagy több betűvel egyezik meg. Ezen részkifejezések között a ” \.\s” kifejezés egy pontra illeszkedik, amelyet egy szóköz karakter követ. Ebben a példában az MDOX a “(\d+)\.\s(\w+)” regexet keresi a “teszt” szülő kifejezés elemeiben:

Picture5

A regex találatokat a táblázatban tárolja, ahol

  • = 0 => a teljes regex találat, e.pl. “10. foo”
  • = 1 => az 1. részkifejezés egyezése, pl. “10”
  • = 2 => a 2. részkifejezés egyezése, pl. “bar”

Picture6

A regex egyezések összegyűjtése után egy másik művelet összeállítja és végrehajtja ezt az SQL szöveget:

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;

A kapott adatállományt megjeleníti vagy exportálja a “Test_regex.csv”:

Picture7

2. példa: A fájlrendszer-objektumok katalógusát létrehozó transzformációs művelet

A frissíthető nézet a következőképpen van definiálva:

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;

A következő utasítás egy új elemet illeszt be egy kapcsolódó attribútummal együtt a :

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;

Ez a művelet a fenti utasítás segítségével létrehozza egy fájlrendszer katalógusát:

Picture8

A létrehozott katalógus a fájlrendszer attribútumokkal rendelkező elemek hierarchiája, e.pl.

Picture9

A következő művelet az elemek és attribútumok alapján kiválasztott fájlokat egy nézeten keresztül jelentheti, pl.

Picture10

A fentiek szerint a GetFileSystem() függvény képes a fájlszöveget kivenni és .-ban tárolni, akár a speciális karakterek legközelebbi ASCII megfelelőjükkel való helyettesítésével, akár anélkül. Ez a lehetőség hasznos a szöveges tartalmú fájlok regex-elemzésénél, pl. txt, sql, doc, ppt, pdf, html stb. fájltípusoknál.

A hasonló GetData() függvények más típusú adatokat importálnak az MDOX adatbázis sémájába. A GetSheets() például táblázatos adatokat importál Excel táblázatokból és Word dokumentumokból. A GetWordDoc() szöveges tartalmat importál bármely olyan dokumentumformátumból, amelyet a Microsoft Word meg tud nyitni, beleértve a PDF-et és a PowerPointot is. A GetXml() strukturált adatokat importál kapcsolódó attribútumokkal rendelkező elemként szövegalapú jelölési formátumokból, például XML-, XSD- és WSDL-fájlokból. Ezen adatimportáló módszerek megvalósításának részleteit a következő TDAN cikk, az MDOX alkalmazásfejlesztés ismerteti.

A forrásadatoknak a GetData() módszerek segítségével az MDOX-ba történő kezdeti importálása után új feltételek és folyamatok fejleszthetők ki az adatok további átalakítására a kívánt kimeneti formátumba, amely exportálható vagy közvetlenül betölthető egy összekapcsolt adatbázis táblába. A sorozat utolsó, MDOX-adattranszformációs technikák című cikkében ismertetünk néhány különböző bonyolultságú mintaátalakítást.

Összefoglalva, az MDOX az adatok és folyamatok általános modellezésével lehetővé teszi az agilis adattranszformációt. Ez lehetővé teszi, hogy olyan alkalmazást építsünk, amely egy statikus adatmodellben megkönnyíti az adatfeldolgozást. Az MDOX képes a bonyolult transzformációk automatikus végrehajtására, egy műveletekből felépített folyamaton keresztül, amely szükség szerint lefuttatható, visszafordítható, felülvizsgálható és megismételhető, illetve eltávolítható.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.