summarize_graph
Collapse a canonical `{nodes, edges}` graph (from `make_graph`) by a node attribute.
Each node's edge re-routes to its nearest ancestor whose key
attribute differs, merging nodes that share the same key value — collapsing a
span graph by service yields a service dependency graph, by exe a
process-name graph.
Each trailing "<agg>:<attr>" argument aggregates that attribute across the
merged nodes/edges: sum, avg (numeric), min, max (numeric/datetime, or
strings compared lexicographically — the comparison follows the type of the
earliest value by time, so a numbers-then-strings mix is undefined),
countif (boolean → count of trues), set (distinct values), any (a
representative), first (value at the earliest time). The intrinsic count is summed and
time min-merged automatically; the key becomes the new node id; unlisted
attributes are dropped. Returns null if g is not a graph or key is null.
Syntax
summarize_graph(g, key, aggs)Parameters
Prop
Type
Given a dynamic field
This parameter is string-only. In permissive mode — the default — almost every field arrives as a dynamic, so passing one works because Berserk injects asstring: extract-or-null, the value when it really is a string and null otherwise, so the call yields null (a predicate yields false). A property bag or array is therefore not matched, and tostring() is never applied implicitly — use it explicitly to match a bag's JSON text, keys included. Strict mode rejects the dynamic instead of coercing it. See String coercion and the asXXX family.
Returns: dynamic
Examples
Example 1
spans
| summarize g = make_graph(
span_id,
parent_span_id,
start_time,
"service",
resource.service.name,
"errors",
status_code == "ERROR"
)
by trace_id
| project g = summarize_graph(g, "service", "countif:errors")| g (dynamic) |
|---|
| {"edges":[],"nodes":[{"attrs":{"errors":0},"count":2,"id":"unknown","time":1704103260000000000}]} |
| {"edges":[],"nodes":[{"attrs":{"errors":0},"count":2,"id":"unknown","time":1704103320000000000}]} |
| {"edges":[],"nodes":[{"attrs":{"errors":0},"count":5,"id":"unknown","time":1704103200000000000}]} |