sql >> Databasteknik >  >> RDS >> Oracle

Upptäcka inkrementella databasändringar (Oracle till MongoDB ETL)

Detektering av tillägg och uppdateringar av databastabeller för datareplikering, ETL, PII-maskering och andra inkrementella datarörelser och manipuleringsaktiviteter kan automatiseras i IRI Voracity-arbetsflöden som utformats och körs i IRI Workbench (WB). Den här artikeln förklarar hur du regelbundet letar efter ändringar i Oracles källtabeller för att bestämma när data ska flyttas till ett MongoDB-mål.

Ändringar kan laddas in i olika databaser eller filer med hjälp av en uppgiftsschemalagd batchfil eller skalskript. Detta kan göras med hjälp av en tidsstämpel och specifika fält i källtabellen. Felkontroll ingår och kan även reageras på.

Det här exemplet kommer att skapas och köras på en Windows-maskin; den kan dock enkelt modifieras för att fungera på en Linux- eller Unix-liknande plattform.

Att skapa batchfilen är enkelt med hjälp av ett Voracity Flow-diagram i WB. I det här exemplet innehåller källtabellen kolumner med namnet CREATION_DATE och UPDATE_DATE som är viktiga i det här jobbet.

Bilden nedan visar stegen som finns i batchfilen. För att sammanfatta:

  • jobbet körs i en specifik katalog
  • en miljövariabel ställs in med hjälp av tidsstämpeln för den senaste jobbkörningen
  • den aktuella tidsstämpeln registreras
  • aktuella ändringar registreras
  • felnivån kontrolleras och åtgärdas om den lyckas eller inte
  • den aktuella tidsstämpeln skriver över den senaste körningens tidsstämpel
  • den ändrade informationen konverteras till CSV
  • ett stall uppstår för att vänta på att den sista filen existerar
  • CSV-filen importeras till MongoDB
  • felnivån är kontrollerad, den aktuella filen är trunkerad
  • ändringsfilen raderas


Varje uppgiftsblock i arbetsflödet förklaras nedan. Se den här artikeln för hur man bygger Voracity-arbetsflöden från paletten.

Ändra katalog

Detta block ändrar den aktuella arbetskatalogen till den specificerade.

Ange LASTTIME

Detta kommandoradsblock ställer in en miljövariabel som heter LASTTIME . Värdet som ställs in på variabeln är innehållet i filen LastTime.txt . Tidsstämpeln i den här filen är den tidsstämpel som registrerades under den senaste körningen av det här jobbet. Om detta är den första körningen måste den här filen skapas manuellt med en godtycklig tidsstämpel daterad innan det här jobbet körs.

Timestamp.scl

Detta transformationsblock använder programmet CoSort SortCL i Voracity för att fråga källdatabasen för den aktuella tiden. Den tidsstämpeln sparas i en fil som heter LastTimeTemp.txt . Anledningen till att den lagras i en temporär fil är för att både nuvarande och senaste tidsstämplar ska kunna bevaras tills felkontroll sker.

Det är viktigt att tidsstämpeln kommer från databasen och inte från den lokala maskinen. Detta undviker problem där databasen och exekveringsmiljön inte är synkroniserade.

Changes.scl

Detta transformationsblock gör några saker. Nedan visas Transform Mapping Diagram för detta block. Indata är källtabellen och utdata är filen current.txt .

I ingången Sektionsalternativ, en fråga skickas till källtabellen för alla poster som har en CREATION_DATE eller UPDATE_DATE större än miljövariabeln LASTTIME .

Även om utdatan verkar ha två mål, läggs data faktiskt till i samma fil med två olika villkor. I den första utdatasektionen finns en Inkludera uttalande som hittar alla poster som har en CREATION_DATE större än SIST . Det finns också ett extra utdatafält som heter CDC_TYPE . Strängen "CREATE" spelas in i det nya fältet.

I den andra utdatasektionen visas en Inkludera uttalandet hittar alla poster som har en UPDATE_DATE större än SIST och där CREATION_DATE är inte lika med UPDATE_DATE. Detta säkerställer att nyskapade filer inte ingår i detta pass. Strängen "UPDATE" är inspelad i CDC_TYPE.

Fel CoSort

Detta beslutsblock kontrollerar variabeln ERRORLEVEL för att se till att den returnerade 0 (eller framgång) efter att ha kört CoSort-jobbet ovan. Om det inte gjorde det fortsätter jobbet till AVSLUTA block där jobbet avslutas. Om det returnerar sant fortsätter jobbet till nästa block.

Byt namn på LastTimeTemp

Detta kommandoblock kopierar innehållet i LastTimeTemp.txt till LastTime.txt. Detta registrerar den tidigare fångade aktuella tidsstämpeln i filen som ska användas för nästa jobbkörning.

Convert.scl

Detta transformeringsblock tar current.txt och konverterar den till changes.csv . Konverteringen är från den standardavgränsade filtypen till CSV. Genom att använda CSV-processtypen i CoSort läggs en rubrikrad till utdatafilen med fältnamnen. Det här är uppgiftsblocket där jag skulle kunna tillämpa andra manipulationer (som datamaskering) på data om jag så vill.

Vänta filer

Detta vänteblock stoppar batchfilen i 3 sekunder och kontrollerar sedan om det finns changes.csv fil innan du fortsätter.

MongoImport

Det här kommandoblocket kör mongoimport-kommandot med de parametrar som anges i egenskapsvyn som visas nedan.

Parametrarna indikerar att MongoDB-databasen heter fnx ska laddas med innehållet i filen changes.csv som är av typen csv och innehåller en rubrik som definierar fälten.

Observera att Voracity stöder andra metoder för att flytta och manipulera MongoDB-data. Se detta exempel på hur du använder Progress ODBC-drivrutiner för datamaskering med inbyggda "FieldShield"-funktioner. Voracity kan också bearbeta BSON-data direkt via API genom /PROCESS=MongoDB-stöd i CoSort v10, nu också.

Fel vid laddning

Detta beslutsblock kontrollerar variabeln ERRORLEVEL för att se till att den returnerade 0 (eller framgång) efter import till MongoDB. Om det inte gjorde det fortsätter jobbet till Ta bort-ändringar och AVSLUTA block där jobbet avslutas. Om det returnerar sant fortsätter jobbet till nästa block.

Trunkera ström

Detta kommandoblock trunkerar filen current.txt . Detta för att rensa ut posterna som laddades in i MongoDB. Om importen misslyckades och blocket ovan lämnade jobbet, läggs dessa ändrade poster till vid nästa pass. Sedan, när jobbet upprepades, skulle de laddas in i MongoDB med nästa grupp av ändrade poster.

Ta bort ändringar

Detta kommandoblock tar bort changes.csv så att nästa pass startas med en nyskapad fil för passet.

Satsfil

Batchfilen och transformationsskripten skapas när flödesdiagrammet exporteras. En kopia av batchfilen finns nedan. Varje block lägger till körbara rader till batchfilen.

Task Scheduler

Med hjälp av Windows Task Scheduler kan den här batchfilen köras upprepade gånger för att fånga ändringarna i källdatabasen.

Slutsats

Med lite planering och användning av kommandoblock kan ändringar i en databastabell upptäckas automatiskt med hjälp av en batchfil och sedan schemaläggas att köras med valda intervall.

Kontakta [email protected] eller din IRI-representant för mer information eller hjälp med ditt användningsfall

  1. Det här tillvägagångssättet skiljer sig från loggbaserade ändringsdatainsamlingslösningar, som vanligtvis har prestandaflaskhalsar och är begränsade till specifika databaser och inte möjliggör samtidig datatransformation, PII-datamaskering, rensning och rapportering.

  1. 6 sätt att kontrollera om en tabell finns i SQL Server (T-SQL-exempel)

  2. UUID kollisionsrisk med hjälp av olika algoritmer

  3. Migrerar alla till molnet?

  4. GROUP BY för att kombinera/konkatera en kolumn