Join@1
Der Node Join@1 führt Inner-Join-Operationen zwischen Quelldaten und Lookup-Arrays basierend auf übereinstimmenden Schlüsselwerten durch. Er kombiniert Datensätze aus zwei Datensätzen ähnlich wie SQL-Joins und fügt jedem Quelldatensatz alle übereinstimmenden Datensätze aus dem Lookup-Array hinzu.
Adapter-Voraussetzungen
- Allgemeine Verfügbarkeit: Alle Adapter unterstützen diesen Node-Typ.
Node-Konfiguration
Für die Felder path, targetPath, targetValueWriteMode und targetValueKind siehe Überblick.
transformations:
- type: Join@1
path: $.orders[*] # Path to the source objects to join
keyPath: $.orderId # Path to the key field in source objects
joinPath: $.orderItems[*] # Path to the array of objects to join with
joinKeyPath: $.orderId # Path to the key field in join objects
itemPath: $.items # Path where joined records will be stored
Parameter
Erforderliche Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
path | string | JSON-Pfad zu den Quellobjekten, die die verknüpften Daten erhalten |
keyPath | string | Relativer Pfad zum Schlüsselfeld in den Quellobjekten, das für den Abgleich verwendet wird |
joinPath | string | JSON-Pfad zum Array von Objekten, mit denen die Quelldaten verknüpft werden |
joinKeyPath | string | Relativer Pfad zum Schlüsselfeld in den Join-Objekten, das für den Abgleich verwendet wird |
itemPath | string | Relativer Pfad in den Quellobjekten, an dem das Array der übereinstimmenden Datensätze gespeichert wird |
Join-Operation
Die Join-Operation folgt diesen Schritten:
- Quelldatensätze auswählen: Verwendet
path, um Quellobjekte auszuwählen, die die verknüpften Daten erhalten - Join-Datensätze auswählen: Verwendet
joinPath, um das Array von Objekten auszuwählen, die für die Verknüpfung zur Verfügung stehen - Quellschlüssel extrahieren: Extrahiert für jedes Quellobjekt den Schlüsselwert mithilfe von
keyPath - Übereinstimmungen finden: Durchsucht die Join-Objekte nach Datensätzen, bei denen
joinKeyPathmit dem Quellschlüssel übereinstimmt - Ergebnisse speichern: Erstellt ein Array aller übereinstimmenden Join-Datensätze und speichert es unter
itemPath
Schlüsselabgleich
- Der String-Vergleich beachtet Groß-/Kleinschreibung und verwendet exakten Abgleich
- Wenn für ein Quellobjekt keine übereinstimmenden Datensätze gefunden werden, wird ein leeres Array unter
itemPathgespeichert - Mehrere Join-Datensätze können mit einem einzelnen Quelldatensatz übereinstimmen (Many-to-Many-Beziehung)
Fehlerbehandlung
Der Node löst einen Fehler aus, wenn:
- Der Eingabedatenkontext null ist
- Am angegebenen
pathkeine Quelldaten gefunden werden - Am angegebenen
joinPathkeine Join-Daten gefunden werden - Ein Quelldatensatz am angegebenen
keyPathkeinen Schlüsselwert hat
Beispiele
Beispiel 1: Bestellungen mit Bestellpositionen
Verknüpfen Sie Bestellungen mit ihren zugehörigen Bestellpositionen:
transformations:
- type: Join@1
path: $.orders[*]
keyPath: $.orderId
joinPath: $.orderItems[*]
joinKeyPath: $.orderId
itemPath: $.items
Eingabe:
{
"orders": [
{ "orderId": "123", "customerName": "John" },
{ "orderId": "456", "customerName": "Jane" }
],
"orderItems": [
{ "orderId": "123", "productName": "Widget", "quantity": 2 },
{ "orderId": "123", "productName": "Gadget", "quantity": 1 },
{ "orderId": "456", "productName": "Tool", "quantity": 3 }
]
}
Ausgabe:
{
"orders": [
{
"orderId": "123",
"customerName": "John",
"items": [
{ "orderId": "123", "productName": "Widget", "quantity": 2 },
{ "orderId": "123", "productName": "Gadget", "quantity": 1 }
]
},
{
"orderId": "456",
"customerName": "Jane",
"items": [
{ "orderId": "456", "productName": "Tool", "quantity": 3 }
]
}
],
"orderItems": [
{ "orderId": "123", "productName": "Widget", "quantity": 2 },
{ "orderId": "123", "productName": "Gadget", "quantity": 1 },
{ "orderId": "456", "productName": "Tool", "quantity": 3 }
]
}
Beispiel 2: Kunden mit Adressen
Verknüpfen Sie Kunden mit ihren mehreren Adressen:
transformations:
- type: Join@1
path: $.customers[*]
keyPath: $.customerId
joinPath: $.addresses[*]
joinKeyPath: $.customerId
itemPath: $.customerAddresses
Eingabe:
{
"customers": [
{ "customerId": "C001", "name": "Alice" },
{ "customerId": "C002", "name": "Bob" }
],
"addresses": [
{ "customerId": "C001", "type": "home", "street": "123 Main St" },
{ "customerId": "C001", "type": "work", "street": "456 Oak Ave" },
{ "customerId": "C002", "type": "home", "street": "789 Pine Rd" }
]
}
Ausgabe:
{
"customers": [
{
"customerId": "C001",
"name": "Alice",
"customerAddresses": [
{ "customerId": "C001", "type": "home", "street": "123 Main St" },
{ "customerId": "C001", "type": "work", "street": "456 Oak Ave" }
]
},
{
"customerId": "C002",
"name": "Bob",
"customerAddresses": [
{ "customerId": "C002", "type": "home", "street": "789 Pine Rd" }
]
}
],
"addresses": [
{ "customerId": "C001", "type": "home", "street": "123 Main St" },
{ "customerId": "C001", "type": "work", "street": "456 Oak Ave" },
{ "customerId": "C002", "type": "home", "street": "789 Pine Rd" }
]
}
Beispiel 3: Produkte mit Kategorien
Verknüpfen Sie Produkte mit Kategorieinformationen:
transformations:
- type: Join@1
path: $.products[*]
keyPath: $.categoryId
joinPath: $.categories[*]
joinKeyPath: $.id
itemPath: $.categoryDetails
Eingabe:
{
"products": [
{ "id": "P001", "name": "Laptop", "categoryId": "CAT1" },
{ "id": "P002", "name": "Mouse", "categoryId": "CAT1" },
{ "id": "P003", "name": "Book", "categoryId": "CAT2" }
],
"categories": [
{ "id": "CAT1", "name": "Electronics", "department": "Tech" },
{ "id": "CAT2", "name": "Books", "department": "Media" }
]
}
Ausgabe:
{
"products": [
{
"id": "P001",
"name": "Laptop",
"categoryId": "CAT1",
"categoryDetails": [
{ "id": "CAT1", "name": "Electronics", "department": "Tech" }
]
},
{
"id": "P002",
"name": "Mouse",
"categoryId": "CAT1",
"categoryDetails": [
{ "id": "CAT1", "name": "Electronics", "department": "Tech" }
]
},
{
"id": "P003",
"name": "Book",
"categoryId": "CAT2",
"categoryDetails": [
{ "id": "CAT2", "name": "Books", "department": "Media" }
]
}
],
"categories": [
{ "id": "CAT1", "name": "Electronics", "department": "Tech" },
{ "id": "CAT2", "name": "Books", "department": "Media" }
]
}
Beispiel 4: Keine übereinstimmenden Datensätze
Wenn keine übereinstimmenden Datensätze gefunden werden, wird ein leeres Array erstellt:
transformations:
- type: Join@1
path: $.employees[*]
keyPath: $.departmentId
joinPath: $.departments[*]
joinKeyPath: $.id
itemPath: $.departmentInfo
Eingabe:
{
"employees": [
{ "id": "E001", "name": "John", "departmentId": "DEPT99" }
],
"departments": [
{ "id": "DEPT1", "name": "Engineering" },
{ "id": "DEPT2", "name": "Marketing" }
]
}
Ausgabe:
{
"employees": [
{
"id": "E001",
"name": "John",
"departmentId": "DEPT99",
"departmentInfo": []
}
],
"departments": [
{ "id": "DEPT1", "name": "Engineering" },
{ "id": "DEPT2", "name": "Marketing" }
]
}
Anwendungsfälle
- Auftragsverarbeitung: Verknüpfen Sie Bestellungen mit ihren Positionen, Versanddetails oder Zahlungsinformationen
- Kundendaten: Kombinieren Sie Kundendatensätze mit Adressen, Präferenzen oder Transaktionshistorie
- Produktkataloge: Verknüpfen Sie Produkte mit Kategorien, Spezifikationen oder Preisinformationen
- Datenanreicherung: Fügen Sie Primärdatensätzen Referenzdaten aus Lookup-Tabellen hinzu
- Hierarchische Daten: Kombinieren Sie übergeordnete Datensätze mit ihren untergeordneten Datensätzen
- Berichterstellung: Aggregieren Sie verwandte Daten aus mehreren Quellen für Berichte
Hinweise
- Many-to-Many-Joins: Der Node unterstützt Many-to-Many-Beziehungen, bei denen ein Quelldatensatz mit mehreren Join-Datensätzen übereinstimmen kann
- Array-Ergebnisse: Übereinstimmende Datensätze werden immer als Array gespeichert, auch wenn nur eine Übereinstimmung gefunden wird
- Originaldaten bleiben erhalten: Sowohl das Quell- als auch das Join-Array bleiben in der Ausgabe unverändert
- Pfadanforderungen: Alle Pfade (
keyPath,joinKeyPath,itemPath) sind relativ zu ihrem jeweiligen Objektkontext - Performance: Große Datensätze können die Performance beeinträchtigen; erwägen Sie, die Daten vor dem Verknüpfen nach Möglichkeit zu filtern
- Datentypen: Schlüsselwerte werden als Strings verglichen; stellen Sie daher konsistente Datentypen sicher
Verwandte Nodes
- Project@1: Bestimmte Felder aus verknüpften Daten auswählen
- DataMapping@1: Die Struktur verknüpfter Daten transformieren
- FilterLatestUpdateInfo@1: Verknüpfte Datensätze basierend auf Aktualisierungsinformationen filtern