TypeCaster

Kurzbeschreibung

TypeCaster ist ein General Brick. Er übersetzt verarbeite Datenobejekte in ein angegebenen Datentypen.

../_images/typecaster.svg

Input

TypeCaster besitzt einen Input-Port.

Input = <variant -> variant> : doc "structure documentation";

Als Input bekommt TypeCaster eine Datenmap im folgenden Beispielschema:

sample_data = {
    "attempt.two": "22",
    "tags": {
        "Customer": "EXAMPLE"
    },
    "fields": {
        "time": "2020-07-09 19:48:39",
        "station": "hadzeae02v",
        "procname": "PROC05",
        "current": "63782912",
        "peak": "312631296",
    }
}

Output

TypeCaster besitzt einen Output-Port.

Output =  {
    "tags" -> <string -> variant>,
    "fields" -> <string -> variant>
} : doc "structure documentation";

Als Output entsendet TypeCaster eine Datenmap im folgenden Beispielschema:

{
    "attempt.two": 22,
    "tags": {
        "Customer": "EXAMPLE"
    },
    "fields": {
        "time": "2020-07-09 19:48:39",
        "station": "hadzeae02v",
        "procname": "PROC05",
        "current": 63782912,
        "peak": 312631296,
        "duration": "0,15651"
    }
}

Parametrisierung

TypeCaster hat folgende Parameter:

  • Fields

Fields

Fields ist eine Ansammlung von Schlüsseln und ihren dazugehörigen Datentyp. Sie weden über Semicolons voneinander getrennt. Wird der Schlüssel im ganze als ein string interpretiert, so muss sie sich in Anfürhungszeichen befinden. Handelt es sich um einen Pfad, dann benötigt es keine Anführungszeichen.

Beispiel:

'"attempt.two"=int;fields.peak=int;fields.current=int"
  • Standardwert: ``

  • string

  • Pflichtfeld

Funktion

TypeCaster überprüft als erstes den Field-Parameter. Anschließend werden die ankommenden Daten analysiert. Die Werte aus dem Flow-Paket werden entnommen, ein neues Daten-Objekt initializiert und die Werte im neuen Datenformat eingesetzt. Dies wird durch folgendes Beispiel deutlich. Gegeben sei folgendes Flow-Paket:

sample_data = {
    "attempt.two": "22",
    "tags": {
        "Customer": "EXAMPLE"
    },
    "fields": {
        "time": "2020-07-09 19:48:39",
        "station": "hadzeae02v",
        "procname": "PROC05",
        "current": "63782912",
        "peak": "312631296",
    }
}

Nun sollen das Datenformat von den Schlüsseln attempt.two, current und peak von string zu integer geändert werden. Dazu muss im UI zu dem Parameter Fields folgendes eingegeben werden:

'"attempt.two"=int;fields.peak=int;fields.current=int"

Dabei sind zwei wichtige Notationen im Anbetracht der Daten zu berücksichtigen. peak und current sind Datenschlüssel in einer Map. Sie besitzen einen Pfad. Dieser wird durch eine Punktnotation deutlich gemacht. Dabei muss der Pfad für die beiden Schlüssel folgendermaßen aussehen: fields.peak=int;fields.current=int. Getrennt werden beide Paare durch das Semikolon. Bei attempt.two handelt es sich nicht um ein Pfad sondern um den Namen des Schlüssels. Daher wird dieser duch zwei Anführungszeichen verdeutlicht: "attempt.two"=int. Der Output aus den Beispieldaten ist dann folgendes:

{
    "attempt.two": 22,
    "tags": {
        "Customer": "EXAMPLE"
    },
    "fields": {
        "time": "2020-07-09 19:48:39",
        "station": "hadzeae02v",
        "procname": "PROC05",
        "current": 63782912,
        "peak": 312631296,
        "duration": "0,15651"
    }
}

WICHTIG: Sollten Pfade zu Schlüssel genannt werden, die nicht existieren, werden diese ignoriert.

Python-Module

TypeCaster benutzt folgende Python-Module:

  • jmespath