MODEL() header and one outer SELECT. StreamBuild uses the
result to create a ClickHouse table and the materialized view that writes into it.
- fields are whitespace-separated
key valueentries - lists use
[...] - nested mappings use
(...) - commas are optional separators and may trail the final entry
- values containing spaces must be quoted
key: value and {...} mappings are not accepted. MODEL (); uses all defaults.
SQL contract
The outer statement must be oneSELECT. Every outer projection must:
- be explicit rather than
* - have a unique alias
- declare an exact ClickHouse type with
CAST(expr AS Type) AS aliasorexpr::Type AS alias
UNION, INTERSECT,
or EXCEPT is rejected; wrap it in a CTE and finish with a typed projection.
order_by, partition_by, and ttl expressions may reference only output columns.
Header fields
replay_on_change and bounded_replay_fallback are rejected in direct mode. replay_anchor
remains valid because direct rebuilds also need replay roots.
Driving references
A model has exactly one untyped driving input:__source. Downstream models use __ref.
Additional joins and subqueries must declare their role:
Mutable references emit a replay warning and prevent the model from being a replay anchor. Both
side-reference types participate in graph scope and ordering.
Replay columns
Normalized replay columns are source-independent:Engines and duplicate delivery
Common engines includeMergeTree, ReplacingMergeTree, SummingMergeTree, and
AggregatingMergeTree, including replicated variants. Engine choice is part of replay correctness:
the replay cutoff is inclusive, so authored SQL and storage engines must tolerate duplicate delivery
where necessary.
