Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/knut

.nornir/assets/thund-fan-in.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 340" font-family="-apple-system,Segoe UI,Roboto,sans-serif" font-size="14">
  <defs>
    <marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
      <path d="M0,0 L7,3 L0,6 Z" fill="#555"/>
    </marker>
  </defs>
  <text x="24" y="26" font-weight="700" font-size="16">Multi-flow fan-in — N append flows union into one target</text>
  <text x="24" y="46" fill="#555" font-size="12">SDP's "one table, N append flows": each flow reads its OWN source; the executor unions, never clobbers.</text>

  <!-- sources (green) -->
  <text x="24" y="80" fill="#2f8f4e" font-size="12" font-weight="600">sources · each flow's own</text>
  <rect x="24" y="90" width="150" height="44" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
  <text x="99" y="112" text-anchor="middle" font-weight="600">east</text>
  <text x="99" y="128" text-anchor="middle" fill="#555" font-size="11">with_input / file</text>
  <rect x="24" y="150" width="150" height="44" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
  <text x="99" y="172" text-anchor="middle" font-weight="600">west</text>
  <text x="99" y="188" text-anchor="middle" fill="#555" font-size="11">with_input / file</text>
  <rect x="24" y="210" width="150" height="44" rx="8" fill="#eefaf0" stroke="#2f8f4e" stroke-width="1.5"/>
  <text x="99" y="232" text-anchor="middle" font-weight="600">…</text>
  <text x="99" y="248" text-anchor="middle" fill="#555" font-size="11">any Nth source</text>

  <!-- flows (blue) -->
  <rect x="238" y="90" width="196" height="44" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="336" y="112" text-anchor="middle" font-weight="600">Flow "from_east"</text>
  <text x="336" y="128" text-anchor="middle" fill="#555" font-size="11">SELECT … FROM east</text>
  <rect x="238" y="150" width="196" height="44" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="336" y="172" text-anchor="middle" font-weight="600">Flow "from_west"</text>
  <text x="336" y="188" text-anchor="middle" fill="#555" font-size="11">SELECT … FROM west</text>
  <rect x="238" y="210" width="196" height="44" rx="8" fill="#eef3fb" stroke="#2b5fb3" stroke-width="1.5"/>
  <text x="336" y="232" text-anchor="middle" font-weight="600">Flow "from_…"</text>
  <text x="336" y="248" text-anchor="middle" fill="#555" font-size="11">same target</text>

  <!-- source -> flow -->
  <path d="M174,112 L238,112" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M174,172 L238,172" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M174,232 L238,232" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>

  <!-- union node (orange) -->
  <rect x="498" y="128" width="172" height="88" rx="8" fill="#fdf2ec" stroke="#c26a2b" stroke-width="1.5"/>
  <text x="584" y="154" text-anchor="middle" font-weight="700">union_append</text>
  <text x="584" y="176" text-anchor="middle" fill="#555" font-size="12">prior ++ fresh</text>
  <text x="584" y="196" text-anchor="middle" fill="#c26a2b" font-size="11" font-style="italic">schema must match — else loud fail</text>

  <!-- flows -> union (fan-in) -->
  <path d="M434,112 C466,120 468,150 498,158" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M434,172 L498,172" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M434,232 C466,224 468,196 498,188" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>

  <!-- target (purple) -->
  <rect x="726" y="90" width="150" height="52" rx="8" fill="#f6eefb" stroke="#7a3fb3" stroke-width="1.5"/>
  <text x="801" y="112" text-anchor="middle" font-weight="600">Dataset "all_sales"</text>
  <text x="801" y="130" text-anchor="middle" fill="#555" font-size="11">every flow's rows</text>

  <!-- downstream + sink (purple) -->
  <rect x="726" y="176" width="150" height="52" rx="8" fill="#f6eefb" stroke="#7a3fb3" stroke-width="1.5"/>
  <text x="801" y="198" text-anchor="middle" font-weight="600">downstream · sink</text>
  <text x="801" y="216" text-anchor="middle" fill="#555" font-size="11">sees the full union</text>

  <path d="M670,150 C698,132 700,124 726,120" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <path d="M670,190 C698,196 700,200 726,202" fill="none" stroke="#555" stroke-width="1.5" marker-end="url(#a)"/>
  <text x="676" y="118" fill="#c26a2b" font-size="11">materialise</text>
</svg>