Validatie en debugging van data-transformaties
Softwareontwikkelaars en andere professionals die met data werken, hebben vaak de behoefte om data van het ene formaat naar een ander om te zetten. Deze transformaties kunnen eenvoudige, directe conversies zijn, maar soms is complexere manipulatie nodig. Zo moeten bijvoorbeeld relaties worden aangemaakt bij het importeren van platte CSV-bestanden in een database, of moet de brongegevens worden opgesplitst voor de bestemming, zoals bij het scheiden van een volledige naam in voornaam, tussenvoegsel, achternaam en eventueel een toevoeging. Het valideren van datatransformaties is cruciaal om dataverlies of corruptie te voorkomen.
In een eerdere post over integratie van webservicesdata hebben we een stringwaarde voor GMT-tijd gecombineerd met een numerieke offset in seconden om de lokale tijd voor weersvoorspellingen te genereren. We hebben een gebruikersfunctie gemaakt die alle stappen uitvoert die nodig zijn om deze bewerking te voltooien. MapForce bevat een krachtige, interactieve debugger voor datamapping waarmee u deze transformatie eenvoudig kunt volgen en valideren. Laten we eens kijken hoe dit werkt.

Hieronder ziet u de werking van de gebruikersfunctie "calc-local-time" in ons datatransformatieproject. Zoals u kunt zien, ondersteunt MapForce data-mapping zonder code te schrijven, via een visuele interface met drag-and-drop functionaliteit.

De functie accepteert dt_txt, wat een string is die een datum en tijd bevat in de vorm "2020-02-22 18:00:00", en de numerieke waarde van de tijdzone, namelijk het verschil in seconden ten opzichte van GMT voor de locatie waarvoor de voorspelling wordt gegeven.
Zodra de gegevens zijn omgezet, wordt de uitvoer van de functie toegewezen aan kolom A van een Excel-spreadsheet. Binnen de spreadsheet is het formaat van kolom A gedefinieerd als "Datum", en dit formaat omvat ook de tijd, zoals in het voorbeeld: 20/5/2020 16:00.
Door dubbel te klikken op de header van de gebruikersfunctie, wordt deze uitgebreid om de individuele bewerkingen weer te geven:

De twee invoerwaarden staan aan de rechterkant, en de uiteindelijke uitvoerwaarde, gelabeld als A, staat helemaal links. Simpel gezegd, de functie voegt de tijdzone-verschillen toe aan de datum en tijd (dt_txt) om de lokale tijd te berekenen. MapForce bevat een ingebouwde functie voor het optellen van datums en tijden, die deze bewerking uitvoert. Deze functie is te zien op de afbeelding hierboven, direct links van de uitvoerwaarde A. Maar niets is zo eenvoudig als het lijkt! De invoerwaarden die van de webservice worden ontvangen, komen in verschillende formaten binnen en moeten worden aangepast aan het formaat en de syntaxis van de functie voor het optellen van datums en tijden.
Gegevensomzetting valideren met behulp van de MapForce-debugger
We kunnen MapForce gebruiken gegevensomzetting-debugger Om de stappen van de gebruikersfunctie te volgen en te controleren of deze het gewenste resultaat oplevert, gaan we eerst een debug-breakpoint instellen. Dit doen we door met de rechtermuisknop op het veld voor de tijdzone te klikken:

Verschillende hulpmiddelenvensters voor het debuggen worden geopend, en de transformatie wordt voortgezet totdat het breakpoint wordt bereikt. De verwerkte waarde op het breakpoint wordt gemarkeerd:

We hebben verschillende opties om de uitvoering voort te zetten. De optie "Minimale stap" biedt de meest gedetailleerde weergave van elke stap in het datatransformatieproces.

Deze commando verdeelt een stap verder en zal doorgaans twee keer stoppen voor elke verbinding: één keer wanneer de bron een waarde produceert en één keer wanneer de bestemming deze waarde verwerkt. Door herhaaldelijk op "Minimal Step" te klikken, wordt de transformatie voortgezet en kunnen we precies zien wat er gebeurt terwijl de functie calc-local-time wordt uitgevoerd:

Naarmate de uitvoering vordert, worden de waarden bij elke verbinding toegevoegd aan het venster.
De ingebouwde functie datetime-add vereist een datum- en tijdwaarde als eerste invoer en een stringwaarde die de tijdsperiode specificeert die moet worden toegevoegd, als tweede invoer. In de afbeelding hieronder laten we zien hoe we stap voor stap tot het uiteindelijke resultaat komen. De invoerwaarden voor de functie datetime-add en het uiteindelijke resultaat zijn gemarkeerd:

De oorspronkelijke offsetwaarde voor seconden is 28.800 seconden, wat gelijk is aan acht uur. Het resultaat dat wordt gegenereerd is acht uur later dan de referentietijd dt_txt, dus de output is correct.
Rekening houdend met andere gevallen
Het tijdsverschil ten opzichte van GMT is alleen positief voor locaties die zich ten oosten van GMT bevinden. Locaties die zich ten westen van GMT bevinden, moeten een negatief tijdsverschil hebben. Met andere woorden, New York ligt ten westen van Londen, en de lokale tijd is eerder. Beijing ligt ten oosten van GMT, en de lokale tijd is later.
We moeten de functie "calc-local-time" testen voor een situatie waarin de tijdzone-verschil negatief is.
Er zijn verschillende manieren waarop we dat kunnen doen. Onze lijst met locaties bevat zowel plaatsen die zich ten oosten van Greenwich Mean Time (GMT) liggen, als plaatsen die zich er westelijk van bevinden. We kunnen de uitvoering stap voor stap voortzetten totdat we een locatie tegenkomen met een negatieve tijdzone.

De webservice geeft 40 voorspellingen per stad, dus het zou tijdrovend zijn om de voorspellingen voor alle eerste vier steden te bekijken.
We kunnen de lijst met steden aanpassen door een nieuwe stad uit het westelijk halfrond bovenaan de lijst toe te voegen, of we kunnen een nieuw invoerbestand maken voor een testscenario. In veel situaties is dat een verstandige teststrategie.
Of, we kunnen een voorwaarde instellen voor het pauzeren. Als we het pauze punt zo kunnen instellen dat het alleen stopt wanneer een negatieve waarde wordt gevonden, kunnen we verder werken met ons oorspronkelijke invoerbestand. Dat is de snelste manier om tot een definitieve conclusie te komen.
Om terug te keren naar de datamapping, klikken we met de rechtermuisknop op het breakpoint om de eigenschappen ervan te wijzigen:

Dit opent een dialoogvenster waarin we een eigenschap kunnen instellen om het breakpoint voorwaardelijk te maken. Op de afbeelding hieronder wordt een voorwaarde weergegeven om de uitvoering te onderbreken als de tijdzone-waarde negatief is:

Nu kunnen we de mapping opnieuw uitvoeren in de debugmodus. De eerste steden op de invoerlijst, die zich allemaal ten oosten van Greenwich Mean Time (GMT) liggen, worden verwerkt. Zodra de eerste negatieve tijdzone-waarde wordt aangetroffen, wordt het breakpoint geactiveerd en wordt de uitvoering onderbroken.

Met behulp van dezelfde stapsgewijze methode die hierboven is beschreven, kunnen we volgen wat er gebeurt met de negatieve waarde tijdens de verwerking door de functie "calc-local-time".

De tijdzone-waarde van -25.200 seconden wordt omgezet in een string. Vervolgens voegt de ingebouwde concat-functie tekens toe aan het begin en het einde om de duur-string te creëren die gebruikt wordt door de datetime-add functie.
Het toevoegen van een negatieve waarde is hetzelfde als aftrekken, maar op dit moment is de syntaxis voor de duur nog niet helemaal correct. Het minteken (koppelteken) moet het eerste karakter van de duur-string zijn. Daarom zoekt de vervangingsfunctie naar "PT-" in de string en vervangt deze, indien gevonden, door "-PT".
De waarde van 25.200 seconden komt overeen met zeven uur. Als we zeven uur aftrekken van de invoerwaarde 2020-05-23T00:00:00, dan krijgen we 2020-05-22T17:00:00, of 22/05/2020 om 17:00 uur. We hebben nu de gebruikersfunctie gevalideerd voor gevallen met zowel positieve als negatieve offsets.
Of u nu de nauwkeurigheid van datatransformaties controleert of een onverwacht resultaat probeert te achterhalen, het debuggen van dataconversie en -transformatie in MapForce biedt diepgaand inzicht in de precieze werking van data-integratie- en ETL-projecten, op een manier die voorheen niet mogelijk was, zelfs niet bij veel duurdere data-mappingproducten.
Bekijk een korte video-demo van MapForce, of download een gratis proefversie met tutorials, hulp en nog veel meer voorbeelden om aan de slag te gaan met uw eigen project voor de integratie van JSON- en webservices, of voor andere behoeften op het gebied van data-mapping, -conversie en -transformatie!