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

← cluster insights objects intraday_fx_rates_latest_mv explain
Overview Objects Graph History
materialized view · insights.intraday_fx_rates_latest_mv 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 lookupsAggregation state — unbounded unless keyed or temporally filtered
39 operators
Materialize · insights.intraday_fx_rates_latest_mv
0% idle 2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = fx_rates_s…
2 actors
HashJoin · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = fx_rates_s… 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 · fx_rates_snapshot_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f…
2 actors
HashJoin · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Project · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f…
2 actors
HashAgg · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Union
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · fx_rates_snapshot_mv_next
2 actors
StreamScan · fx_rates_snapshot_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
HashAgg Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · intraday_fx_rates_5min_mv
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.
Materialize · insights.intraday_fx_rates_latest_mv Materialize insights.intraday_fx_ra… idle · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = fx_rates_s… SyncLogStore LeftOuter · intraday_fx… — · 2 actors HashJoin · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = fx_rates_s… HashJoin LeftOuter · intraday_fx… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · fx_rates_snapshot_mv_next StreamScan fx_rates_snapshot_mv_ne… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… SyncLogStore LeftOuter · intraday_fx… — · 2 actors HashJoin · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… HashJoin LeftOuter · intraday_fx… idle · 2 actors Merge Merge — · 2 actors Project · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… Project LeftOuter · intraday_fx… — · 2 actors HashAgg · LeftOuter · intraday_fx_rates_5min_mv.source_currency_code = intraday_f… HashAgg LeftOuter · intraday_fx… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Union Union idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · fx_rates_snapshot_mv_next Project fx_rates_snapshot_mv_ne… — · 2 actors StreamScan · fx_rates_snapshot_mv_next StreamScan fx_rates_snapshot_mv_ne… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors HashAgg HashAgg idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · intraday_fx_rates_5min_mv StreamScan intraday_fx_rates_5min_… 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 22187 (Actor 99812,99813)
StreamMaterialize { columns: [source_currency_code, target_currency_code, rate, value_timestamp], stream_key: [source_currency_code, target_currency_code], pk_columns: [source_currency_code, target_currency_code], pk_conflict: NoCheck } { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $expr1, $expr2 ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
└── StreamProject { exprs: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, Coalesce(first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), fx_rates_snapshot_mv_next.rate) as $expr1, Case(Not(IsNull(first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)))), max(intraday_fx_rates_5min_mv.value_timestamp), fx_rates_snapshot_mv_next.value_timestamp) as $expr2] }
    ├── output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $expr1, $expr2 ]
    ├── stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
    └── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.value_timestamp, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }

Fragment 22188 (Actor 99811,99810)
StreamSyncLogStore { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.value_timestamp, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
└── StreamHashJoin { type: LeftOuter, predicate: intraday_fx_rates_5min_mv.source_currency_code = fx_rates_snapshot_mv_next.source_currency_code AND intraday_fx_rates_5min_mv.target_currency_code = fx_rates_snapshot_mv_next.target_currency_code }
    ├── output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.value_timestamp, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
    ├── stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
    ├── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
    └── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.value_timestamp ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 22189 (Actor 99815,99814)
StreamSyncLogStore { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
└── StreamHashJoin { type: LeftOuter, predicate: intraday_fx_rates_5min_mv.source_currency_code = intraday_fx_rates_5min_mv.source_currency_code AND intraday_fx_rates_5min_mv.target_currency_code = intraday_fx_rates_5min_mv.target_currency_code }
    ├── output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
    ├── stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
    ├── StreamProject { exprs: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code] } { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
    │   └── StreamHashAgg { group_key: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code], aggs: [count] } { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, count ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
    │       └── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $src ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $src ] }
    └── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp) ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }

Fragment 22190 (Actor 99805,99804)
StreamUnion { all: true } { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $src ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, $src ] }
├── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, 0:Int32 ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
└── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code, 1:Int32 ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 22191 (Actor 99809,99808)
StreamProject { exprs: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, 0:Int32] } { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, 0:Int32 ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
└── MergeExecutor { output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp) ], stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }

Fragment 22192 (Actor 99806,99807)
StreamProject { exprs: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp)] }
├── output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp) ]
├── stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
└── StreamHashAgg [append_only] { group_key: [intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code], aggs: [first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), count] }
    ├── output: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, first_value(intraday_fx_rates_5min_mv.rate order_by(intraday_fx_rates_5min_mv.window_start DESC)) filter(IsNotNull(intraday_fx_rates_5min_mv.rate) AND IsNotNull(intraday_fx_rates_5min_mv.window_start)), max(intraday_fx_rates_5min_mv.value_timestamp), count ]
    ├── stream key: [ intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ]
    └── MergeExecutor { output: [ intraday_fx_rates_5min_mv.window_start, intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, intraday_fx_rates_5min_mv.rate, intraday_fx_rates_5min_mv.value_timestamp ], stream key: [ intraday_fx_rates_5min_mv.window_start, intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }

Fragment 22193 (Actor 99657,99658)
StreamTableScan { table: intraday_fx_rates_5min_mv, columns: [window_start, source_currency_code, target_currency_code, rate, value_timestamp] } { output: [ intraday_fx_rates_5min_mv.window_start, intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code, intraday_fx_rates_5min_mv.rate, intraday_fx_rates_5min_mv.value_timestamp ], stream key: [ intraday_fx_rates_5min_mv.window_start, intraday_fx_rates_5min_mv.source_currency_code, intraday_fx_rates_5min_mv.target_currency_code ] }
├── Upstream { output: [ window_start, source_currency_code, target_currency_code, rate, value_timestamp ], stream key: [] }
└── BatchPlanNode { output: [ window_start, source_currency_code, target_currency_code, rate, value_timestamp ], stream key: [] }

Fragment 22194 (Actor 99839,99840)
StreamProject { exprs: [fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code, 1:Int32] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code, 1:Int32 ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, target_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
    ├── Upstream { output: [ source_currency_code, target_currency_code ], stream key: [] }
    └── BatchPlanNode { output: [ source_currency_code, target_currency_code ], stream key: [] }

Fragment 22195 (Actor 99846,99845)
StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, target_currency_code, rate, value_timestamp] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.value_timestamp ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
├── Upstream { output: [ source_currency_code, target_currency_code, rate, value_timestamp ], stream key: [] }
└── BatchPlanNode { output: [ source_currency_code, target_currency_code, rate, value_timestamp ], stream key: [] }