VGI exposes four function patterns. Pick the one that matches how your data flows:
| Pattern | Shape | Base class |
|---|---|---|
| Scalar | 1 row in → 1 row out | ScalarFunction / ScalarFunctionGenerator |
| Table | no input → rows out | TableFunctionGenerator |
| Table-in-out | rows in → rows out (streaming) | TableInOutFunction / TableInOutGenerator |
| Aggregate | grouped rows → one row per group | AggregateFunction |
All four ultimately derive from the shared Function base.
::: vgi.scalar_function
::: vgi.table_function
::: vgi.table_in_out_function
::: vgi.aggregate_function
::: vgi.function