JSON zu Tabelle
- Aufgabentyp: json-to-table
Die Aufgabe „JSON zu Tabelle“ ermöglicht den Import von Daten aus einer JSON-Datei mit tabellarer Struktur und deren Einfügen in eine Datenbanktabelle. Ihre Funktion ist zweifach: Sie verbindet sich mit einer Datenbank, um die Daten physisch zu schreiben, und macht gleichzeitig die importierten Daten als Dataset für die Nutzung durch nachfolgende Aufgaben im Workflow verfügbar (wie ein Iterator). Diese Aufgabe arbeitet mit einem JSON-Input, der von einer vorhergehenden Aufgabe bereitgestellt wird (z. B. „Text importieren“).
1. Datenbankverbindung
In diesem Tab werden alle Parameter zur Herstellung der Verbindung zur Ziel-Datenbank konfiguriert.
Zieltabelle
Es ist möglich, die Quelle der Anmeldeinformationen für die Verbindung zu definieren:
- Manuell: Ermöglicht die manuelle Eingabe aller Verbindungsinformationen und Tabellendaten in die folgenden Felder.
- Umgebung: Ermöglicht die Nutzung einer vorkonfigurierte Verbindung-Umgebung. Durch die Auswahl einer Umgebung werden die Authentifizierungsfelder automatisch ausgefüllt.
Datenbanktyp
Definiert den zu verbindenden Datenbanktyp (DBMS). Unterstützte Optionen umfassen:
- PostgreSQL
- SQL Server
- MySQL
- Oracle DB: Ermöglicht die Angabe der Verbindung über SID oder SERVICE.
- SAP HANA
SSL-Verbindung
Gibt an, ob die Verbindung zur Datenbank über einen sicheren Kanal erfolgen soll.
Authentifizierung
| Feld | Beschreibung |
|---|---|
| Host | Adresse der externen Datenbank. |
| Port | Port der Verbindung zur externen Datenbank. |
| DB Name | Name der zu verbindenden Datenbank. |
| User | Benutzername für den Datenbankzugriff. |
| Passwort setzen | Öffnet ein Fenster zur sicheren Eingabe des Passworts. |
Tabellenverwaltung
Definiert, wie die Aufgabe mit der physischen Tabelle in der Datenbank interagieren soll.
- Zieltabelle: bestimmt die Aktion, die mit der Tabelle durchgeführt wird:
- Tabelle erstellen: Erstellt immer eine neue Tabelle. Der Vorgang schlägt fehl, wenn bereits eine Tabelle mit demselben Namen existiert.
- Tabelle erstellen, falls nicht vorhanden: Erstellt eine neue Tabelle nur, wenn noch keine Tabelle mit demselben Namen existiert.
- Vorhandene Tabelle: Fügt die Daten in eine bereits vorhandene Tabelle ein. Standardmäßig werden die neuen Daten zu den bereits vorhandenen hinzugefügt (Append). Durch Aktivieren der Checkbox Truncate Insert wird die Tabelle geleert, bevor die neuen Daten eingefügt werden.
- Zieltabellennamen: Name der zu erstellenden oder in die Daten zu schreibenden Tabelle (z. B.
utenti,prodotti,log_eventi).
2. Tabellenstruktur
Der Tab „Tabellenstruktur“ ermöglicht die Definition der Felder (Spalten) der Tabelle und das Mappen jeder Spalte auf die Elemente der ursprünglichen JSON-Datei.
Verfügbare Felder
Jede Zeile repräsentiert eine Spalte der Tabelle. Für jedes Feld können folgende Einstellungen vorgenommen werden:
| Feld | Beschreibung |
|---|---|
| Typ | Datentyp des Feldes. Verfügbare Werte: NUMERICO, STRINGA, DATA, DATA E ORA |
| Präzision | Für NUMERICO: maximale Anzahl von Ziffern; für STRINGA: maximale Länge |
| Alias | Der tatsächliche Name der Spalte in der Datenbanktabelle. Dies ist der im DB sichtbare Name. |
| JSONPath-Ausdruck | JSONPath-Ausdruck zum Extrahieren des Werts aus der ursprünglichen JSON-Datei (z. B. $.persona.info.name) |
Table Structure Management
In der unteren rechten Ecke der Tabellarischen Struktur befinden sich drei Schaltflächen:
| Schaltfläche | Aktion |
|---|---|
| Speichern | Speichert die definierte Struktur |
| Importieren | Importiert eine vorhandene Struktur |
| Exportieren | Exportiert die definierte Struktur |
Diese Funktion ermöglicht es, Mappings zu speichern, zu exportieren oder wiederzuverwenden, wodurch die manuelle Feldkompilierung vermieden und das Fehlerrisiko reduziert wird.
Technische Anmerkung
- Sichtbarkeit: In das System gespeicherte Strukturen sind nur für den erstellenden Benutzer sichtbar.
- Vertiefung: Für eine detaillierte Beschreibung aller Optionen und der Funktionslogik verweisen Sie auf die Seite Tabellenstruktur.
3. Konfigurationsbeispiel
Um eine Tabelle utenti mit den folgenden Feldern zu erstellen:
| Typ | Alias | JSONPath-Ausdruck |
|---|---|---|
| STRINGA | name | $.user.info.name |
| STRINGA | $.user.info.email | |
| NUMERICO | age | $.user.info.age |
| STRINGA | city | $.address.city |
| DATA | registration_date | $.registration.date |
| DATA E ORA | registration_datetime | $.registration.datetime |
Das Ergebnis dieser Konfiguration ist die Erstellung einer Tabelle in der Datenbank mit den Spalten name, email, age, city, registration_date und registration_datetime (Alias), die mit den aus dem JSON extrahierten Werten (JSONPath-Ausdruck) gefüllt sind.
Alias mit Sonderzeichen oder Großbuchstaben
Wenn Großbuchstaben, Sonderzeichen oder Leerzeichen in den Spaltennamen verwendet werden sollen, muss der Alias in doppelte Anführungszeichen gesetzt werden (z. B. "Vorname").
| Typ | Alias | JSONPath-Ausdruck |
|---|---|---|
| STRINGA | “Name” | $.name |
| STRINGA | “Nachname” | $.surname |
Ergebnis in der Datenbank
4. Verwaltung verschachtelter JSON-Strukturen
Der Task JSON to Table ist in der Lage, JSON-Dateien zu verarbeiten, die verschachtelte Strukturen enthalten, wie Arrays oder Objekte innerhalb anderer Objekte. Mithilfe des Pfad-/Abfrageausdrucks kann ein ganzer verschachtelter Block oder einzelne Werte extrahiert und auf Spalten der Tabelle abgebildet werden. Der Task kann ein verschachteltes Objekt in einer einzigen Textspalte serialisieren und dabei die ursprüngliche Struktur im JSON-Format beibehalten.
Beispiel: Komplexe verschachtelte Strukturen
Der Task kann auch mit weitaus komplexeren Strukturen gleichermaßen gut umgehen. Betrachten wir ein JSON, bei dem departments ein Objekt enthält, das wiederum ein Array anderer Objekte enthält.
[
{
"name": "Luca",
"surname": "Rossi",
"departments": {
"department": [
{
"details": {
"name": "Marketing",
"location": "Milan"
}
},
{
"details": {
"name": "Sales",
"location": "Rome"
}
}
]
}
},
{
"name": "Maria",
"surname": "Bianchi",
"departments": {
"department": [
{
"details": {
"name": "HR",
"location": "Florence"
}
}
]
}
}
]
Auch in diesem Fall bleibt die Konfiguration in der "Tabellarischen Struktur" identisch:
| Typ | Präzision | Alias | JSONPath-Ausdruck |
|---|---|---|---|
| String | 1000 | name | $.name |
| String | 1000 | surname | $.surname |
| String | 4000 | departments | $.departments |
Der Task nimmt das gesamte Objekt, das mit dem Schlüssel departments verknüpft ist, und serialisiert es in einen einzigen JSON-String.
Ergebnis in der Datenbank:
| name | surname | departments |
|---|---|---|
| Luca | Rossi | {"department":[{"details":{"name":"Marketing","location":"Milan"}},{"details":{"name":"Sales","location":"Rome"}}]} |
| Maria | Bianchi | {"department":[{"details":{"name":"HR","location":"Florence"}}]} |
Extraktion von Unterelementen mit JSONPath
Wenn stattdessen einzelne verschachtelte Elemente extrahiert werden sollen, wie beispielsweise die Namen der Abteilungen, kann ein spezifischer JSONPath-Ausdruck verwendet werden. Zum Beispiel:
| Typ | Präzision | Alias | JSONPath-Ausdruck |
|---|---|---|---|
| String | 1000 | name | $.name |
| String | 1000 | surname | $.surname |
| String | 1000 | department_names | $.departments.department[*].details.name |
Mit dieser Konfiguration wählt das Task JSON to Table alle Werte name aus dem Array department aus und fügt sie in die Spalte department_names der Datenbank ein, wobei sie optional durch ein Komma getrennt werden.
Ergebnis in der Datenbank
| name | surname | department_names |
|---|---|---|
| Luca | Rossi | Marketing, Sales |
| Maria | Bianchi | HR |
Dieser Ansatz ermöglicht die Extraktion nur der benötigten Daten, ohne den gesamten JSON-Block zu serialisieren, was die Tabelle leichter abfragbar und in anderen Tasks oder Berichten nutzbar macht.
5. Ausgabeparameter
Sobald das Task "JSON to Table" die Verarbeitung abgeschlossen hat, stellt es eine reichhaltige Reihe von Ausgabe-Parameter bereit. Diese Parameter liefern nicht nur Informationen über den Status der Operation, sondern stellen auch die verarbeiteten Daten in verschiedenen Formaten für nachfolgende Tasks zur Verfügung.
- result: Gibt den allgemeinen Status der Task-Ausführung zurück (z. B. "Success" oder eine Fehlermeldung).
- resultJson: Stellt das Ergebnis der Task-Ausführung im JSON-Format dar und enthält allgemeine Informationen, Konfigurationen und Details zur Ausführung.
- targetTable: Gibt den Namen der Datenbanktabelle zurück, in die die Daten eingefügt wurden.
- rowCount: Gibt die Gesamtzahl der Zeilen an, die in die Zieltabelle eingefügt wurden.
- DataExportCsv: Gibt den gesamten verarbeiteten Datensatz zurück, formatiert als Text im CSV-Format (Comma-Separated Values).
- DataExportJson: Gibt den gesamten verarbeiteten Datensatz zurück, formatiert als JSON-String.
- Dataset: Dieser Parameter repräsentiert den Namen der Spalte der Tabelle (z. B. name). Er ist der wichtigste Parameter, um dieses Task mit einem Iterator zu verknüpfen. Um auf die Werte einer bestimmten Spalte während einer Iteration zuzugreifen, wird die Syntax Dataset.Spaltenname verwendet.
- DataColumn: Dieser Parameter ermöglicht den Zugriff auf den gesamten Inhalt einer Spalte als einzelne Einheit (z. B. ein Array oder eine Liste).
- DataColumn.Spaltenname: Gibt alle Werte der Spalte „Spaltenname“ zurück. Z. B.: „Luca, Maria, Giovanni, Elena“
6. Beispiel-Parameter resultJson
{
"run_info": {
"status": "Completed",
"run_result": "Success"
},
"output_parameters": {
"exitStatus": "0"
}
}