sql >> Database >  >> RDS >> Oracle

Incrementele databasewijzigingen detecteren (Oracle naar MongoDB ETL)

Het detecteren van toevoegingen en updates aan databasetabellen voor gegevensreplicatie, ETL, PII-maskering en andere incrementele activiteiten voor gegevensverplaatsing en -manipulatie kan worden geautomatiseerd in IRI Voracity-workflows die zijn ontworpen en uitgevoerd in IRI Workbench (WB). In dit artikel wordt uitgelegd hoe u regelmatig controleert op wijzigingen in Oracle-brontabellen om te beslissen wanneer gegevens naar een MongoDB-doel moeten worden verplaatst.

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 inbegrepen en er kan ook op worden gereageerd.

Dit voorbeeld wordt gemaakt en uitgevoerd op een Windows-machine; het kan echter eenvoudig worden aangepast om te werken op een Linux- of Unix-achtig platform.

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 CREATION_DATE en UPDATE_DATE die belangrijk zijn in dit werk.

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 wordt geregistreerd
  • huidige wijzigingen worden vastgelegd
  • het foutniveau wordt gecontroleerd en opgevolgd, indien succesvol of niet
  • de huidige tijdstempel overschrijft de laatste uitvoeringstijdstempel
  • de gewijzigde gegevens worden geconverteerd naar CSV
  • het wachten tot het laatste bestand bestaat
  • het CSV-bestand wordt geïmporteerd in MongoDB
  • het foutniveau is gecontroleerd, het huidige bestand is afgekapt
  • het wijzigingsbestand is verwijderd


Elk taakblok in de workflow wordt hieronder uitgelegd. 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.

Tijdstempel.scl

Dit transformatieblok gebruikt het CoSort SortCL-programma in Voracity 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.

Wijzigingen.scl

Dit transformatieblok doet een paar dingen. Hieronder wordt het Transform Mapping-diagram voor dit blok weergegeven. Invoer is de brontabel en uitvoer is het bestand current.txt .

In de invoer Sectie-opties, er wordt een query verzonden naar de brontabel voor alle records die een CREATION_DATE . hebben of UPDATE_DATE groter dan de omgevingsvariabele LASTTIME .

Hoewel de uitvoer twee doelen lijkt te hebben, worden de gegevens in feite onder twee verschillende voorwaarden aan hetzelfde bestand toegevoegd. In het eerste uitvoergedeelte is er een Include statement dat alle records vindt met een CREATION_DATE groter dan LASTTIME . Er is ook een extra uitvoerveld genaamd CDC_TYPE . De tekenreeks "CREATE" is opgenomen in dat nieuwe veld.

In het tweede uitvoergedeelte, een Include statement vindt alle records met een UPDATE_DATE groter dan LASTTIME en waar CREATION_DATE is niet gelijk aan UPDATE_DATE. Dit zorgt ervoor dat nieuw aangemaakte bestanden niet in deze pas worden opgenomen. De tekenreeks "UPDATE" is opgenomen in CDC_TYPE.

Foutcosortering

Dit beslissingsblok controleert de variabele ERRORLEVEL om ervoor te zorgen dat het 0 (of succes) retourneerde na het uitvoeren van de bovenstaande CoSort-taak. Als dit niet het geval is, gaat de taak verder naar de EXIT 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.

Convert.scl

Dit transformatieblok duurt current.txt en converteert het naar changes.csv . De conversie is van het standaard gescheiden bestandstype naar CSV. Als u het CSV-procestype in CoSort gebruikt, wordt een koprij toegevoegd aan het uitvoerbestand met behulp van de veldnamen. Dit is het taakblok waar ik andere manipulaties (zoals gegevensmaskering) op de gegevens kan toepassen als ik dat wil.

Wacht bestanden

Dit wachtblok blokkeert het batchbestand gedurende 3 seconden en controleert vervolgens op het bestaan ​​van de changes.csv bestand voordat u verder gaat.

MongoImport

Dit opdrachtblok voert het mongoimport-commando uit met behulp van de parameters die zijn gespecificeerd in de eigenschappenweergave, zoals hieronder weergegeven.

De parameters geven aan dat de MongoDB-database met de naam fnx moet worden geladen met de inhoud van het bestand changes.csv die van het type csv . is en bevat een kopregel die de velden definieert.

Merk op dat Voracity andere methoden ondersteunt voor het verplaatsen en manipuleren van MongoDB-gegevens. Bekijk dit voorbeeld van het gebruik van Progress ODBC-stuurprogramma's voor gegevensmaskering met behulp van ingebouwde "FieldShield"-functies. Voracity kan BSON-gegevens ook rechtstreeks via API verwerken via /PROCESS=MongoDB-ondersteuning in CoSort v10, nu ook.

Fout bij laden

Dit beslissingsblok controleert de variabele ERRORLEVEL om ervoor te zorgen dat het 0 (of succes) retourneerde na het importeren in MongoDB. Als dit niet het geval is, gaat de taak verder naar deVerwijder-Wijzigingen en EXIT blokken waar de taak wordt beëindigd. Als het true retourneert, gaat de taak verder naar het volgende blok.

Stroom afkappen

Dit opdrachtblok kapt het bestand current.txt af . Dit is om de records te wissen die in MongoDB zijn geladen. Als het importeren is mislukt en het bovenstaande blok de taak heeft verlaten, worden deze gewijzigde records bij de volgende doorgang toegevoegd. Vervolgens, terwijl de taak werd herhaald, zouden ze in MongoDB worden geladen met de volgende groep gewijzigde records.

Wijzigingen verwijderen

Dit opdrachtblok verwijdert changes.csv zodat de volgende pas wordt gestart met een nieuw aangemaakt bestand voor de pas.

Batchbestand

Het batchbestand en de transformatiescripts worden gemaakt wanneer het stroomdiagram 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.

Neem contact op met [email protected] of uw IRI-vertegenwoordiger voor meer informatie of hulp bij uw gebruiksscenario

  1. Deze aanpak verschilt van op logbestanden gebaseerde oplossingen voor het vastleggen van wijzigingsgegevens, die doorgaans prestatieknelpunten hebben en beperkt zijn tot specifieke databases en die geen gelijktijdige gegevenstransformatie, PII-gegevensmaskering, opschoning mogelijk maken , en rapportage.

  1. Resultaten opnemen die gelijk zijn voor de laatste plaats bij gebruik van de TOP-clausule in SQL Server

  2. Het ROOT-wachtwoord opnieuw instellen in MySQL 5.6

  3. Toekomst van Postgres-XL

  4. Migreren van Google Cloud SQL voor MySQL naar een lokale server