Zum Inhalt springen

Eine Datei in einzelne Datensätze mit SCOPE_CHUNK in Jitterbit Studio aufteilen

Einführung

Dieses Designmuster kann verwendet werden, um die Daten in einer Datei mit mehreren Datensätzen in mehrere Dateien aufzuteilen, von denen jede einen einzelnen Datensatz enthält. Dazu wird die SCOPE_CHUNK-Präfixsyntax der Set-Funktion verwendet.

Tipp

Dieses Muster wird empfohlen, wenn die Quelldaten flach (nicht hierarchisch) sind und der Vorgang keine Transformation mit bedingter Logik enthält. Für komplexe (hierarchische) Quelldaten siehe Eine Datei in einzelne Datensätze mit SourceInstanceCount aufteilen.

Anwendungsfall

In diesem Szenario enthält die Quelle mehrere Datensätze, und der Geschäftsprozess oder der Zielendpunkt erfordert, dass Datensätze einzeln verarbeitet werden.

Designmuster

Dieses Designmuster besteht darin, die Datei mit einem Vorgang zu lesen, bei dem die Transformation das gleiche Quell- und Zielschema verwendet. Dieses Muster hat diese Hauptmerkmale:

  • Im ersten Feld der Transformation, die die Daten verarbeitet, wird die Set-Funktion verwendet, um eine Variable zu setzen, die mit SCOPE_CHUNK beginnt, gefolgt von zusätzlichem Text zur Konstruktion des Variablennamens. Das erste Argument erstellt den Namen der Ausgabedatei, typischerweise unter Verwendung einer Datensatzkennung aus den Quelldaten. Die Dateinamen müssen eindeutig sein, um nicht überschrieben zu werden. Daher kann ein Datensatzzähler oder eine GUID als Teil des Dateinamens verwendet werden.
  • Ein Dateispeicherziel wie Temporary Storage oder Local Storage muss verwendet werden. (Die Verwendung einer Variable wird nicht unterstützt.) Das Definieren eines Pfads wird empfohlen. Der Dateiname sollte mit dem globalen Variablennamen konfiguriert werden, der in der Set-Funktion verwendet wird.
  • Die Vorgangsoptionen müssen mit aktiviertem Enable Chunking konfiguriert werden, mit einer Chunk Size von 1, Number of Records per File von 1 und Max Number of Threads von 1.
  • Zur Laufzeit wird jeder Datensatz gelesen, erhält einen eindeutigen Dateinamen und wird einzeln in das Ziel geschrieben.

Nach Verwendung dieses Musters besteht der nächste Schritt normalerweise darin, die FileList-Funktion zu verwenden, um das Array der Dateinamen im Verzeichnis zu erhalten (konfigurieren Sie die Read-Aktivität des Dateiverzeichnisses mit dem Platzhalter *), dann durchlaufen Sie das Array und lesen jede Datei in die Quelle für den nächsten Vorgang.

Beispiele

Beispiele für die oben beschriebene Verwendung des Designmusters werden für zwei verschiedene Arten von Quelldaten bereitgestellt: eine flache CSV-Datei und eine hierarchische JSON-Datei.

Flache CSV

Diese Beispiel-Operationskette wendet das oben beschriebene Designmuster an, um flache CSV-Daten in eine Datei pro Datensatz aufzuteilen. Jede Nummer entspricht einer Beschreibung des Operationsschritts unten. Weitere Details finden Sie in den Screenshots für das Hierarchische JSON-Beispiel.

operation chain CSV splitter annotated

  1. Das Skript weist die Quelldaten einer globalen Variablen namens io (input/output) zu. (Ein Skript wird zu Demonstrationszwecken verwendet; die Quelldaten könnten auch von einem konfigurierten Endpunkt stammen.)

load source data CSV

  1. Die globale Variable io wird verwendet, um einen Variable-Endpunkt zu konfigurieren, und eine zugehörige Variable Read-Aktivität wird von der Operation als Quelle der Transformation verwendet.

  2. Innerhalb der Transformation verwenden Quelle und Ziele das gleiche Schema, und alle Felder werden zugeordnet. Das erste Datenfeld im Zuordnungsskript der Transformation ist so konfiguriert, dass es SCOPE_CHUNK verwendet. Die Set-Funktion wird verwendet, um eine Variable zu erstellen, die mit dem Ausdruck SCOPE_CHUNK beginnt und mit der eindeutigen Datensatz-ID aus der Quelle sowie einem Datensatzzähler und einem Suffix von .csv verkettet wird:

    bom

  3. Das Ziel ist eine Temporary Storage Write-Aktivität, die mit einem Standardpfad und der zuvor definierten Dateiname-Globalvariablen konfiguriert ist.

  4. Die Skripte dienen der Protokollierung der Ausgabe und sind optional. Das erste Skript ruft eine Liste der Dateien aus dem Verzeichnis ab und durchläuft die Liste, protokolliert den Dateinamen und die Größe und übergibt dann den Dateinamen an eine Operation mit einem anderen Skript, das den Dateiinhalt protokolliert. (Siehe die Screenshots für das Hierarchical JSON-Beispiel oben.)

  5. Die Operationsoptionen müssen mit Enable Chunking konfiguriert werden, mit einer Chunk Size von 1, Number of Records per File von 1 und Max Number of Threads von 1.

Das Ausführen der Operation ergibt einzelne CSV-Datensätze, wie in der Protokollausgabe gezeigt:

logs CSV splitter

Hierarchical JSON

Diese Beispieloperationskette wendet das oben beschriebene Designmuster an, um hierarchische JSON-Daten in eine Datei pro Datensatz aufzuteilen. Jede Nummer entspricht einer Beschreibung des Operationsschritts unten.

Hinweis

Dieses Designmuster ist nicht mehr die empfohlene Methode zum Aufteilen hierarchischer JSON-Daten. Die empfohlene Methode finden Sie unter Split a file into individual records using SourceInstanceCount.

operation chain JSON splitter annotated

  1. Das Skript weist die Quelldaten einer globalen Variablen namens io (input/output) zu. (Ein Skript wird zu Demonstrationszwecken verwendet; die Quelldaten könnten auch von einem konfigurierten Endpunkt stammen.)

    load source data JSON

  2. Die globale Variable io wird verwendet, um einen Variable-Endpunkt zu konfigurieren, und eine zugehörige Variable Read-Aktivität wird von der Operation als Quelle der Transformation verwendet:

    variable read

  3. Innerhalb der Transformation verwenden Quelle und Ziel das gleiche Schema, und alle Felder werden zugeordnet:

    JSON splitter

    Der oberste item-Knoten hat eine Bedingung, um die Datensatzanzahl zu generieren. Das erste Datenfeld in der Transformationszuordnung ist so konfiguriert, dass es SCOPE_CHUNK verwendet. Die Set-Funktion wird verwendet, um eine Variable zu erstellen, die mit dem Ausdruck SCOPE_CHUNK beginnt und mit der eindeutigen Datensatz-ID aus der Quelle sowie einem Datensatzzähler und einem Suffix von .json verkettet wird:

    JSON splitter

  4. Das Ziel ist eine Temporary Storage Write-Aktivität, die mit einem Standardpfad und der zuvor definierten Dateiname-Globalvariablen konfiguriert ist:

Temporary Storage write splitter

  1. Die Skripte dienen der Protokollierung der Ausgabe und sind optional. Das erste Skript ruft eine Liste der Dateien aus dem Verzeichnis ab und durchläuft die Liste, protokolliert den Dateinamen und die Größe und übergibt dann den Dateinamen an einen Vorgang mit einem anderen Skript, das den Dateiinhalt protokolliert:

    log_file_list_json
    <trans>
    arr = Array();
    arr = FileList("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>");
    cnt = Length(arr); i = 0;
    While(i < cnt,
    filename = arr[i];
    file = ReadFile("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>",filename);
    WriteToOperationLog("file: " + filename + " has a length of: " + Length(file));
      $gv_file_filter = filename;
    RunOperation("<TAG>operation:log_each_file_json</TAG>");
    i++
    );
    </trans>
    
    log_each_file_json
    <trans>
    WriteToOperationLog(ReadFile("<TAG>activity:tempstorage/json_splitter/tempstorage_read/Read</TAG>",$gv_file_filter));
    </trans>
    

    Dieses optionale Protokollierungsskript ruft RunOperation einmal pro aufgeteilter Datei auf. Wenn mehr als 50 Dateien erzeugt werden, erreicht diese Schleife das Limit auf Agent-Ebene für synchrone RunOperation-Aufrufe aus einer einzelnen While-Schleife (standardmäßig 50); siehe den Hinweis unter RunOperation für Details.

  2. Die Vorgangsoptionen müssen mit Enable Chunking konfiguriert werden, mit einer Chunk Size von 1, Number of Records per File von 1 und Max Number of Threads von 1:

    options JSON splitter

Das Ausführen des Vorgangs ergibt einzelne JSON-Datensätze, die in der Protokollausgabe angezeigt werden:

logs JSON splitter

Nach dem Aufteilen und Verarbeiten einzelner Datensätze besteht ein häufiger nächster Schritt darin, eine Zusammenfassungs-E-Mail oder ein Protokoll verarbeiteter Datensätze zu senden. Siehe Generate a summary log after processing records. Überlegungen zum gleichzeitigen Ausführen von Vorgängen pro Datensatz finden Sie unter Manage asynchronous operations.