sql >> Databasteknik >  >> RDS >> Database

Inkrementell datamaskering och mappning:Upptäcker ändringar och uppdaterar...

Inkrementell datareplikering, maskering, integration (ETL) och andra datauppdateringsoperationer är vanliga i databasmiljöer som ofta uppdateras. Dessa jobb kräver upptäckt av tillägg och uppdateringar av tabeller. Sådana dynamiska operationer är lätta att automatisera i IRI Voracity-arbetsflöden som utformats och körs i IRI Workbench (WB).

Den här artikeln innehåller ett arbetsflödesexempel som användare av Voracity, FieldShield, CoSort eller NextForm DBMS-utgåvan kan implementera för att regelbundet söka efter ändringar i en källtabell (Oracle i det här fallet) för att bestämma när data ska flyttas till ett nytt mål (MySQL). Den visar också hur data kan maskeras villkorligt som en del av denna process. Observera att IRI också arbetar med en loggbaserad metod för att öka data i realtid utan behov av deltakolumnvärden.

Ä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 också och kan även åtgärdas.

Det här exemplet skapades och kördes på en Windows-maskin. Den kan enkelt modifieras för att fungera på en Linux- eller Unix-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 CREATED_DATE och UPDATED_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 tidsstämpeln för det 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
  • en regel för att redigera e-postmeddelanden som slutar på "edu" används i målet
  • en regel för att delvis redigera SSN-fältet används i målet
  • den ändrade informationen läses in i MySQL
  • felnivån är kontrollerad, den tillfälliga tidsstämpelfilen byter namn

Varje uppgiftsblock i arbetsflödet förklaras nedan. De två lila blocken är transformmappningsblock och representerar CoSort SortCL-jobbskript. Mappningsdiagrammen och jobbskripten som representeras av vart och ett av blocken visas nedan för tydlighetens skull. 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.

Den här filen innehåller en rad:"2008-09-10 09:39:23.5"

Timestamp.scl

Den här uppgiften använder SortCL-programmet 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.

Mappningsdiagrammet och det serialiserade skriptet för det här jobbet är som följer:

Changes.scl

Detta jobb gör huvudextrakten, transformationen, belastningen. Input är källtabellen i Oracle och output är en liknande formaterad tabell i MySQL:

I inmatningsavsnittet, en fråga skickas till källtabellen för alla poster som har en CREATED_DATE eller UPDATED_DATE större än miljövariabeln LASTTIME . Frågan är "SELECT * FROM SCOTT.CLIENT WHERE CREATED> TO_TIMESTAMP(\'$LASTTIME\', \'YYYY-MM-DD HH24:MI:SS.FF1\') OR (UPDATED> TO_TIMESTAMP(\'$LASTTIME\ ', \'ÅÅÅÅ-MM-DD HH24:MI:SS.FF1\'))".

Dessutom läggs ett villkor till för att kontrollera EMAIL kolumn för data som slutar på "edu". Detta kommer att användas i en villkorlig datamaskeringsfunktion i utdata. I utgången visas en If-Then-Else uttalande läggs till i EMAIL kolumn. Den använder det tidigare skapade villkoret för att testa data. Om uppgifterna slutar på "edu", redigeras e-postadressen. Om inte, kopieras e-postadressen från input.

En andra redigeringsfunktion används i SSN kolumn. Den redigerar de tre första tecknen, lämnar bindestrecket, redigerar de två följande tecknen, lämnar bindestrecket och lämnar de fyra sista tecknen. Till exempel ***-**-6789.

Nedan är det serialiserade SortCL-jobbskriptet som beskrivs ovan så att du kan undersöka frågan och den villkorliga syntaxen som är involverad i de inkrementella delta:

Fel CoSort

Beslutsblocket kontrollerar variabeln ERRORLEVEL för att se till att den returnerade 0 (för framgång) efter att ha kört SortCL-jobbet ovan. Om det inte gjorde det fortsätter jobbet till SLUT 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.

Satsfil

Batchfilen och transformationsskripten skapas när flödesdiagrammet (visas ovan) 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 så att du kan flytta, kartlägga, maskera och på annat sätt manipulera ändrad data på en inkrementell basis.

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


  1. Hur man hittar minimivärden i kolumner

  2. SQL-fråga för att hämta den senaste raden för varje instans av en given nyckel

  3. Problem med createb i postgres

  4. Hur fungerar MySQL-index?