Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erkennen inkrementeller Datenbankänderungen (Oracle zu MongoDB ETL)

Das Erkennen von Hinzufügungen und Aktualisierungen von Datenbanktabellen für Datenreplikation, ETL, PII-Maskierung und andere inkrementelle Datenverschiebungs- und Manipulationsaktivitäten kann in IRI Voracity-Workflows automatisiert werden, die in IRI Workbench (WB) entworfen und ausgeführt werden. In diesem Artikel wird erläutert, wie Sie regelmäßig nach Änderungen in Oracle-Quelltabellen suchen, um zu entscheiden, wann Daten in ein MongoDB-Ziel verschoben werden sollen.

Änderungen können mithilfe einer Task-geplanten Stapeldatei oder eines Shell-Skripts in verschiedene Datenbanken oder Dateien geladen werden. Dies kann mithilfe eines Zeitstempels und bestimmter Felder in der Quelltabelle erfolgen. Fehlerprüfung ist inklusive und kann auch darauf reagiert werden.

Dieses Beispiel wird auf einem Windows-Computer erstellt und ausgeführt; es kann jedoch leicht modifiziert werden, um auf einer Linux- oder Unix-ähnlichen Plattform zu funktionieren.

Das Erstellen der Batch-Datei ist mit einem Voracity-Flussdiagramm in WB einfach. In diesem Beispiel enthält die Quelltabelle Spalten mit dem Namen CREATION_DATE und UPDATE_DATE die in diesem Beruf wichtig sind.

Das folgende Bild zeigt die Schritte, die in der Batchdatei enthalten sind. Zusammenfassend:

  • der Job wird in einem bestimmten Verzeichnis ausgeführt
  • eine Umgebungsvariable wird mit dem Zeitstempel der letzten Jobausführung gesetzt
  • der aktuelle Zeitstempel wird erfasst
  • Aktuelle Änderungen werden erfasst
  • der Fehlerlevel wird geprüft und bei Erfolg oder Misserfolg wird darauf reagiert
  • der aktuelle Zeitstempel überschreibt den Zeitstempel der letzten Ausführung
  • die geänderten Daten werden in CSV konvertiert
  • es kommt zu einem Stillstand, um zu warten, bis die letzte Datei existiert
  • die CSV-Datei wird in MongoDB importiert
  • der Fehlerlevel wird überprüft, die aktuelle Datei wird abgeschnitten
  • die Änderungsdatei wird gelöscht


Jeder Aufgabenblock im Workflow wird unten erklärt. Eine Anleitung zum Erstellen von Voracity-Workflows aus der Palette finden Sie in diesem Artikel.

Verzeichnis wechseln

Dieser Block ändert das aktuelle Arbeitsverzeichnis in das angegebene.

LASTTIME einstellen

Dieser Befehlszeilenblock setzt eine Umgebungsvariable namens LASTTIME . Der für die Variable festgelegte Wert ist der Inhalt der Datei LastTime.txt . Der Zeitstempel in dieser Datei ist der Zeitstempel, der während der letzten Ausführung dieses Jobs aufgezeichnet wurde. Wenn dies die erste Ausführung ist, muss diese Datei manuell mit einem beliebigen Zeitstempel erstellt werden, der vor der Ausführung dieses Jobs datiert ist.

Zeitstempel.scl

Dieser Transformationsblock verwendet das Programm CoSort SortCL in Voracity, um die Quelldatenbank nach der aktuellen Zeit abzufragen. Dieser Zeitstempel wird in einer Datei namens LastTimeTemp.txt gespeichert . Der Grund für die Speicherung in einer temporären Datei besteht darin, dass sowohl der aktuelle als auch der letzte Zeitstempel beibehalten werden können, bis eine Fehlerprüfung erfolgt.

Es ist wichtig, dass der Zeitstempel aus der Datenbank stammt und nicht vom lokalen Computer. Dadurch werden Probleme vermieden, bei denen die Datenbank und die Ausführungsumgebung nicht synchronisiert sind.

Änderungen.scl

Dieser Transformationsblock macht ein paar Dinge. Unten ist das Transform-Mapping-Diagramm für diesen Block dargestellt. Eingabe ist die Quelltabelle und Ausgabe ist die Datei current.txt .

In der Eingabe Section Options, eine Abfrage wird an die Quelltabelle für alle Datensätze gesendet, die ein CREATION_DATE haben oder UPDATE_DATE größer als die Umgebungsvariable LASTTIME .

Während die Ausgabe zwei Ziele zu haben scheint, werden die Daten tatsächlich unter Verwendung von zwei unterschiedlichen Bedingungen an dieselbe Datei angehängt. Im ersten Ausgabeabschnitt gibt es ein Include -Anweisung, die alle Datensätze findet, die ein CREATION_DATE haben größer als LASTTIME . Es gibt auch ein zusätzliches Ausgabefeld namens CDC_TYPE . Die Zeichenfolge „CREATE“ wird in diesem neuen Feld aufgezeichnet.

Im zweiten Ausgabeabschnitt ein Include -Anweisung findet alle Datensätze, die ein UPDATE_DATE haben größer als LASTTIME und wo CREATION_DATE ist nicht gleich UPDATE_DATE. Dadurch wird sichergestellt, dass neu erstellte Dateien nicht in diesem Durchlauf enthalten sind. Die Zeichenfolge „UPDATE“ wird in CDC_TYPE. aufgezeichnet

Fehler CoSortierung

Dieser Entscheidungsblock prüft die Variable ERRORLEVEL um sicherzustellen, dass es 0 (oder Erfolg) zurückgegeben hat, nachdem der obige CoSort-Job ausgeführt wurde. Ist dies nicht der Fall, wird der Job bis zum EXIT fortgesetzt Block, wo der Job beendet wird. Wenn es wahr zurückgibt, fährt der Job mit dem nächsten Block fort.

LastTimeTemp umbenennen

Dieser Befehlsblock kopiert den Inhalt von LastTimeTemp.txt nach LastTime.txt. Dadurch wird der zuvor erfasste aktuelle Zeitstempel in der Datei aufgezeichnet, der für die nächste Jobausführung verwendet werden soll.

Convert.scl

Dieser Transformationsblock nimmt current.txt und wandelt sie in changes.csv um . Die Konvertierung erfolgt vom standardmäßigen Dateityp mit Trennzeichen in CSV. Bei Verwendung des CSV-Prozesstyps in CoSort wird der Ausgabedatei unter Verwendung der Feldnamen eine Kopfzeile vorangestellt. Dies ist der Aufgabenblock, in dem ich andere Manipulationen (z. B. Datenmaskierung) auf die Daten anwenden kann, wenn ich dies wünsche.

Wartedateien

Dieser Warteblock hält die Batchdatei für 3 Sekunden an und prüft dann, ob die Datei changes.csv vorhanden ist Datei, bevor Sie fortfahren.

MongoImport

Dieser Befehlsblock führt den mongoimport-Befehl mit den Parametern aus, die in der Eigenschaftsansicht angegeben sind, wie unten gezeigt.

Die Parameter geben an, dass die MongoDB-Datenbank fnx heißt soll mit dem Inhalt der Datei changes.csv geladen werden die vom Typ csv ist und enthält eine Überschrift die die Felder definiert.

Beachten Sie, dass Voracity andere Methoden zum Verschieben und Bearbeiten von MongoDB-Daten unterstützt. Sehen Sie sich dieses Beispiel zur Verwendung von Progress ODBC-Treibern für die Datenmaskierung mit integrierten „FieldShield“-Funktionen an. Voracity kann jetzt auch BSON-Daten direkt über API durch /PROCESS=MongoDB-Unterstützung in CoSort v10 verarbeiten.

Fehler beim Laden

Dieser Entscheidungsblock prüft die Variable ERRORLEVEL um sicherzustellen, dass nach dem Importieren in MongoDB 0 (oder Erfolg) zurückgegeben wird. Wenn dies nicht der Fall ist, fährt der Job mit den Änderungen löschen fort und BEENDEN Blöcke, in denen der Job beendet wird. Wenn es wahr zurückgibt, fährt der Job mit dem nächsten Block fort.

Aktuelles abschneiden

Dieser Befehlsblock kürzt die Datei current.txt . Dadurch werden die Datensätze gelöscht, die in MongoDB geladen wurden. Wenn der Import fehlgeschlagen ist und der obige Block den Job beendet hat, werden diese geänderten Datensätze beim nächsten Durchlauf angehängt. Wenn sich der Job wiederholte, wurden sie dann mit der nächsten Gruppe geänderter Datensätze in MongoDB geladen.

Änderungen löschen

Dieser Befehlsblock löscht changes.csv damit der nächste Durchgang mit einer neu erstellten Datei für den Durchgang gestartet wird.

Batch-Datei

Die Stapeldatei und die Umwandlungsskripts werden erstellt, wenn das Flussdiagramm exportiert wird. Eine Kopie der Batch-Datei ist unten. Jeder Block fügt der Batch-Datei ausführbare Zeilen hinzu.

Aufgabenplaner

Mithilfe des Windows-Taskplaners kann diese Stapeldatei wiederholt ausgeführt werden, um die Änderungen in der Quelldatenbank zu erfassen.

Schlussfolgerung

Mit ein wenig Planung und der Verwendung von Befehlsblöcken können Änderungen an einer Datenbanktabelle mithilfe einer Stapeldatei automatisch erkannt und dann zur Ausführung in ausgewählten Intervallen geplant werden.

Kontaktieren Sie [email protected] oder Ihren IRI-Vertreter für weitere Informationen oder Hilfe bei Ihrem Anwendungsfall

  1. Dieser Ansatz unterscheidet sich von protokollbasierten Lösungen zur Erfassung geänderter Daten, die in der Regel Leistungsengpässe aufweisen, auf bestimmte Datenbanken beschränkt sind und keine gleichzeitige Datentransformation, PII-Datenmaskierung und -bereinigung ermöglichen , und Berichte.