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

← cluster opportunity objects portfolio_unrealized_loss_delta_mv explain
Overview Objects Graph History
materialized view · opportunity.portfolio_unrealized_loss_delta_mv profiled over 5s
seconds (1–30)
Stateful hash join (4 state tables) — consider a temporal join for dimension lookupsDynamic filter — verify it pairs with a temporal condition to clean state
32 operators
Materialize · opportunity.portfolio_unrealized_loss_delta_mv
0% idle 2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · pnl_summary_mv_next.account_group_id = portfolio_to_account…
2 actors
HashJoin · Inner · pnl_summary_mv_next.account_group_id = portfolio_to_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
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · portfolio_to_account_groups_mv
2 actors
Filter · portfolio_to_account_groups_mv
0% idle 2 actors
StreamScan · portfolio_to_account_groups_mv
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
Project · pnl_summary_mv_next
2 actors
DynamicFilter · pnl_summary_mv_next Dynamic filter — verify it pairs with a temporal condition to clean state
0% idle 2 actors
Merge
2 actors
Exchange
0% 2/s 0 actors
Project
1 actor
Now
0% 2/s 1 actor
Project · pnl_summary_mv_next
2 actors
Filter · pnl_summary_mv_next
2% idle 2 actors
StreamScan · pnl_summary_mv_next
2% 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 · opportunity.portfolio_unrealized_loss_delta_mv Materialize opportunity.portfolio_u… idle · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · pnl_summary_mv_next.account_group_id = portfolio_to_account… SyncLogStore Inner · pnl_summary_mv_… — · 2 actors HashJoin · Inner · pnl_summary_mv_next.account_group_id = portfolio_to_account… HashJoin Inner · pnl_summary_mv_… 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 Project · portfolio_to_account_groups_mv Project portfolio_to_account_gr… — · 2 actors Filter · portfolio_to_account_groups_mv Filter portfolio_to_account_gr… idle · 2 actors StreamScan · portfolio_to_account_groups_mv StreamScan portfolio_to_account_gr… 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 Project · pnl_summary_mv_next Project pnl_summary_mv_next — · 2 actors DynamicFilter · pnl_summary_mv_next DynamicFilter pnl_summary_mv_next idle · 2 actors Merge Merge — · 2 actors Exchange Exchange 2/s · 0 actors Project Project — · 1 actor Now Now 2/s · 1 actor Project · pnl_summary_mv_next Project pnl_summary_mv_next — · 2 actors Filter · pnl_summary_mv_next Filter pnl_summary_mv_next idle · 2 actors StreamScan · pnl_summary_mv_next StreamScan pnl_summary_mv_next 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 62052 (Actor 740959,740960)
StreamMaterialize { columns: [portfolio_id, dim_balance_date, currency_code, loss_ratio, pnl_summary_mv_next.account_group_id(hidden), pnl_summary_mv_next.position_type(hidden), pnl_summary_mv_next.position_summary_mv_next.source_entity_type(hidden), pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date(hidden), portfolio_to_account_groups_mv.$src(hidden)], stream_key: [pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_id, portfolio_to_account_groups_mv.$src], pk_columns: [pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_id, portfolio_to_account_groups_mv.$src], pk_conflict: NoCheck }
├── output: [ portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, $expr3, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.$src ]
├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ]
└── StreamProject { exprs: [portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, Abs((pnl_summary_mv_next.unrealized_gain_loss / pnl_summary_mv_next.total_average_cost)) as $expr3, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.$src] }
    ├── output: [ portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, $expr3, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.$src ]
    ├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ]
    └── MergeExecutor { output: [ pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }

Fragment 62053 (Actor 740962,740961)
StreamSyncLogStore { output: [ pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }
└── StreamHashJoin { type: Inner, predicate: pnl_summary_mv_next.account_group_id = portfolio_to_account_groups_mv.account_group_id }
    ├── output: [ pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, portfolio_to_account_groups_mv.portfolio_id, pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ]
    ├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ]
    ├── MergeExecutor { output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ] }
    └── MergeExecutor { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }

Fragment 62054 (Actor 740963,740964)
StreamLocalityProvider { locality_columns: [pnl_summary_mv_next.account_group_id] } { output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ] }
└── MergeExecutor { output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ] }

Fragment 62055 (Actor 740968,740969)
StreamProject { exprs: [pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date] }
├── output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
└── StreamDynamicFilter { predicate: ($expr1 >= $expr2), output_watermarks: [[$expr1]], output: [pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, $expr1, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date], cleaned_by_watermark: true }
    ├── output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, $expr1, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
    ├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
    ├── StreamProject { exprs: [pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, AtTimeZone(pnl_summary_mv_next.dim_balance_date::Timestamp, 'UTC':Varchar) as $expr1, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date] }
    │   ├── output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, $expr1, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
    │   ├── stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ]
    │   └── StreamFilter { predicate: (pnl_summary_mv_next.position_type = 'POSITION':Varchar) AND (pnl_summary_mv_next.unrealized_gain_loss < 0:Decimal) AND (pnl_summary_mv_next.total_average_cost <> 0:Decimal) } { output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ] }
    │       └── StreamTableScan { table: pnl_summary_mv_next, columns: [account_group_id, dim_balance_date, currency_code, total_average_cost, unrealized_gain_loss, position_type, position_summary_mv_next.source_entity_type, flow_summary_mv_next.dim_transaction_date] } { output: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.total_average_cost, pnl_summary_mv_next.unrealized_gain_loss, pnl_summary_mv_next.position_type, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ], stream key: [ pnl_summary_mv_next.account_group_id, pnl_summary_mv_next.position_type, pnl_summary_mv_next.currency_code, pnl_summary_mv_next.position_summary_mv_next.source_entity_type, pnl_summary_mv_next.dim_balance_date, pnl_summary_mv_next.flow_summary_mv_next.dim_transaction_date ] }
    │           ├── Upstream { output: [ account_group_id, dim_balance_date, currency_code, total_average_cost, unrealized_gain_loss, position_type, position_summary_mv_next.source_entity_type, flow_summary_mv_next.dim_transaction_date ], stream key: [] }
    │           └── BatchPlanNode { output: [ account_group_id, dim_balance_date, currency_code, total_average_cost, unrealized_gain_loss, position_type, position_summary_mv_next.source_entity_type, flow_summary_mv_next.dim_transaction_date ], stream key: [] }
    └── MergeExecutor { output: [ $expr2 ], stream key: [] }

Fragment 62056 (Actor 740965)
StreamProject { exprs: [SubtractWithTimeZone(now, '30 days':Interval, 'UTC':Varchar) as $expr2], output_watermarks: [[$expr2]] } { output: [ $expr2 ], stream key: [] }
└── StreamNow { output: [ now ], stream key: [] }

Fragment 62057 (Actor 740966,740967)
StreamLocalityProvider { locality_columns: [portfolio_to_account_groups_mv.account_group_id] } { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }
└── MergeExecutor { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }

Fragment 62058 (Actor 740970,740971)
StreamProject { exprs: [portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src] } { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src ], stream key: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }
└── StreamFilter { predicate: (portfolio_to_account_groups_mv.type = 'all':Varchar) } { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src, portfolio_to_account_groups_mv.type ], stream key: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }
    └── StreamTableScan { table: portfolio_to_account_groups_mv, columns: [portfolio_id, account_group_id, $src, type] } { output: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.account_group_id, portfolio_to_account_groups_mv.$src, portfolio_to_account_groups_mv.type ], stream key: [ portfolio_to_account_groups_mv.portfolio_id, portfolio_to_account_groups_mv.$src ] }
        ├── Upstream { output: [ portfolio_id, account_group_id, $src, type ], stream key: [] }
        └── BatchPlanNode { output: [ portfolio_id, account_group_id, $src, type ], stream key: [] }