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

COL03x - feature image oneil already 300x300Wat is agility? Ik zou het definiëren als het vermogen om snel, vloeiend en efficiënt te bewegen in elke richting. Bij datatransformatie beweegt informatie zich door een proces dat bestaat uit een opeenvolging van bewerkingen. Idealiter zouden processen omkeerbaar moeten zijn, zodat er geen informatie verloren gaat.

Door transformatieoperaties generiek te modelleren in tabel , maakt MDOX het mogelijk om wendbare datatransformaties te creëren die gemakkelijk kunnen worden uitgevoerd, omgekeerd, herzien en herhaald, of verwijderd.

In ons vorige artikel, Introductie van MDOX, hebben we ons gericht op Meta-Data Objects (MDO) als een universeel datamodel dat informatie opslaat als objecten: hiërarchisch gestructureerde verzamelingen van data Elementen en Attributen, gerelateerd aan een hiërarchie van metadata Terms met optionele Eigenschappen. In dit artikel zullen wij ons toespitsen op de Processen die agile gegevenstransformaties implementeren, en aldus de “X” in MDOX zetten.

Tabel 5 uit het vorige artikel, “MDOX introduceren”, toont de belangrijkste velden van de tabel:

Picture1

De tabel bevat ook diverse velden die bepalen hoe de optionele reguliere expressie wordt toegepast op elementen van de ouderterm, om recursieve parsing van kindelementen uit de oudertekst mogelijk te maken:

Picture2

Matchen voor de reguliere expressie in het veld worden tijdelijk in de tabel opgeslagen :

Picture3Elk record in de tabel definieert een enkele transformatiebewerking:

  1. Als het veld een geldige reguliere expressie bevat, dan wordt die expressie toegepast op de lange tekst . voor alle elementen die gerelateerd zijn aan de parent term van .. Regex matches worden tijdelijk opgeslagen in tabel .
  2. Als veld een geldig SQL statement bevat, dan wordt het statement uitgevoerd door de applicatie. Select en Transform queries worden ofwel op het scherm getoond, of als het proces geautomatiseerd is, geëxporteerd als spreadsheets naar de huidige applicatiedirectory. Insert statements voegen nieuwe records toe aan een tabel of een bij te werken view. Update of Delete statements beïnvloeden geselecteerde records.

Merk op dat de aanwezigheid van een ongeldige reguliere expressie of SQL statement een proces doet mislukken. De ontwikkelaar moet elke bewerking herhaaldelijk testen totdat het gehele proces foutloos verloopt.

Bewerkingen voor een bepaalde term worden uitgevoerd in volgorde van . Als een term kindtermen heeft en de optie “boom afdalen” is geselecteerd, dan worden kindtermen in volgorde verwerkt. De algemene volgorde van bewerkingen binnen een transformatie wordt dus bepaald door zowel . als . U kunt een eerder ontwikkelde bewerking verplaatsen naar een nieuwe locatie door eenvoudigweg die velden bij te werken. Met behulp van de MDOX-toepassing kan men gemakkelijk nieuwe termen en bewerkingen maken, of de naam, beschrijving en volgorde van bestaande termen en bewerkingen bijwerken. Als een gegevens- of metagegevensobject wordt verwijderd, dan zullen cascadeverwijderingen alle objecten verwijderen die ervan afstammen, bv. subtermen, eigenschappen, processen, elementen, attributen, en regex-overeenkomsten. Dit gedrag is gunstig. Hieronder is een term genaamd “test” met een kind term “regex” met een proces dat regex overeenkomsten gevonden in “test” elementen rapporteert. Later kan de “test” term worden verwijderd, en alle ondergeschikte objecten zullen uit de database verdwijnen.

Voorbeeld 1: Transformatie operatie die een kruistabel rapport maakt van regex overeenkomsten

Picture4 De regex “(\d+)\.\s(\w+)” bevat 2 sub-expressies, ingesloten tussen haakjes. De eerste sub-uitdrukking (\d+) komt overeen met een of meer cijfers. De tweede (w+) komt overeen met een of meer letters. Tussen deze subexpressies komt de expressie ” \s” overeen met een punt gevolgd door een spatieteken. In dit voorbeeld zoekt MDOX naar regex, “(\d+)\.\s(\w+)” in de elementen van de parent term, “test”:

Picture5

De regex matches worden opgeslagen in tabel waar

  • = 0 => de volledige regex match, bijv.b.v. “10. foo”
  • = 1 => de 1e sub-expressie overeenkomst, b.v. “10”
  • = 2 => de 2e sub-expressie-match, bijv. “bar”

Picture6

Nadat de regex-matches zijn verzameld, wordt deze SQL-tekst door een andere bewerking gecompileerd en uitgevoerd:

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;

De resulterende recordset wordt weergegeven of geëxporteerd naar “Test_regex.csv”:

Picture7

Voorbeeld 2: Transformatiebewerking waarmee een catalogus van bestandssysteemobjecten wordt gemaakt

De bij te werken view is als volgt gedefinieerd:

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;

Het volgende statement voegt een nieuw element samen met een bijbehorend attribuut 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;

Deze bewerking gebruikt het bovenstaande statement om een catalogus van een bestandssysteem te maken:

Picture8

De gemaakte catalogus is een hiërarchie van elementen met bestandssysteemattributen, bijv.

Picture9

Een volgende bewerking kan geselecteerde bestanden rapporteren via een weergave op basis van elementen en attributen, bijv.

Picture10

Zoals hierboven getoond, kan de functie GetFileSystem() bestandstekst extraheren en opslaan in ., al dan niet met vervanging van speciale tekens door hun dichtstbijzijnde ASCII-equivalenten. Deze optie is nuttig voor regex parsing van bestanden met tekstinhoud, bijv. bestandstypes txt, sql, doc, ppt, pdf, html, enz.

Gelijkaardige GetData()-functies importeren andere datatypes in het MDOX databaseschema. GetSheets() importeert bijvoorbeeld gegevens in tabelvorm uit Excel-spreadsheets en Word-documenten. GetWordDoc() importeert tekstinhoud uit elk documentformaat dat door Microsoft Word kan worden geopend, inclusief PDF en PowerPoint. GetXml() importeert gestructureerde gegevens als elementen met gerelateerde attributen uit op tekst gebaseerde opmaakformaten zoals XML, XSD, en WSDL-bestanden. Implementatie details voor deze data import methoden zullen worden beschreven in het volgende TDAN artikel, MDOX Application Development.

Na de initiële import van brongegevens in MDOX met behulp van GetData() methoden, kunnen nieuwe termen en processen worden ontwikkeld om de gegevens verder te transformeren naar het gewenste output formaat, dat kan worden geëxporteerd of direct in een gekoppelde database tabel kan worden geladen. Enkele voorbeeldtransformaties met verschillende gradaties van complexiteit zullen worden beschreven in het laatste artikel in deze serie, MDOX Data Transformation Techniques.

Samenvattend, MDOX maakt agile data transformatie mogelijk door data en processen generiek te modelleren. Dit maakt het mogelijk om een applicatie te bouwen die dataverwerking faciliteert binnen een statisch datamodel. MDOX kan gecompliceerde transformaties automatisch uitvoeren, door middel van een proces, opgebouwd uit operaties, die kunnen worden uitgevoerd, teruggedraaid, herzien en herhaald, of verwijderd indien nodig.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.