Incrementele gegevensreplicatie, maskering, integratie (ETL) en andere bewerkingen voor gegevensvernieuwing komen vaak voor in database-omgevingen die regelmatig worden bijgewerkt. Deze taken vereisen de detectie van toevoegingen en updates aan tabellen. Dergelijke dynamische bewerkingen zijn eenvoudig te automatiseren in IRI Voracity-workflows die zijn ontworpen en uitgevoerd in IRI Workbench (WB).
Dit artikel bevat een werkstroomvoorbeeld dat gebruikers van de Voracity-, FieldShield-, CoSort- of NextForm DBMS-editie kunnen implementeren om regelmatig te controleren op wijzigingen in een brontabel (in dit geval Oracle) om te beslissen wanneer gegevens naar een nieuw doel (MySQL) moeten worden verplaatst. Het laat ook zien hoe gegevens voorwaardelijk kunnen worden gemaskeerd als onderdeel van dit proces. Merk op dat IRI ook werkt aan een op logbestanden gebaseerde benadering om gegevens in realtime te verhogen zonder dat er deltakolomwaarden nodig zijn.
Wijzigingen kunnen in verschillende databases of bestanden worden geladen met behulp van een taakgepland batchbestand of shellscript. Dit kan met behulp van een tijdstempel en specifieke velden in de brontabel. Foutcontrole is ook inbegrepen en kan ook worden uitgevoerd.
Dit voorbeeld is gemaakt en uitgevoerd op een Windows-computer. Het kan eenvoudig worden aangepast om op een Linux- of Unix-platform te werken.
Het maken van het batchbestand is eenvoudig met behulp van een Voracity Flow-diagram in WB. In dit voorbeeld bevat de brontabel kolommen met de naam CREATED_DATE en UPDATED_DATE die belangrijk zijn in deze baan.
De onderstaande afbeelding toont de stappen die in het batchbestand zijn opgenomen. Samenvattend:
- de taak wordt uitgevoerd in een specifieke map
- een omgevingsvariabele wordt ingesteld met behulp van het tijdstempel van de laatste taakuitvoering
- de huidige tijdstempel is opgenomen
- huidige wijzigingen worden vastgelegd
- het foutniveau wordt gecontroleerd en er wordt actie ondernomen, indien succesvol of niet
- de huidige tijdstempel overschrijft de laatste runtijdstempel
- een regel voor het redigeren van e-mails die eindigen op "edu" wordt gebruikt in het doel
- een regel om het SSN-veld gedeeltelijk te redigeren wordt gebruikt in het doel
- de gewijzigde gegevens worden in MySQL geladen
- het foutniveau is gecontroleerd, het tijdelijke tijdstempelbestand is hernoemd
Elk taakblok in de workflow wordt hieronder uitgelegd. De twee paarse blokken zijn transformatietoewijzingsblokken en vertegenwoordigen CoSort SortCL-taakscripts. De toewijzingsdiagrammen en taakscripts die door elk van de blokken worden weergegeven, worden hieronder voor de duidelijkheid weergegeven. Zie dit artikel voor meer informatie over het bouwen van Voracity-workflows vanuit het palet.
Directory wijzigen
Dit blok verandert de huidige werkdirectory in de gespecificeerde.
LASTTIME instellen
Dit opdrachtregelblok stelt een omgevingsvariabele in met de naam LASTTIME . De waarde die is ingesteld op de variabele is de inhoud van het bestand LastTime.txt . De tijdstempel in dit bestand is de tijdstempel die is vastgelegd tijdens de laatste uitvoering van deze taak. Als dit de eerste keer is dat deze taak wordt uitgevoerd, moet dit bestand handmatig worden gemaakt met een willekeurige tijdstempel die is gedateerd voordat deze taak wordt uitgevoerd.
Dit bestand bevat één regel:“2008-09-10 09:39:23.5”
Tijdstempel.scl
Deze taak gebruikt het SortCL-programma om de brondatabase op te vragen voor de huidige tijd. Die tijdstempel wordt opgeslagen in een bestand met de naam LastTimeTemp.txt . De reden dat het wordt opgeslagen in een tijdelijk bestand, is dat zowel de huidige als de laatste tijdstempel behouden kunnen blijven totdat er een foutcontrole plaatsvindt.
Het is belangrijk dat de tijdstempel uit de database komt en niet uit de lokale machine. Dit voorkomt problemen waarbij de database en de uitvoeringsomgeving niet gesynchroniseerd zijn.
Het toewijzingsdiagram en het geserialiseerde script voor deze taak zijn als volgt:
Wijzigingen.scl
Deze taak voert de belangrijkste extractie, transformatie en belasting uit. Invoer is de brontabel in Oracle en uitvoer is een tabel met dezelfde opmaak in MySQL:
In de invoersectie, er wordt een query verzonden naar de brontabel voor alle records die een CREATED_DATE . hebben of UPDATED_DATE groter dan de omgevingsvariabele LASTTIME . De query is "SELECT * FROM SCOTT.CLIENT WHERE CREATED> TO_TIMESTAMP(\'$LASTTIME\', \'YYYY-MM-DD HH24:MI:SS.FF1\') OR (UPDATED> TO_TIMESTAMP(\'$LASTTIME\') ', \'JJJJ-MM-DD HH24:MI:SS.FF1\'))”.
Daarnaast wordt een voorwaarde toegevoegd om de EMAIL . te controleren kolom voor gegevens die eindigen op "edu". Dit wordt gebruikt in een voorwaardelijke gegevensmaskeringsfunctie in de uitvoer. In de uitvoer, een Als-Dan-Anders statement is toegevoegd aan de EMAIL kolom. Het gebruikt de eerder gemaakte voorwaarde om de gegevens te testen. Als de gegevens eindigen op "edu", wordt het e-mailadres verwijderd. Zo niet, dan wordt het e-mailadres gekopieerd uit de invoer.
Een tweede redactiefunctie wordt gebruikt in de SSN kolom. Het verwijdert de eerste drie karakters, verlaat het streepje, redigeert de volgende twee karakters, verlaat het streepje, en laat de laatste vier karakters. Bijvoorbeeld ***-**-6789.
Hieronder vindt u het hierboven beschreven geserialiseerde SortCL-taakscript, zodat u de query en voorwaardelijke syntaxis kunt onderzoeken die betrokken zijn bij de incrementele delta's:
Fout bij sorteren
Het beslissingsblok controleert de variabele ERRORLEVEL om er zeker van te zijn dat het 0 retourneerde (voor succes) na het uitvoeren van de SortCL-taak hierboven. Als dit niet het geval is, gaat de taak door tot het END blok waar de taak wordt beëindigd. Als het true retourneert, gaat de taak verder naar het volgende blok.
Naam LastTimeTemp wijzigen
Dit opdrachtblok kopieert de inhoud van LastTimeTemp.txt naar LastTime.txt . Dit registreert de eerder vastgelegde huidige tijdstempel in het bestand dat moet worden gebruikt voor de volgende taakuitvoering.
Batchbestand
Het batchbestand en de transformatiescripts worden gemaakt wanneer het stroomdiagram (hierboven weergegeven) wordt geëxporteerd. Een kopie van het batchbestand vindt u hieronder. Elk blok voegt uitvoerbare regels toe aan het batchbestand.
Taakplanner
Met behulp van de Windows Taakplanner kan dit batchbestand herhaaldelijk worden uitgevoerd om de wijzigingen in de brondatabase vast te leggen.
Conclusie
Met een beetje planning en het gebruik van opdrachtblokken kunnen wijzigingen in een databasetabel automatisch worden gedetecteerd met behulp van een batchbestand en vervolgens gepland om met geselecteerde intervallen te worden uitgevoerd, zodat u gewijzigde gegevens op een incrementele basis.
Neem contact op met [email protected] of uw IRI-vertegenwoordiger voor meer informatie of hulp bij uw gebruiksscenario.