Distinct

logic_distinct · logic · Logica & Flow · Disponibile · v1.0.0

Descrizione

Operatore di deduplicazione enterprise che rimuove voci duplicate da un array di oggetti — la primitiva fondamentale di tutte le pipeline ETL e analytics dove si aggregano dati da fonti multiple (webhook retry, scraping multi-pagina, merge CRM+marketing+social, ingest legacy CSV) e ci si trova inevitabilmente con record fantasma duplicati che inquinano analytics, popolano email a stesso cliente più volte, generano notifiche multiple del stesso evento, gonfiano i counter di KPI. Due modalità complementari per coprire tutti i pattern di equality semantic: (1) Mode senza key (deep equality structural) — compara l'intero oggetto serializzato come JSON canonical-form (ordering deterministico dei field per evitare false positive su { name: "A", city: "X" } vs { city: "X", name: "A" } che son lo stesso oggetto), match esatto bit-perfect tra item considerati duplicati, drop dei subsequent occurrences preservando il PRIMO inserito (preserve order originale array che è semantica naturale per LRU-like behavior); (2) Mode con key field — l'utente specifica uno o più campi (es. ["email"], oppure ["vat", "country"] per dedup composta), item con stesso valore (concatenato per multi-key) restano solo il primo, gli altri vengono droppati anche se diversi in altri campi (use case: dedup per email_address di un merge di N sorgenti CRM dove la stessa persona compare con nomi formattati diversamente — "Mario Rossi" vs "M. Rossi" vs "MARIO ROSSI" tutti via email [email protected] → tieni solo il primo, scarta gli altri 2). Performance: l'algoritmo usa un Set per lookup O(N) invece di O(N²) naïve double-loop — gestisce array di 100k+ item senza saturare la CPU. La normalizzazione opzionale (flag "normalize") applica trim+lowercase ai valori-stringa dei campi prima del confronto (dedup "Mario@X" == "mario@x "). Output: { items (array dedupped, ordine originale preservato, primo match tenuto), original, distinct, removed, removalPercent, exampleDuplicates (fino a 5 esempi di duplicati rimossi per debug/audit) }. Use case operativi: dedup lista email/contatti dopo merge di N sorgenti CRM (Pipedrive imported + Mailchimp + Odoo res.partner) prima di un mass-mailing per evitare di spedire 3× allo stesso indirizzo (GDPR fastidio + reputation IP); unique URL da scraping multi-pagina/multi-spider perché lo stesso URL può comparire come link in 10 pagine diverse del sito ma vogliamo crawlarlo solo 1×; rimuovere ordini duplicati ricevuti via webhook retry (Stripe/PayPal con at-least-once delivery garantita riprovano webhook fino a 3-7 volte in caso di timeout — gestione idempotency); normalize result list pre-loop per evitare lavorazione doppia di stesso item in logic_loop body (es. per fiscal_code dei clienti ricevuti da PEC, per messageId Slack già processati, per event_id audit_log per ingest analytics warehouse).

⚙️ Parametri di configurazione

Campi mostrati nell’editor quando si configura il nodo. Generati direttamente dal NodeDefconfigFields.

CampoTipoRequiredDefaultDescrizione
sourceExpression
Array da deduplicare
expressionsiinputEspressione JS che ritorna un array. Default = input.
field
Campo/i per il confronto (opzionale)
stringno
es. email oppure vat,country
Uno o più campi separati da virgola (dedup composta, es. "vat,country"). Supporta dot-path (user.email). Se vuoto, confronta l'intero item (equivalenza strutturale canonica).
normalize
Normalizza (trim + minuscolo)
booleannofalseSe ON: i valori-stringa dei campi sono trim+lowercase prima del confronto (es. dedup email case-insensitive). Applicato solo in modalità con campo/i.
maxItems
Max item (cap difensivo)
numberno100000Hard cap anti-OOM sul numero di item processati. Se l'input supera questa soglia viene troncato e deduplica solo i primi N (warning emesso). Default 100k, tetto 1M.

💡 Esempio configurazione

Snippet JSON del nodo come compare nel workflow. I valori sono derivati daidefaultValue e dai parametri required.

{
  "id": "node-logic_distinct-1",
  "defId": "logic_distinct",
  "label": "Distinct",
  "config": {
    "sourceExpression": "input",
    "normalize": false,
    "maxItems": 100000
  }
}

🔗 Nodi correlati nella stessa categoria

Pronto a usare Distinct?

Disponibile da subito in tutti i piani FlowForge. Provalo gratis senza carta di credito.

Inizia gratisSfoglia tutti i nodi