Sprachen etwa können in einem Quellsystem als ISO-639-1 Codes vorliegen während das Zielsystem mit ISO-639-3 Codes arbeitet. Was also als 'de' für Deutsch das Quellsystem verlässt, muss als 'deu' im Zielsystem ankommen.
Die ISO Liste für Sprachcodes enthält 202 Einträge, und wenn man in der Lage sein will, jeden einzelnen davon transformieren zu können, ist ein switch / case Statement in einem Stück C# Code nicht mehr wirklich praktisch – es bietet sich an, mit einer Lookup Tabelle zu arbeiten, die etwa in einer SQL Datenbank vorgehalten wird, und die in einem Stream Analytics Job verwendet wird, um die Quell- in die Zielwerte zu übersetzen.
Einfache Werttransformation
Im simpelsten Fall würde diese Lookup Tabelle etwa so aussehen:
Diese Tabelle wird nun in dem Stream Analytics Job zusammen mit dem Datensatz aus dem Quellsystem als Input verwendet.
Die Query für die Umsetzung der Quell- in die Zielwerte könnte etwa so aussehen:
folgendermassen im Zielsystem:
'en' ist in der Lookup Tabelle nicht vorhanden, also gelangt dafür kein Wert ins Zielsystem.
Default für NULL und Unbekannt
Nehmen wir nun an, im Zielsystem soll ein Defaultwert 'Unknown' mit dem Code '0' eingetragen werden, wenn vom Quellsystem kein oder ein unbekannter Sprachcode daherkommt. Um das zu erreichen, wird die Query wie folgt angepasst:
Wird ein Quellwert in der Lookup Tabelle gefunden, kommt der entsprechende Zielwert in die Ausgabe, ist kein Quellwert da oder ist der Wert nicht in der Lookup Tabelle, wird '0' eingesetzt.
Damit kämen im Zielsystem die Datensätze so an:
Default für Unbekannt
Möglicherweise soll unterschieden werden können, ob kein Wert geliefert wird oder einer, der nicht in der Lookup Tabelle ist, etwa damit man diese dann ergänzen kann. Der Defaultwert 'Unknown' soll nur eingesetzt werden, wenn der Wert nicht in der Lookup Tabelle ist und wenn kein Wert geliefert wird, also NULL, soll auch NULL an das Zielsystem übermittelt werden.
Diese Abfrage ergibt folgendes Bild:
Default in Lookup Tabelle
Der Defaultwert kann auch in der Lookup Tabelle geführt werden, was vor allem dann zu empfehlen ist, wenn sich der Zielwert zwischen den verschiedenen Stages unterscheidet, etwa im Falle einer GUID. Unsere Lookup Tabelle sähe dann so aus:
Da diese GUIDs in jedem System anders sind, braucht man natürlich für jedes System (also jede Stage) eine eigene Lookup Tabelle, aber es kann immer die gleiche Query eingesetzt werden, wenn benötigte Defaults in dieser Tabelle vorgehalten werden.
Um das zu nutzen, muss die Query ein bisschen erweitert werden:
COALESCE
Um die Query ein wenig schlanker und eleganter zu machen, können wir die CASEWHEN Anweisung für den Lookup Wert bzw. den Default mit einer COALESCE Anweisung ersetzen. Da wird von links nach rechts eine kommagetrennte Liste von Werten durchgegangen und der erste Wert ausgewählt, der nicht NULL ist. Sind alle Werte NULL, dann kommt auch NULL heraus.
Dieser quiTeq-Tipp kommt aus der Schweiz von Robert.