Berserk Docs
Scalar FunctionsDynamic / JSON Functions

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}]}

On this page