RWM Console cluster: risingwave-adib.adib-rw.svc.cluster.local

← cluster insights objects client_to_account_groups_sink explain
Overview Objects Graph History
sink · insights.client_to_account_groups_sink profiled over 5s
seconds (1–30)

Job is idle — throughput ~0; structure shown.

Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
17 operators
Sink · insights.client_to_account_groups_sink
0% idle 2 actors
Project · upsert · ((client_to_account_groups_mv_next.type = 'none':Varchar) O…
2 actors
Filter · upsert · ((client_to_account_groups_mv_next.type = 'none':Varchar) O…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · client_to_account_groups_mv_next.client_id = client_account…
2 actors
HashJoin · LeftOuter · client_to_account_groups_mv_next.client_id = client_account… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · client_account_group_types_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · client_to_account_groups_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Heat = the operator's output-buffer backpressure over the sampling window. Click a node to fold its subtree.
Sink · insights.client_to_account_groups_sink Sink insights.client_to_acco… idle · 2 actors Project · upsert · ((client_to_account_groups_mv_next.type = 'none':Varchar) O… Project upsert · ((client_to_ac… — · 2 actors Filter · upsert · ((client_to_account_groups_mv_next.type = 'none':Varchar) O… Filter upsert · ((client_to_ac… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · client_to_account_groups_mv_next.client_id = client_account… SyncLogStore LeftOuter · client_to_a… — · 2 actors HashJoin · LeftOuter · client_to_account_groups_mv_next.client_id = client_account… HashJoin LeftOuter · client_to_a… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · client_account_group_types_mv_next StreamScan client_account_group_ty… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · client_to_account_groups_mv_next StreamScan client_to_account_group… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors
Streaming operator plan from EXPLAIN ANALYZE. Node heat = backpressure. Drag to pan, scroll to zoom.
Fragments (DESCRIBE FRAGMENTS) — click to expand
Fragment 16269 (Actor 96587,96588)
StreamSink { type: upsert, columns: [client_id, account_group_id, type, client_to_account_groups_mv_next.$src(hidden)], downstream_pk: [client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type] }
├── output: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type, client_to_account_groups_mv_next.$src ]
├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]
└── StreamProject { exprs: [client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type, client_to_account_groups_mv_next.$src] }
    ├── output: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type, client_to_account_groups_mv_next.$src ]
    ├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]
    └── StreamFilter { predicate: ((client_to_account_groups_mv_next.type = 'none':Varchar) OR Not(IsNull(client_account_group_types_mv_next.client_id))) }
        ├── output:
        │   ┌── client_to_account_groups_mv_next.client_id
        │   ├── client_to_account_groups_mv_next.account_group_id
        │   ├── client_to_account_groups_mv_next.type
        │   ├── client_account_group_types_mv_next.client_id
        │   ├── client_to_account_groups_mv_next.$src
        │   └── client_account_group_types_mv_next.type
        ├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]
        └── MergeExecutor
            ├── output:
            │   ┌── client_to_account_groups_mv_next.client_id
            │   ├── client_to_account_groups_mv_next.account_group_id
            │   ├── client_to_account_groups_mv_next.type
            │   ├── client_account_group_types_mv_next.client_id
            │   ├── client_to_account_groups_mv_next.$src
            │   └── client_account_group_types_mv_next.type
            └── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]

Fragment 16270 (Actor 96585,96586)
StreamSyncLogStore
├── output:
│   ┌── client_to_account_groups_mv_next.client_id
│   ├── client_to_account_groups_mv_next.account_group_id
│   ├── client_to_account_groups_mv_next.type
│   ├── client_account_group_types_mv_next.client_id
│   ├── client_to_account_groups_mv_next.$src
│   └── client_account_group_types_mv_next.type
├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]
└── StreamHashJoin { type: LeftOuter, predicate: client_to_account_groups_mv_next.client_id = client_account_group_types_mv_next.client_id AND client_to_account_groups_mv_next.type = client_account_group_types_mv_next.type }
    ├── output:
    │   ┌── client_to_account_groups_mv_next.client_id
    │   ├── client_to_account_groups_mv_next.account_group_id
    │   ├── client_to_account_groups_mv_next.type
    │   ├── client_account_group_types_mv_next.client_id
    │   ├── client_to_account_groups_mv_next.$src
    │   └── client_account_group_types_mv_next.type
    ├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src, client_to_account_groups_mv_next.type ]
    ├── MergeExecutor
    │   ├── output: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type, client_to_account_groups_mv_next.$src ]
    │   └── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src ]
    └── MergeExecutor { output: [ client_account_group_types_mv_next.client_id, client_account_group_types_mv_next.type ], stream key: [ client_account_group_types_mv_next.client_id, client_account_group_types_mv_next.type ] }

Fragment 16271 (Actor 96625,96626)
StreamTableScan { table: client_to_account_groups_mv_next, columns: [client_id, account_group_id, type, $src] }
├── output: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.account_group_id, client_to_account_groups_mv_next.type, client_to_account_groups_mv_next.$src ]
├── stream key: [ client_to_account_groups_mv_next.client_id, client_to_account_groups_mv_next.$src ]
├── Upstream { output: [ client_id, account_group_id, type, $src ], stream key: [] }
└── BatchPlanNode { output: [ client_id, account_group_id, type, $src ], stream key: [] }

Fragment 16272 (Actor 96619,96620)
StreamTableScan { table: client_account_group_types_mv_next, columns: [client_id, type] }
├── output: [ client_account_group_types_mv_next.client_id, client_account_group_types_mv_next.type ]
├── stream key: [ client_account_group_types_mv_next.client_id, client_account_group_types_mv_next.type ]
├── Upstream { output: [ client_id, type ], stream key: [] }
└── BatchPlanNode { output: [ client_id, type ], stream key: [] }