Zum Hauptinhalt springen

Distinct@1

Der Node Distinct@1 entfernt doppelte Objekte aus einem Array basierend auf einem eindeutigen Eigenschaftswert. Er behält nur das erste Vorkommen jedes eindeutigen Werts und filtert nachfolgende Duplikate heraus.

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: Distinct@1
path: $.items[*] # Path to the array containing objects to deduplicate
distinctValuePath: $.id # Relative path to the property that defines uniqueness
targetPath: $.uniqueItems # Path where the deduplicated array should be stored

Parameter​

Erforderliche Parameter​

ParameterTypBeschreibung
pathstringJSON-Pfad zum Quell-Array, das die zu deduplizierenden Objekte enthält
distinctValuePathstringRelativer Pfad zur Eigenschaft innerhalb jedes Objekts, die die Eindeutigkeit definiert
targetPathstringJSON-Pfad, an dem das deduplizierte Array gespeichert wird

Optionale Parameter​

ParameterTypStandardBeschreibung
targetValueWriteModestringOverwriteWie das Ergebnis geschrieben wird (Overwrite, Append, Prepend)
targetValueKindstringSimpleDie Art des zu schreibenden Werts (Simple, Array)
documentModestringExtendDokumentmodus (Extend, Replace)

Unterstützte Datentypen​

Die Eigenschaft distinctValuePath muss auf einen Wert eines einfachen Typs verweisen. Die folgenden Datentypen werden für den Eindeutigkeitsvergleich unterstützt:

  • Integer (long)
  • Float (double)
  • String
  • Boolean
  • DateTime

Deduplizierungsverhalten​

  • Der Node verarbeitet nur Objekte (JObject) innerhalb des Quell-Arrays
  • Das erste Vorkommen jedes eindeutigen Werts wird beibehalten; nachfolgende Duplikate werden entfernt
  • Objekte ohne einen Wert am distinctValuePath werden übersprungen
  • Werte werden anhand ihrer typisierten Repräsentation verglichen (nicht anhand der String-Konvertierung)

Beispiele​

Beispiel 1: Doppelte Sensoren nach ID entfernen​

Entfernen Sie doppelte Sensormessungen und behalten Sie nur das erste Vorkommen:

transformations:
- type: Distinct@1
path: $.readings[*]
distinctValuePath: $.sensorId
targetPath: $.uniqueReadings

Eingabe:

{
"readings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S001", "value": 26.0, "timestamp": "2024-01-01T10:05:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 31.0, "timestamp": "2024-01-01T10:05:00Z" }
]
}

Ausgabe:

{
"readings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S001", "value": 26.0, "timestamp": "2024-01-01T10:05:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 31.0, "timestamp": "2024-01-01T10:05:00Z" }
],
"uniqueReadings": [
{ "sensorId": "S001", "value": 25.5, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S002", "value": 30.0, "timestamp": "2024-01-01T10:00:00Z" },
{ "sensorId": "S003", "value": 22.5, "timestamp": "2024-01-01T10:00:00Z" }
]
}

Beispiel 2: Deduplizierung nach verschachtelter Eigenschaft​

Verwenden Sie einen verschachtelten Pfad zur Bestimmung der Eindeutigkeit:

transformations:
- type: Distinct@1
path: $.orders[*]
distinctValuePath: $.customer.email
targetPath: $.uniqueCustomerOrders

Eingabe:

{
"orders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O003", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
]
}

Ausgabe:

{
"orders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O003", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
],
"uniqueCustomerOrders": [
{ "orderId": "O001", "customer": { "email": "john@example.com", "name": "John" } },
{ "orderId": "O002", "customer": { "email": "jane@example.com", "name": "Jane" } },
{ "orderId": "O004", "customer": { "email": "bob@example.com", "name": "Bob" } }
]
}

Beispiel 3: Deduplizierung nach numerischem Wert​

Entfernen Sie Duplikate basierend auf einer Integer-Eigenschaft:

transformations:
- type: Distinct@1
path: $.products[*]
distinctValuePath: $.categoryId
targetPath: $.uniqueCategories

Eingabe:

{
"products": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Mouse", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 },
{ "name": "Notebook", "categoryId": 2 }
]
}

Ausgabe:

{
"products": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Mouse", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 },
{ "name": "Notebook", "categoryId": 2 }
],
"uniqueCategories": [
{ "name": "Laptop", "categoryId": 1 },
{ "name": "Book", "categoryId": 2 },
{ "name": "Pen", "categoryId": 3 }
]
}

Beispiel 4: Deduplizierung an Ort und Stelle​

Speichern Sie das Ergebnis wieder am selben Ort:

transformations:
- type: Distinct@1
path: $.events[*]
distinctValuePath: $.eventType
targetPath: $.events
targetValueWriteMode: Overwrite

Eingabe:

{
"events": [
{ "eventType": "click", "timestamp": "2024-01-01T10:00:00Z" },
{ "eventType": "scroll", "timestamp": "2024-01-01T10:01:00Z" },
{ "eventType": "click", "timestamp": "2024-01-01T10:02:00Z" },
{ "eventType": "hover", "timestamp": "2024-01-01T10:03:00Z" }
]
}

Ausgabe:

{
"events": [
{ "eventType": "click", "timestamp": "2024-01-01T10:00:00Z" },
{ "eventType": "scroll", "timestamp": "2024-01-01T10:01:00Z" },
{ "eventType": "hover", "timestamp": "2024-01-01T10:03:00Z" }
]
}

Anwendungsfälle​

  • Datenbereinigung: Entfernen Sie doppelte Datensätze aus importierten Daten
  • Sensordaten: Behalten Sie nur eindeutige Sensormessungen, wenn Duplikate auftreten
  • Ereignisverarbeitung: Filtern Sie doppelte Ereignisse basierend auf Ereignistyp oder ID
  • Benutzerdaten: Ermitteln Sie eindeutige Benutzer aus einer Liste von Aktivitäten
  • Kategorieextraktion: Extrahieren Sie ein repräsentatives Element pro Kategorie

Hinweise​

  • Reihenfolgeerhaltung: Das erste Vorkommen jedes eindeutigen Werts wird beibehalten; die Reihenfolge der eindeutigen Elemente bleibt erhalten
  • Null-Behandlung: Objekte ohne einen Wert am distinctValuePath werden vom Ergebnis ausgeschlossen
  • Typsensitivität: Werte werden anhand ihrer nativen Typen verglichen (z. B. ist die Ganzzahl 1 verschieden vom String "1")
  • Leere Arrays: Wenn das Quell-Array leer oder null ist, wird keine Ausgabe geschrieben
  • Originaldaten: Das ursprüngliche Quell-Array bleibt unverändert, es sei denn, targetPath verweist auf denselben Ort

Verwandte Nodes​

  • Flatten@1: Verschachtelte Array-Strukturen abflachen
  • Map@1: Array-Daten transformieren, indem mehrere Arrays in Objekte abgebildet werden
  • Join@1: Arrays basierend auf übereinstimmenden Schlüsseln kombinieren