Groups rows and calculates aggregate values over each group.
Groups rows and calculates aggregate values over each group. Without a by clause, aggregates all rows into a single result.
Aggregate state is held in memory and merged at the coordinator before any result is produced, so it grows with group cardinality, time-bin count, and per-aggregate state (percentile sketches, make_set/make_list, histogram snapshots). To stay safe under load, every summarize runs under a per-operator memory budget. When a query exceeds it, the engine degrades rather than failing or running out of memory: it keeps a representative subset of series (the non-time group-key values), preserving every time bin of each surviving series so timecharts never get holes, and attaches a coverage warning reporting the estimated fraction of series retained. When there is no series axis to drop (for example grouping by bin(timestamp, …) alone), the query fails with an actionable error instead of returning a silently wrong number. Use hint.budget and hint.sample to tune this per query.
summarize [hint.sample=strategy] [hint.budget=size] aggregation, ... by column, ...
Tune the per-operator memory budget and the strategy used to shed state when it is exceeded. Hints appear immediately after summarize, before the aggregations.
Per-operator memory ceiling — a byte count (e.g. 67108864), a quoted binary size (e.g. "64mib"), or max (clamped to the deployment maximum). Lower to tighten, raise to loosen up to the deploy cap.