Diff-Funktionen in Jitterbit Studio
Verwenden Sie Diff-Funktionen zur Synchronisierung von Daten
Die Jitterbit Diff / Synchronize-Funktion kann in Transformationen verwendet werden, um Daten in einer einzelnen Tabelle mit einer beliebigen Art von Ziel zu synchronisieren.
Die Quelle muss eine Datenbank oder eine CSV-Datei sein. Bei einer Datenbank muss die Quelltabelle über eine Reihe von Schlüsseln verfügen, die eine Datenzeile eindeutig identifizieren. Hierarchische Beziehungen in Quelltabellen werden nicht unterstützt.
Die Diff-Funktion wird verwendet, um die Quelldaten in drei Kategorien zu unterteilen:
- hinzugefügte Zeilen
- aktualisierte Zeilen
- gelöschte Zeilen
Beim ersten Ausführen einer Diff-Operation werden alle Quellzeilen als "hinzugefügt" klassifiziert. Bei jedem nachfolgenden Durchlauf werden nur hinzugefügte, geänderte oder gelöschte Zeilen von Jitterbit verarbeitet. Dies kann erhebliche Verarbeitungszeit sparen, wenn eine Quelltabelle zahlreiche Datensätze enthält, die sich selten ändern.
Wie in den folgenden Schritten zu sehen sein wird, besteht eine "Diff-Operation" normalerweise aus mehreren verketteten Operationen; jede nachfolgende Operation behandelt jeweils Hinzufügungen, Aktualisierungen und Löschungen.
Um eine Diff-Operation einzurichten, befolgen Sie diese Schritte:
- Initialisieren Sie die Diff-Sitzung und definieren Sie den Typ des zu verwendenden Diff-Algorithmus. Derzeit werden entweder "chunked" oder "ordered" unterstützt. Chunked funktioniert immer, aber ordered kann schneller sein, wenn die Reihenfolge der Quell-Datenzeilen garantiert ist.
- Behandeln Sie hinzugefügte, aktualisierte und gelöschte Zeilen. Die Reihenfolge, in der sie behandelt werden, ist willkürlich und hängt von der Reihenfolge der Operationen ab, die die Synchronisierung implementieren.
- Finalisieren Sie die Diff-Sitzung. Dies kennzeichnet den Diff-Prozess als abgeschlossen; andernfalls kann eine zukünftige Diff-Operation dazu führen, dass keine Datensätze verarbeitet werden.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Schritt 1: Diff-Sitzung initialisieren
Initialisieren Sie die Diff-Sitzung, indem Sie die Funktion InitializeDiff mit einer eindeutigen "Diff-ID" aufrufen, gefolgt von entweder der Funktion DiffKeyList (für einen chunked Diff) oder der Funktion OrderedDiffKeyList (für einen ordered Diff), um den Primärschlüssel(e) der Quelltabelle zu definieren:
InitializeDiff("A-unique-diff-ID-for-each-diff-process");
DiffKeyList("pk1", "pk2");
Schritt 2: Umgang mit hinzugefügten, aktualisierten und gelöschten Zeilen
Vor jeder Transformation werden die Funktionen DiffAdd, DiffUpdate und DiffDelete aufgerufen. Jede Transformation, die nach diesen Funktionsaufrufen ausgeführt wird, erhält die hinzugefügten, aktualisierten oder gelöschten Zeilen entsprechend. Die Quelle der Transformationen muss dieselbe Datenbanktabelle oder CSV-Datei sein, aber das Ziel kann in allen drei Fällen unterschiedlich sein.
Schritt 3: Abschluss der Diff-Sitzung
Die Funktion DiffComplete sollte aufgerufen werden, wenn die drei Fälle erfolgreich behandelt wurden. (Im Falle von Fehlern sollte stattdessen die Funktion ResetDiff verwendet werden.) Dies kennzeichnet den Diff-Prozess als abgeschlossen; andernfalls kann eine zukünftige Diff-Operation dazu führen, dass keine Datensätze verarbeitet werden.
Zusätzliche Diff-Funktionen
DiffNode: Für hierarchische Quellen gibt es an, welcher Knoten als wiederholender Knoten verwendet werden soll, um den Diff durchzuführen.OrderedDiffKeyList: Gibt die Sortierreihenfolge der Quelle an, wenn der "geordneten" Diff-Algorithmus verwendet wird.ResetDiff: Setzt oder löscht die Diff-Sitzung. Wird in der Fehlerbehandlung verwendet, um die Diff-Sitzung bei einem Fehler zurückzusetzen.SetDiffChunkSize: Legt einen Parameter für den "chunked" Diff-Algorithmus fest. Ein größerer Wert ist schneller, benötigt jedoch mehr Speicher.
Diff-Beispiele
Für ein Beispiel zur Verwendung von Diff in Design Studio, siehe Datenänderungen mit Tabellen- oder Dateiänderungen erfassen. Dies kann für die Verwendung in Studio extrapoliert werden.
DiffAdd
Deklaration
void DiffAdd()
Syntax
DiffAdd()
Beschreibung
Fordert die hinzugefügten Datensätze als Eingabe für die nächste durchgeführte Transformation an.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Beginnen Sie mit der Verarbeitung der hinzugefügten Datensätze in diesem Vorgang:
DiffAdd();
DiffComplete
Deklaration
void DiffComplete()
Syntax
DiffComplete()
Beschreibung
Kennzeichnet den Diff-Prozess als abgeschlossen. Diese Methode sollte aufgerufen werden, wenn der Diff-Prozess erfolgreich abgeschlossen ist; andernfalls bleibt der Diff-Prozess in einem inkonsistenten Zustand. In diesem Fall werden beim nächsten Ausführen des Diff-Vorgangs keine Datensätze verarbeitet.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Kennzeichnen Sie den Diff-Vorgang als abgeschlossen
DiffComplete();
DiffDelete
Deklaration
void DiffDelete()
Syntax
DiffDelete()
Beschreibung
Fordert die gelöschten Datensätze als Eingabe für die nächste durchgeführte Transformation an.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Anfordern gelöschter Datensätze für den Transformationslauf
DiffDelete();
DiffKeyList
Deklaration
void DiffKeyList(string k1[, string k2,... string kN])
Syntax
DiffKeyList(<k1>[, <k2>,... <kN>])
Erforderliche Parameter
k1, k2,... kN: String-Schlüssel, die die Spalten in der Diff-Quelle identifizieren, die verwendet werden, um jeden Datensatz eindeutig zu identifizieren
Beschreibung
Legt die Liste der Schlüssel fest, die zur eindeutigen Identifizierung eines Datensatzes in der Diff-Quelle verwendet werden. Diese Methode wird typischerweise in Verbindung mit der Funktion InitializeDiff aufgerufen.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Verwendung eines chunkierten Diffs mit den synchronisierenden Primärschlüsseln
// von CustomerId und OrderId:
DiffKeyList("CustomerId", "OrderId");
DiffNode
Deklaration
void DiffNode(string nodeName)
Syntax
DiffNode(<nodeName>)
Erforderliche Parameter
nodeName: Ein String, der den wiederholenden Knoten angibt, der für die Diff-Operation verwendet werden soll
Beschreibung
Für hierarchische Quellen gibt dies den Knoten an, der als wiederholender Knoten verwendet wird, auf dem der Diff durchgeführt wird.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Führen Sie den Diff auf dem XML-Elementknoten <Listing> aus
DiffNode("Listing");
DiffUpdate
Deklaration
void DiffUpdate()
Syntax
DiffUpdate()
Beschreibung
Fordert die aktualisierten Datensätze als Eingabe für die nächste durchgeführte Transformation an.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Anfordern aktualisierter Datensätze für den Transformationslauf
DiffUpdate();
InitializeDiff
Deklaration
void InitializeDiff(string diffId)
Syntax
InitializeDiff(<diffId>)
Erforderliche Parameter
diffId: Ein String, der die Diff-Operation von anderen auf dem System laufenden Diff-Operationen eindeutig identifiziert. Der String muss bei jedem Lauf der Operation gleich sein, um das Diff korrekt zu identifizieren.
Beschreibung
Initialisiert eine neue Diff-Sitzung.
Der übergebene String als diffId muss anders sein als alle anderen auf dem System verwendeten Diff-Identifikatoren, muss jedoch bei jedem Lauf der Operation gleich sein. Wenn bereits eine Diff-Sitzung läuft, schlägt ein Aufruf dieser Methode fehl. Um eine alte Diff-Sitzung zu löschen (zum Beispiel im Falle eines Systemausfalls), rufen Sie die Funktion ResetDiff einmal auf.
Diese Methode wird typischerweise im Pre-Source-Skript der ersten Operation aufgerufen, die ein Diff/Synchronisierung implementiert.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Synchronize the order database:
InitializeDiff("Order Database Synchronization");
// Using chunked diff with the synchronizing primary keys
// of CustomerId and OrderId:
DiffKeyList("CustomerId", "OrderId");
// With sufficient memory available, increase the chunk size:
SetDiffChunkSize(100000);
// Start by processing the added records in this operation:
DiffAdd();
OrderedDiffKeyList
Deklaration
void OrderedDiffKeyList(string k1, bool isAscending1[, string k2, bool isAscending2,... string kN, bool isAscendingN])
Syntax
OrderedDiffKeyList(<k1>, <isAscending1>[, <k2>, <isAscending2>,... <kN>, <isAscendingN>])
Erforderliche Parameter
k1, k2,... kN: Zeichenfolgen, die die Spaltennamen der Schlüssel darstellen, die verwendet werden, um einen Datensatz in einer Quelle eindeutig zu identifizieren-
isAscending1, isAscending2,... isAscendingN: Boolesche Werte für jede Spalte, die angeben, ob jede Spalte aufsteigend (true) oder absteigend (false) sortiert ist -
Die Anzahl der übergebenen Argumente muss zwei oder mehr betragen und eine gerade Zahl sein.
Beschreibung
Legt die Liste der Schlüssel fest, die zur eindeutigen Identifizierung eines Datensatzes in der Quelle verwendet werden, und gibt die Reihenfolge der Schlüssel als aufsteigend (true) oder absteigend (false) an.
Verwenden Sie diese Methode (anstatt der Funktion DiffKeyList), wenn garantiert ist, dass die Quell-Datensätze in einer bestimmten Reihenfolge vorliegen.
Die Verarbeitung von Diffs ist effizienter, wenn die Quellfelder jedes Mal in der gleichen Reihenfolge angeordnet sind. In diesen Fällen wird keine Chunk-Größe verwendet und der Speicherverbrauch ist kein Problem. Diese Methode wird typischerweise in Verbindung mit der Funktion InitializeDiff aufgerufen.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
ResetDiff
Deklaration
void ResetDiff(string diffId, int action)
Syntax
ResetDiff(<diffId>, <action>)
Erforderliche Parameter
diffId: Eine Zeichenfolge, die den Diff-Vorgang eindeutig von anderen auf dem System laufenden Diff-Vorgängen identifiziertaction: Eine Ganzzahl (entweder0oder1), die angibt, wie die Diff-Sitzung zurückgesetzt werden soll
Beschreibung
Setzt eine bestehende Diff-Sitzung zurück.
Der Parameter action (entweder 0 oder 1) gibt an, wie die Diff-Sitzung zurückgesetzt werden soll:
0(Zurücksetzen): Vergisst den neuesten Snapshot vollständig und beginnt von vorne. Dies zwingt das System, alle Einträge als "hinzugefügt" zu behandeln.1(Bereinigen): Entfernt alle Dateien, die von einer vorherigen Diff-Sitzung übrig geblieben sind. Dies setzt den neuesten Snapshot nicht zurück; es werden nur veraltete Dateien entfernt, die von alten, fehlgeschlagenen oder abgebrochenen Diff-Sitzungen übrig geblieben sind.
Diese Methode wird typischerweise aufgerufen, wenn etwas in einem bestehenden Diff-Prozess geändert wurde oder wenn ein Diff-Prozess fehlgeschlagen ist und in einem inkonsistenten Zustand zurückgelassen wurde. Sie sollte nicht während der normalen Diff-Verarbeitung aufgerufen werden. Wenn keine Diff-Sitzung für diese diff_id vorhanden ist, wird keine Aktion ausgeführt.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Bereinigen Sie alle Dateien, die von einer vorherigen Diff-Sitzung übrig geblieben sind,
// aber behalten Sie den neuesten Snapshot
ResetDiff("Bestell-Datenbank-Synchronisierung", 1);
SetDiffChunkSize
Deklaration
void SetDiffChunkSize(int chunkSize)
Syntax
SetDiffChunkSize(<chunkSize>)
Erforderliche Parameter
chunkSize: Größe in Bytes für die während des Diffens verwendeten Chunks
Beschreibung
Setzt die Chunk-Größe (in Bytes), die während des Diffens verwendet wird.
Eine größere Chunk-Größe führt dazu, dass das System mehr Speicher verwendet, aber es verarbeitet den Diff schneller. Der Standardwert beträgt 50000 Bytes; wenn Sie über ausreichend Speicher verfügen, können Sie diese Zahl erhöhen.
Diese Methode wird typischerweise in Verbindung mit der Funktion InitializeDiff aufgerufen.
Warnung
Diff-Funktionen können nur auf einem einzelnen privaten Agenten verwendet werden, da Diff-Snapshots nicht geteilt werden. Verwenden Sie sie nicht in einer Agentengruppe mit mehr als einem Agenten. Sie werden nicht mit Cloud-Agenten unterstützt.
Beispiele
// Mit ausreichend verfügbarem Speicher den Chunk-Größe erhöhen:
SetDiffChunkSize(100000);