RWM Console cluster: risingwave.platform.svc.cluster.local

← cluster insights objects private_asset_valuations_mv explain
Overview Objects Graph History
materialized view · insights.private_asset_valuations_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 lookups
28 operators
Materialize · insights.private_asset_valuations_mv
0% idle 2 actors
Project · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(…
2 actors
Filter · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(…
0% idle 2 actors
HashJoin · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… 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
Filter · fx_rates_snapshot_mv_next
0% idle 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 · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as…
2 actors
Filter · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as…
0% idle 2 actors
HashJoin · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… 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
Filter · fx_rates_snapshot_mv_next
0% idle 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 · private_asset_valuations_ft
2 actors
Filter · private_asset_valuations_ft
0% idle 2 actors
StreamScan · private_asset_valuations_ft
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.private_asset_valuations_mv Materialize insights.private_asset_… idle · 2 actors Project · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… Project LeftOuter · ((Not(IsNul… — · 2 actors Filter · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… Filter LeftOuter · ((Not(IsNul… idle · 2 actors HashJoin · LeftOuter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… HashJoin LeftOuter · ((Not(IsNul… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · fx_rates_snapshot_mv_next Filter fx_rates_snapshot_mv_ne… idle · 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 · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… Project LeftOuter · (Not(IsNull… — · 2 actors Filter · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… Filter LeftOuter · (Not(IsNull… idle · 2 actors HashJoin · LeftOuter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… HashJoin LeftOuter · (Not(IsNull… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · fx_rates_snapshot_mv_next Filter fx_rates_snapshot_mv_ne… idle · 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 · private_asset_valuations_ft Project private_asset_valuation… — · 2 actors Filter · private_asset_valuations_ft Filter private_asset_valuation… idle · 2 actors StreamScan · private_asset_valuations_ft StreamScan private_asset_valuation… 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 11632 (Actor 33212,33211)
StreamMaterialize { columns: [asset_id, fact_date, market_value_currency, value_system_currency, cost_system_currency, private_asset_valuations_ft.id(hidden), fx_rates_snapshot_mv_next.target_currency_code(hidden), fx_rates_snapshot_mv_next.target_currency_code#1(hidden), $expr1(hidden)], stream_key: [private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, market_value_currency, fx_rates_snapshot_mv_next.target_currency_code#1, $expr1], pk_columns: [private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, market_value_currency, fx_rates_snapshot_mv_next.target_currency_code#1, $expr1], pk_conflict: NoCheck }
├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, $expr2, $expr3, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ]
├── stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ]
└── StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, (private_asset_valuations_ft.market_value * Coalesce(fx_rates_snapshot_mv_next.rate, Case((private_asset_valuations_ft.market_value_currency = 'SAR':Varchar), 1:Int32, null:Int32)::Decimal)) as $expr2, Case((Coalesce(private_asset_valuations_ft.average_cost, 0:Decimal) = 0:Decimal), 0:Decimal, (private_asset_valuations_ft.average_cost * Coalesce(fx_rates_snapshot_mv_next.rate, Case((Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) = 'SAR':Varchar), 1:Int32, null:Int32)::Decimal))) as $expr3, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code, $expr1] }
    ├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, $expr2, $expr3, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ]
    ├── stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ]
    └── StreamFilter { predicate: ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) = 'SAR':Varchar)) OR (Coalesce(private_asset_valuations_ft.average_cost, 0:Decimal) = 0:Decimal)) }
        ├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, $expr1, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
        ├── stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ]
        └── StreamHashJoin { type: LeftOuter, predicate: $expr1 = fx_rates_snapshot_mv_next.source_currency_code } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, $expr1, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency, fx_rates_snapshot_mv_next.target_currency_code, $expr1 ] }
            ├── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency ] }
            └── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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 ] }

Fragment 11633 (Actor 33215,33216)
StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) as $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code] }
├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ]
├── stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency ]
└── StreamFilter { predicate: (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_asset_valuations_ft.market_value_currency = 'SAR':Varchar)) } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency ] }
    └── StreamHashJoin { type: LeftOuter, predicate: private_asset_valuations_ft.market_value_currency = fx_rates_snapshot_mv_next.source_currency_code } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, private_asset_valuations_ft.market_value_currency ] }
        ├── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.id ] }
        └── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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 ] }

Fragment 11634 (Actor 33217,33218)
StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.id ] }
└── StreamFilter { predicate: IsNull(private_asset_valuations_ft.disabled_at) } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id, private_asset_valuations_ft.disabled_at ], stream key: [ private_asset_valuations_ft.id ] }
    └── StreamTableScan { table: private_asset_valuations_ft, columns: [asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id, private_asset_valuations_ft.disabled_at ], stream key: [ private_asset_valuations_ft.id ] }
        ├── Upstream { output: [ asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at ], stream key: [] }

Fragment 11635 (Actor 33229,33230)
StreamFilter { predicate: (fx_rates_snapshot_mv_next.target_currency_code = 'SAR':Varchar) } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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 ] }
└── StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, rate, target_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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, rate, target_currency_code ], stream key: [] }
    └── BatchPlanNode { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }

Fragment 11636 (Actor 33232,33231)
StreamFilter { predicate: (fx_rates_snapshot_mv_next.target_currency_code = 'SAR':Varchar) } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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 ] }
└── StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, rate, target_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, 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, rate, target_currency_code ], stream key: [] }
    └── BatchPlanNode { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }