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

← cluster insights objects investment_account_purchasing_power_mv explain
Overview Objects Graph History
materialized view · insights.investment_account_purchasing_power_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
36 operators
Materialize · insights.investment_account_purchasing_power_mv
0% idle 2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · accounts_dm.base_currency_code = fx_rates_snapshot_mv_next.…
2 actors
HashJoin · LeftOuter · accounts_dm.base_currency_code = fx_rates_snapshot_mv_next.… 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
LocalityProvider
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
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · investment_accounts_ft.account_id = accounts_dm.account_id
2 actors
HashJoin · LeftOuter · investment_accounts_ft.account_id = accounts_dm.account_id 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 · accounts_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Filter · investment_accounts_ft
0% idle 2 actors
StreamScan · investment_accounts_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.investment_account_purchasing_power_mv Materialize insights.investment_acc… idle · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · accounts_dm.base_currency_code = fx_rates_snapshot_mv_next.… SyncLogStore LeftOuter · accounts_dm… — · 2 actors HashJoin · LeftOuter · accounts_dm.base_currency_code = fx_rates_snapshot_mv_next.… HashJoin LeftOuter · accounts_dm… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider 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 LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · investment_accounts_ft.account_id = accounts_dm.account_id SyncLogStore LeftOuter · investment_… — · 2 actors HashJoin · LeftOuter · investment_accounts_ft.account_id = accounts_dm.account_id HashJoin LeftOuter · investment_… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · accounts_dm StreamScan accounts_dm idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · investment_accounts_ft Filter investment_accounts_ft idle · 2 actors StreamScan · investment_accounts_ft StreamScan investment_accounts_ft 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 62604 (Actor 743745,743746)
StreamMaterialize { columns: [account_id, fact_date, purchasing_power, purchasing_power_system_currency, disabled_at, accounts_dm.base_currency_code(hidden), fx_rates_snapshot_mv_next.target_currency_code(hidden)], stream_key: [accounts_dm.base_currency_code, account_id, fact_date, fx_rates_snapshot_mv_next.target_currency_code], pk_columns: [accounts_dm.base_currency_code, account_id, fact_date, fx_rates_snapshot_mv_next.target_currency_code], pk_conflict: NoCheck }
├── output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, $expr1, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
├── stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date, fx_rates_snapshot_mv_next.target_currency_code ]
└── StreamProject { exprs: [investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, (investment_accounts_ft.purchasing_power * Coalesce(fx_rates_snapshot_mv_next.rate, Case((accounts_dm.base_currency_code = 'SAR':Varchar), 1:Int32, null:Int32)::Decimal)) as $expr1, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.target_currency_code] }
    ├── output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, $expr1, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
    ├── stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date, fx_rates_snapshot_mv_next.target_currency_code ]
    └── MergeExecutor
        ├── output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
        └── stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date, fx_rates_snapshot_mv_next.target_currency_code ]

Fragment 62605 (Actor 743748,743747)
StreamSyncLogStore
├── output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
├── stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date, fx_rates_snapshot_mv_next.target_currency_code ]
└── StreamHashJoin { type: LeftOuter, predicate: accounts_dm.base_currency_code = fx_rates_snapshot_mv_next.source_currency_code }
    ├── output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
    ├── stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date, fx_rates_snapshot_mv_next.target_currency_code ]
    ├── MergeExecutor { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, accounts_dm.account_id ], stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
    └── 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 62606 (Actor 743822,743821)
StreamLocalityProvider { locality_columns: [accounts_dm.base_currency_code] } { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, accounts_dm.account_id ], stream key: [ accounts_dm.base_currency_code, investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
└── MergeExecutor { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, accounts_dm.account_id ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }

Fragment 62607 (Actor 743823,743824)
StreamSyncLogStore { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, accounts_dm.account_id ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
└── StreamHashJoin { type: LeftOuter, predicate: investment_accounts_ft.account_id = accounts_dm.account_id } { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at, accounts_dm.base_currency_code, accounts_dm.account_id ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
    ├── MergeExecutor { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
    └── MergeExecutor { output: [ accounts_dm.account_id, accounts_dm.base_currency_code ], stream key: [ accounts_dm.account_id ] }

Fragment 62608 (Actor 743826,743825)
StreamLocalityProvider { locality_columns: [investment_accounts_ft.account_id] } { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
└── MergeExecutor { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }

Fragment 62609 (Actor 743676,743675)
StreamFilter { predicate: IsNull(investment_accounts_ft.disabled_at) } { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
└── StreamTableScan { table: investment_accounts_ft, columns: [account_id, fact_date, purchasing_power, disabled_at] } { output: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date, investment_accounts_ft.purchasing_power, investment_accounts_ft.disabled_at ], stream key: [ investment_accounts_ft.account_id, investment_accounts_ft.fact_date ] }
    ├── Upstream { output: [ account_id, fact_date, purchasing_power, disabled_at ], stream key: [] }
    └── BatchPlanNode { output: [ account_id, fact_date, purchasing_power, disabled_at ], stream key: [] }

Fragment 62610 (Actor 743678,743677)
StreamTableScan { table: accounts_dm, columns: [account_id, base_currency_code] } { output: [ accounts_dm.account_id, accounts_dm.base_currency_code ], stream key: [ accounts_dm.account_id ] }
├── Upstream { output: [ account_id, base_currency_code ], stream key: [] }
└── BatchPlanNode { output: [ account_id, base_currency_code ], stream key: [] }

Fragment 62611 (Actor 743894,743893)
StreamLocalityProvider { locality_columns: [fx_rates_snapshot_mv_next.source_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 ] }
└── 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 62612 (Actor 743680,743679)
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: [] }