sql >> Database teknologi >  >> RDS >> Oracle

Registrering af inkrementelle databaseændringer (Oracle til MongoDB ETL)

Registrering af tilføjelser og opdateringer til databasetabeller til datareplikering, ETL, PII-maskering og andre inkrementelle databevægelser og manipulationsaktiviteter kan automatiseres i IRI Voracity-arbejdsgange, der er designet og kørt i IRI Workbench (WB). Denne artikel forklarer, hvordan man regelmæssigt kontrollerer for ændringer i Oracle-kildetabeller for at beslutte, hvornår data skal flyttes til et MongoDB-mål.

Ændringer kan indlæses i forskellige databaser eller filer ved hjælp af en opgaveplanlagt batchfil eller shell-script. Dette kan gøres ved hjælp af et tidsstempel og specifikke felter i kildetabellen. Fejlkontrol er inkluderet og kan også reageres på.

Dette eksempel vil blive oprettet og kørt på en Windows-maskine; den kan dog nemt ændres til at fungere på en Linux- eller Unix-lignende platform.

Det er nemt at oprette batchfilen ved at bruge et Voracity Flow-diagram i WB. I dette eksempel indeholder kildetabellen kolonner med navnet CREATION_DATE og UPDATE_DATE som er vigtige i dette job.

Billedet nedenfor viser de trin, der er indeholdt i batchfilen. For at opsummere:

  • jobbet køres i en bestemt mappe
  • en miljøvariabel indstilles ved hjælp af tidsstemplet for den sidste jobkørsel
  • det aktuelle tidsstempel er registreret
  • aktuelle ændringer fanges
  • fejlniveauet kontrolleres og reageres på, hvis det lykkes eller ej
  • det aktuelle tidsstempel overskriver det seneste tidsstempel
  • de ændrede data konverteres til CSV
  • en stall opstår for at vente på, at den sidste fil eksisterer
  • CSV-filen importeres til MongoDB
  • fejlniveauet er kontrolleret, den aktuelle fil er afkortet
  • ændringsfilen slettes


Hver opgaveblok i arbejdsgangen er forklaret nedenfor. Se denne artikel for at få en vejledning i at opbygge Voracity-arbejdsgange fra paletten.

Skift bibliotek

Denne blok ændrer den aktuelle arbejdsmappe til den specificerede.

Indstil LASTTIME

Denne kommandolinjeblok indstiller en miljøvariabel kaldet LASTTIME . Værdien indstillet til variablen er indholdet af filen LastTime.txt . Tidsstemplet i denne fil er det tidsstempel, der blev registreret under den sidste kørsel af dette job. Hvis dette er den første kørsel, skal denne fil laves manuelt med et vilkårligt tidsstempel dateret, før dette job køres.

Timestamp.scl

Denne transformationsblok bruger CoSort SortCL-programmet i Voracity til at forespørge kildedatabasen for det aktuelle tidspunkt. Dette tidsstempel gemmes i en fil kaldet LastTimeTemp.txt . Grunden til at det er gemt i en temp-fil er, at både de nuværende og sidste tidsstempler kan bevares indtil fejlkontrol sker.

Det er vigtigt, at tidsstemplet kommer fra databasen, og ikke den lokale maskine. Dette undgår problemer, hvor databasen og udførelsesmiljøet ikke er synkroniseret.

Changes.scl

Denne transformationsblok gør et par ting. Nedenfor vises Transform Mapping Diagram for denne blok. Input er kildetabellen, og output er filen current.txt .

I inputtet Sektionsindstillinger, en forespørgsel sendes til kildetabellen for alle poster, der har en CREATION_DATE eller UPDATE_DATE større end miljøvariablen LASTTIME .

Mens output ser ud til at have to mål, bliver dataene faktisk tilføjet til den samme fil ved hjælp af to forskellige betingelser. I den første outputsektion er der en Inkluder erklæring, der finder alle poster, der har en CREATION_DATE større end SIDSTE GANG . Der er også et ekstra outputfelt kaldet CDC_TYPE . Strengen "CREATE" optages i det nye felt.

I den anden outputsektion, en Inkluder statement finder alle poster, der har en UPDATE_DATE større end SIDSTE GANG og hvor CREATION_DATE er ikke lig med UPDATE_DATE. Dette sikrer, at nyoprettede filer ikke er inkluderet i dette pas. Strengen "UPDATE" er optaget i CDC_TYPE.

Fejl CoSort

Denne beslutningsblok kontrollerer variablen ERRORLEVEL for at sikre, at den returnerede 0 (eller succes) efter at have kørt CoSort-jobbet ovenfor. Hvis den ikke gjorde det, fortsætter jobbet til EXIT blok, hvor jobbet afsluttes. Hvis det returnerer sandt, fortsætter jobbet til næste blok.

Omdøb LastTimeTemp

Denne kommandoblok kopierer indholdet af LastTimeTemp.txt til LastTime.txt. Dette registrerer det tidligere registrerede aktuelle tidsstempel i filen, der skal bruges til næste jobkørsel.

Convert.scl

Denne transformationsblok tager current.txt og konverterer den til changes.csv . Konverteringen er fra den standardafgrænsede filtype til CSV. Brug af CSV-procestypen i CoSort sætter en overskriftsrække foran outputfilen ved hjælp af feltnavnene. Dette er opgaveblokken, hvor jeg kunne anvende andre manipulationer (såsom datamaskering) på dataene, hvis jeg vælger det.

Vent filer

Denne venteblok blokerer batchfilen i 3 sekunder og kontrollerer derefter for eksistensen af ​​changes.csv fil, før du fortsætter.

MongoImport

Denne kommandoblok udfører mongoimport-kommandoen ved hjælp af de parametre, der er angivet i egenskabsvisningen som vist nedenfor.

Parametrene indikerer, at MongoDB-databasen hedder fnx skal indlæses med indholdet af filen changes.csv som er af typen csv og indeholder en overskrift som definerer felterne.

Bemærk, at Voracity understøtter andre metoder til at flytte og manipulere MongoDB-data. Se dette eksempel på brug af Progress ODBC-drivere til datamaskering ved hjælp af indbyggede "FieldShield"-funktioner. Voracity kan også behandle BSON-data direkte via API gennem /PROCESS=MongoDB-understøttelse i CoSort v10, også nu.

Fejl ved indlæsning

Denne beslutningsblok kontrollerer variablen ERRORLEVEL for at sikre, at den returnerede 0 (eller succes) efter import til MongoDB. Hvis det ikke gjorde det, fortsætter jobbet til Slet-ændringer og AFSLUT blokke, hvor jobbet afsluttes. Hvis det returnerer sandt, fortsætter jobbet til næste blok.

Trunker strøm

Denne kommandoblok trunkerer filen current.txt . Dette er for at rydde de poster, der blev indlæst i MongoDB. Hvis importen mislykkedes, og blokken ovenfor forlod jobbet, føjes disse ændrede registreringer til næste gang. Efterhånden som jobbet gentog sig, ville de derefter blive indlæst i MongoDB med den næste gruppe af ændrede poster.

Slet ændringer

Denne kommandoblok sletter changes.csv så det næste pas startes med en nyoprettet fil til passet.

Batchfil

Batchfilen og transformationsscripts oprettes, når flowdiagrammet eksporteres. En kopi af batchfilen er nedenfor. Hver blok tilføjer eksekverbare linjer til batchfilen.

Opgaveplanlægning

Ved at bruge Windows Task Scheduler kan denne batchfil udføres gentagne gange for at fange ændringerne i kildedatabasen.

Konklusion

Med lidt planlægning og brug af kommandoblokke kan ændringer til en databasetabel registreres automatisk ved hjælp af en batch-fil og derefter planlægges til at køre med udvalgte intervaller.

Kontakt [email protected] eller din IRI-repræsentant for at få flere oplysninger eller hjælp til din use case

  1. Denne tilgang adskiller sig fra log-baserede ændringsdatafangstløsninger, som typisk har ydeevneflaskehalse og er begrænset til specifikke databaser og ikke muliggør samtidig datatransformation, PII-datamaskering, rensning og rapportering.

  1. SQL udvælger rækker efter seneste dato med to unikke kolonner

  2. UTC_DATE Eksempler – MySQL

  3. MySQL Tutorial:MySQL IN-klausul (Grundlæggende)

  4. Hvordan bruger man skemaer i Django?