Skip to main content

Filter node

Decision

The Filter node drops rows that don't match a rule set. It's the cheap early-exit node in a flow: place it right after Source to keep the pipeline light and downstream nodes fast.

When to use

  • The Source returns more rows than the downstream steps need, and pre-filtering saves cost / time.
  • You want to route only a subset of rows to a downstream branch (combine with Fork if the other subset should still flow somewhere).
  • The predicate is expressible as a set of AND / OR conditions over row columns.

Ports

PortDirectionKindNotes
inindataRows to evaluate.
outoutdataRows that matched.
erroroutcontrolFires on expression eval errors when strict mode is on.
notifyoutcontrolNotification policy port.

Configuration

  • Mode.
    • rules (default) — a structured predicate builder: groups of { field, op, value } rows combined with AND / OR.
    • expr — a raw expression (AND(GT(row.amount, 100), EQ(row.currency, "USD"))).
  • Rule ops. equals, not equals, contains, starts with, ends with, regex, greater than, less than, is null, is not null, in list.
  • Value. Literal or a {{ row.column }} / {{ exec.variable }} reference.

Configure Action walkthrough

  1. Toggle mode: Rules (structured) or Expression (raw).
  2. In Rules mode: pick a field with the SchemaFieldSelect (dropdown of upstream columns), pick an op, enter a value. Add rules to build an AND group; add groups for OR.
  3. In Expression mode: use the evalTransformExpr function catalog. AND / OR / NOT / IF compose predicates.

Runtime behaviour

  • Per-row evaluation. Truthy result → row emitted on out. Falsy → row dropped.
  • Expression errors on a specific row route the row to error when strict mode is on; otherwise the row is treated as non-matching.

Failure modes

  • Regex misparse. The modal validates the regex at Save time.
  • Type mismatch. Comparisons coerce leniently (GT("5", 3) treats the left as a number). Use CAST-style expressions (ADD(row.x, 0)) for numeric coercion.