Tema
Nodo: union
Riunisce N flussi con la stessa forma in uno solo. I record passano invariati: niente chiave, niente merge. È il tUnite di Talend.
| Metodo | .union(id, { from, order? }, { purpose?, writeReport? }) |
|---|---|
| Ingressi | ≥2, nell'ordine di from |
| Uscite | ≥1 (fan-out libero) |
| Dead-letter | no: non scarta record |
| Codice | src/core/union.ts |
Quando usarlo
Per trattare come un unico flusso più sorgenti con lo stesso tracciato: N workspace, N file, N tabelle identiche, o rami di un route che tornano insieme. Se i flussi vanno accoppiati per chiave, è un join.
Esempio
ts
.union("tutti", {
from: ["ws-nord", "ws-sud", { node: "smista", port: "default" }],
order: "concat",
})
.transform("tutti", "dedup", dedup)Un ingresso da un nodo con porte (route, try-catch) si scrive { node, port }.
L'ordine
order | Come legge | Output |
|---|---|---|
"interleave" (default) | Tutti gli ingressi insieme, al più un record in sospeso per ingresso | Nell'ordine di arrivo |
"concat" | Un ingresso dopo l'altro, nell'ordine di from | Deterministico |
concat serve quando conta l'ordine, per esempio a un dedup che tiene il primo. L'ordine sta in from, non nell'ordine in cui sono scritti gli edge.
Mai concat su ingressi con un antenato comune (un fan-out o un route a monte): il primo ingresso si leggerebbe tutto mentre il secondo resta fermo, e il flusso si bloccherebbe. build() lo rifiuta: con ingressi di origine comune si usa interleave.
Forme diverse
Il union non controlla che gli ingressi abbiano la stessa forma: è affare di un validate() a valle. Nel DAG il nodo mostra le colonne solo se concordano gli ingressi che ne hanno.
Errori
Nessuna dead-letter propria: un errore di un ramo interrompe la run o finisce sul ramo catch, come per ogni altro nodo. Un union dentro lo scope di un try-catch non estende lo scope ai suoi ingressi esterni: un errore nato fuori risale e ferma la run, anche se attraversa il union.

