Ein Wörterbuch in Jitterbit Studio befüllen und verwenden
Einführung
Ein Wörterbuch ist eine spezielle Art von globaler Variable, die ein Array von Schlüssel-Wert-Paaren erstellt. Ein häufiges Anwendungsbeispiel ist eine Kreuzreferenzliste, wie wenn eine Datenquelle einen Schlüssel bereitstellt und ein Ziel einen Wert basierend auf diesem Schlüssel benötigt.
Ein Wörterbuch befüllen
Eine erforderliche Best Practice ist es, das Wörterbuch zunächst mit der Dict Funktion zu initialisieren:
$dict.mylist = Dict()
Ein Wörterbucheintrag kann dann mit der AddToDict Funktion erstellt werden:
AddToDict(<dict name>,<key>, <value>)
Es gibt Szenarien, in denen wir einfach die Schlüssel im Wörterbuch erfassen möchten und die Werte irrelevant sind. In diesem Fall ist es akzeptabel, Folgendes zu verwenden:
AddToDict(<dict name>, <key>, true)
Ein weiteres Szenario ist, wenn der Wert selbst eine Liste ist, sodass wir zunächst überprüfen möchten, ob der Wörterbucheintrag existiert, und dann den Wert abrufen und wieder zum Wörterbuch hinzufügen. Dies kann auch verwendet werden, um Werte zu summieren. In diesem Fall wird HasKey verwendet:
my_value = <data from source>;
my_key = <data from source>;
If(HasKey($dict.mylist,my_key) // Check if my_key is in the dictionary
, // If true
value = $dict.mylist[my_key]; // Get the original value
new_value = value + “|” + my_value; // Append the new value
AddToDict($dict.mylist,new_value); // Write the new appended value back to the dictionary
, // If false
AddToDict($dict.mylist,my_value);
);
Ein Wörterbuch lesen
Wenn versucht wird, einen Wert aus einem Wörterbuch zu lesen und der Schlüssel nicht existiert, wird dies als Fehler behandelt. Eine Best Practice ist es, immer zuerst HasKey zu verwenden, um zu überprüfen, ob der Schlüssel existiert. Siehe die dritte Zeile im obigen Code für ein Beispiel. Da Wörterbucheinträge immer in alphabetischer Reihenfolge und immer einzigartig sind, wird die Verwendung von AddToDict mit einem vorhandenen Schlüssel den Eintrag überschreiben.
Wörterbücher werden häufig gelesen, um eine Liste von Daten zu generieren, die mit einer While Schleife gelesen wird:
arr = Array();
arr = KeyList($dict.mylist);
i = 0;
While(i < Length(arr),
value = $dict.mylist[i];
<some action>
i++);
Wörterbücher werden auch in Transformationsbedingungen als Filter verwendet. Angenommen, ein Wörterbuch ist gefüllt und eine Transformation muss eine Quelle lesen und nur Datensätze verarbeiten, wenn der Wörterbuchwert im Datensatz enthalten ist. Die Bedingung der Zieltransformation würde ein Skript wie dieses enthalten:
pass = true;
If(!HasKey($dict.mylist,<mapped value from source record>), pass = false);
pass;
Der Geltungsbereich von Wörterbüchern, wie bei allen globalen Variablen, ist auf die Instanz des Operationsthreads beschränkt. Sie sind jedoch nicht threadsicher. Seien Sie vorsichtig, wenn Sie ein Wörterbuch füllen, während Sie die asynchrone Option mit RunOperation verwenden. Das Wörterbuch behält seine Daten nicht zwischen mehreren Threads.