Módulo 4: Merge Avanzado y Fan-Out / Fan-In
Merge: Los 4 Modos Profundizados
Descripción de la cápsula
En G1-M07-04 viste los 4 modos del Merge (Append, Combine, Multiplex, Wait). Esta cápsula los profundiza con escenarios reales, cuándo cada uno es la elección correcta, los edge cases de cada modo, y los trade-offs de performance entre ellos.
Saber cuál modo en cada caso es la diferencia entre un workflow que funciona "casi" y uno que funciona siempre sin sorpresas.
Lo que vas a aprender
- ✅ Dominar los 4 modos: Append, Combine, Multiplex, Wait
- ✅ Distinguir sub-modos de Combine (Inner, Enrich, Keep Non-Matches)
- ✅ Aplicar el modo correcto según necesidad
- ✅ Resolver casos edge (campos faltantes, duplicados, tipos distintos)
Modo 1: Append (concatenar listas)
Qué hace: une items de Input 1 e Input 2 en una sola lista. No matchea ni junta — solo concatena.
Input 1: [A, B, C]
Input 2: [D, E]
Output: [A, B, C, D, E]
Cuándo usar
- Combinar resultados de 2 búsquedas distintas sin necesidad de matchear
- Acumular items de fuentes parecidas
- Listas independientes que solo necesitas juntar
Ejemplo real
Procesar leads de Sheet y leads del CRM en el mismo workflow:
[Sheet read leads] ──┐
├─→ [Merge: Append] → [enviar a Slack todos juntos]
[CRM API read leads]─┘
Ambas fuentes producen leads. Append los junta para procesar uniformemente.
Edge cases
- Items con estructuras distintas: Append los junta de todos modos. El output tiene items mixtos — siguiente nodo debe manejarlo.
- Duplicados: Append no dedupa. Si lead "Mike" está en Sheet y CRM, sale 2 veces.
Modo 2: Combine (SQL JOIN)
Qué hace: matchea items de Input 1 con Input 2 por un campo común, los combina en items unidos.
Sub-modos
Inner Join (Keep Matches Only)
Solo items que matchean en ambos inputs.
Input 1: [{ id: 1, name: "Mike" }, { id: 2, name: "Ana" }]
Input 2: [{ id: 1, email: "m@x.com" }, { id: 3, email: "l@y.com" }]
Inner Join → [{ id: 1, name: "Mike", email: "m@x.com" }]
Solo id: 1 está en ambos. El resto se descarta.
Enrich Input 1 (Left Join)
Todos los items de Input 1, enriquecidos con datos de Input 2 si hay match.
Output: [
{ id: 1, name: "Mike", email: "m@x.com" },
{ id: 2, name: "Ana", email: null }
]
Mike y Ana del Input 1, Mike con email, Ana sin (no había match).
Keep Non-Matches Only
Items que no matchean. Útil para detectar diferencias.
Output: [
{ id: 2, name: "Ana" }, // estaba en Input 1, no en Input 2
{ id: 3, email: "l@y.com" } // estaba en Input 2, no en Input 1
]
Cuándo usar Combine
- Sheet leads + CRM data: Enrich con datos del CRM
- Detectar leads "huérfanos": Keep Non-Matches → leads en CRM que no están en Sheet
- Validar consistencia: Inner Join entre 2 fuentes que deberían matchear
Edge cases
- Campos con nombres distintos: Combine soporta mapear (Input 1 field:
id, Input 2 field:lead_id) - Tipos distintos:
"1"(string) ≠1(number). Normalizar antes - Múltiples matches: si Input 2 tiene 3 items con
id: 1, qué hace Combine depende del modo
Modo 3: Multiplex (producto cartesiano)
Qué hace: combina cada item de Input 1 con cada item de Input 2. Si A tiene 3 y B tiene 4, output tiene 12.
Input 1: [A, B]
Input 2: [X, Y, Z]
Output: [
AX, AY, AZ,
BX, BY, BZ
]
Cuándo usar
- Generar combinaciones: crear emails a "cada cliente × cada plantilla"
- Producto matemático: raramente útil en business workflows
Edge cases
- Volumen explosivo: 100 × 100 = 10,000 items. Cuidado con memoria
- Resultados duplicados: combinaciones idénticas no se dedupan
Modo 4: Wait (sincronización)
Qué hace: espera a que ambos inputs lleguen, después continúa el flujo con ambos. No combina datos — sincroniza tiempo.
┌─→ [API A: tarda 3s] ──┐
[Trigger] ─────────►┤ ├─→ [Merge: Wait] → [continuar]
└─→ [API B: tarda 5s] ──┘
↑
espera 5s hasta que ambas terminen
Después del Merge, los datos siguen disponibles como input items separados (no fusionados).
Cuándo usar
- Esperar a múltiples fuentes antes de generar reporte
- Sincronizar ramas paralelas
- No quieres continuar hasta que todo termine
Edge cases
- Una rama falla: Wait puede colgar. Considerar Continue On Fail en las ramas.
- Tiempos muy distintos: Wait toma el tiempo de la rama más lenta.
Decisión: cuál modo en cada caso
| Necesidad | Modo |
|---|---|
| Juntar listas (sin matchear) | Append |
| Unir por ID común (todos) | Combine Enrich |
| Solo los que coinciden | Combine Inner |
| Solo los que NO coinciden | Combine Keep Non-Matches |
| Generar todas las combinaciones | Multiplex (raro) |
| Esperar a 2+ ramas paralelas | Wait |
Trampas comunes
Trampa 1: Combine con campos de tipos distintos
Qué pasa: Sheets devuelve id: "1" (string), API devuelve id: 1 (number). Combine no encuentra match.
Cómo evitar: Set previo que normaliza: id_num: Number($json.id).
Trampa 2: Append cuando esperabas Combine
Qué pasa: Tienes 2 fuentes con el mismo ID, esperabas 1 item enriquecido. Usaste Append → tienes 2 items separados.
Cómo evitar: Si quieres combinar campos, Combine. Si solo concatenar, Append.
Trampa 3: Multiplex sin querer
Qué pasa: Eliges Multiplex creyendo que es Append. 10 × 10 = 100 items inesperados.
Cómo evitar: Default debería ser Append; Multiplex solo cuando explícitamente quieres producto cartesiano.
Trampa 4: Wait con una rama que nunca llega
Qué pasa: Wait espera 2 inputs. Una rama falla silenciosamente (Continue on Fail). Wait nunca termina.
Cómo evitar: Asegurar que cada rama siempre produce output, aún en error. Default values con Set.
Ejercicio: identificar modo
Para cada caso, ¿qué modo usar?
- Quiero combinar leads del Sheet y del API usando
emailcomún - Quiero todos los leads, sin importar fuente (Sheet o CRM)
- Quiero detectar emails que existen en Sheet pero no en CRM
- Quiero esperar a que 3 APIs respondan antes de generar reporte
Respuestas
- Combine Inner Join (solo los que están en ambos) o Enrich (todos del primero + datos del segundo si hay match)
- Append
- Combine Keep Non-Matches del Sheet vs CRM
- Wait
Resumen y siguiente paso
- Append: concatenar listas independientes
- Combine: SQL JOIN — Inner (solo matches), Enrich (todos + match), Keep Non-Matches (solo diff)
- Multiplex: producto cartesiano (raro)
- Wait: sincronización temporal
- 4 trampas: tipos distintos, Append vs Combine confundido, Multiplex inesperado, Wait con rama colgada
Lo que sigue: Patrón "Combinar fuentes con Combine" — el caso más útil en práctica.
Creado: Mayo 11, 2026 Versión: 1.0