| Comments | None in the language | Keep notes in view descriptions |
| Types | No date type | ISO-8601 text or epoch milliseconds, date functions |
| Missing fields | Fail the query, except in exists, coalesce, optional and ? paths | f?, exists(f) and …, coalesce(f, d) |
| Null in functions | Numeric, text and date functions refuse null | coalesce(f?, default) |
| Coercion | None across kinds | to_int, to_float, to_string, to_bool |
| Parameters | Bound as literals: each set of values is planned (and cached) separately | none needed |
let (query) | Read-only, at most 1,000 rows | Aggregate in the query |
select, sort, limit, skip | Once per pipeline | Use a sub-pipeline, or first (may repeat) |
count | Terminal | derive k = 0 | group | by k | count as n | end |
window | A partition must fit the query working set; field-path keys; top level or a union branch | Partition more finely; derive keys first |
fill | At most 100,000 grid values; field-path by; top level or a union branch | derive first |
range() | At most 1,000,000 items | |
round() digits | 0 to 15 | |
| Views | 8 levels of views reading views; no cycle | Flatten a level |
| Materialized views | No parameters | Bind with let inside, filter in a view above |
lookup view | The view’s source must be a bare on <collection> or on values […] | Materialize the view, then lookup view it |
| Integers on the wire | Above 2³² sent as floats; above 2⁵³ refused | Send large identifiers as strings |
| Blocking shapes | Only the bounded shapes of 14.3 run | Reorder, bound with limit, or materialize |
| History | Needs OGD_HISTORY=on | |
aggregate | Not a stage | group, count, pivot |