RWM Console cluster: risingwave-ai-hub-int.ai-hub-rwm.svc.cluster.local

← cluster alpheya_agent objects transactions_mv explain
Overview Objects Graph History
materialized view · alpheya_agent.transactions_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
40 operators
Materialize · alpheya_agent.transactions_mv
0% idle 2 actors
Project · LeftOuter · transactions_dm.transaction_type_id = transaction_types_dm.…
2 actors
TemporalJoin · LeftOuter · transactions_dm.transaction_type_id = transaction_types_dm.…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · transaction_types_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
Project
2 actors
GroupTopN
0% idle 2 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · transactions_dm.account_id = account_to_portfolios_dm.accou…
2 actors
HashJoin · LeftOuter · transactions_dm.account_id = account_to_portfolios_dm.accou… 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 · account_to_portfolios_dm
2 actors
Filter · account_to_portfolios_dm
0% idle 2 actors
StreamScan · account_to_portfolios_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
Project · transactions_dm
2 actors
Filter · transactions_dm
0% idle 2 actors
StreamScan · transactions_dm
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 · alpheya_agent.transactions_mv Materialize alpheya_agent.transacti… idle · 2 actors Project · LeftOuter · transactions_dm.transaction_type_id = transaction_types_dm.… Project LeftOuter · transaction… — · 2 actors TemporalJoin · LeftOuter · transactions_dm.transaction_type_id = transaction_types_dm.… TemporalJoin LeftOuter · transaction… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · transaction_types_dm StreamScan transaction_types_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 Project Project — · 2 actors GroupTopN GroupTopN idle · 2 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · transactions_dm.account_id = account_to_portfolios_dm.accou… SyncLogStore LeftOuter · transaction… — · 2 actors HashJoin · LeftOuter · transactions_dm.account_id = account_to_portfolios_dm.accou… HashJoin LeftOuter · transaction… 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 · account_to_portfolios_dm Project account_to_portfolios_dm — · 2 actors Filter · account_to_portfolios_dm Filter account_to_portfolios_dm idle · 2 actors StreamScan · account_to_portfolios_dm StreamScan account_to_portfolios_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 Project · transactions_dm Project transactions_dm — · 2 actors Filter · transactions_dm Filter transactions_dm idle · 2 actors StreamScan · transactions_dm StreamScan transactions_dm 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 19395 (Actor 156990,156991)
StreamMaterialize { columns: [transaction_id, account_id, portfolio_id, asset_id, transaction_type, transaction_type_id, currency_code, quantity, unit_price, gross_value, net_value, valuation_date, settlement_date, order_id, external_reference, description], stream_key: [transaction_type_id, transaction_id], pk_columns: [transaction_type_id, transaction_id], pk_conflict: NoCheck }
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, account_to_portfolios_dm.portfolio_id, transactions_dm.asset_id, $expr1, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.order_id, transactions_dm.external_reference, transaction_types_dm.name_en ]
├── stream key: [ transactions_dm.transaction_type_id, transactions_dm.transaction_id ]
└── StreamProject { exprs: [transactions_dm.transaction_id, transactions_dm.account_id, account_to_portfolios_dm.portfolio_id, transactions_dm.asset_id, Coalesce(transaction_types_dm.type, 'OTHER':Varchar) as $expr1, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.order_id, transactions_dm.external_reference, transaction_types_dm.name_en] }
    ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, account_to_portfolios_dm.portfolio_id, transactions_dm.asset_id, $expr1, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.order_id, transactions_dm.external_reference, transaction_types_dm.name_en ]
    ├── stream key: [ transactions_dm.transaction_type_id, transactions_dm.transaction_id ]
    └── StreamTemporalJoin { type: LeftOuter, append_only: false, predicate: transactions_dm.transaction_type_id = transaction_types_dm.transaction_type_id, nested_loop: false }
        ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, account_to_portfolios_dm.portfolio_id, transactions_dm.asset_id, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.order_id, transactions_dm.external_reference, transaction_types_dm.type, transaction_types_dm.name_en, transaction_types_dm.transaction_type_id ]
        ├── stream key: [ transactions_dm.transaction_type_id, transactions_dm.transaction_id ]
        ├── MergeExecutor
        │   ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
        │   └── stream key: [ transactions_dm.transaction_type_id, transactions_dm.transaction_id ]
        └── MergeExecutor { output: [ transaction_types_dm.transaction_type_id, transaction_types_dm.type, transaction_types_dm.name_en ], stream key: [ transaction_types_dm.transaction_type_id ] }

Fragment 19396 (Actor 157397,157396)
StreamLocalityProvider { locality_columns: [transactions_dm.transaction_type_id] }
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ transactions_dm.transaction_type_id, transactions_dm.transaction_id ]
└── MergeExecutor
    ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    └── stream key: [ transactions_dm.transaction_id ]

Fragment 19397 (Actor 157415,157416)
StreamProject { exprs: [transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date] }
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ transactions_dm.transaction_id ]
└── StreamGroupTopN { order: [account_to_portfolios_dm.effective_start_date DESC NULLS LAST, account_to_portfolios_dm.portfolio_id DESC], limit: 1, offset: 0, group_key: [transactions_dm.transaction_id] }
    ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.account_id ]
    ├── stream key: [ transactions_dm.transaction_id ]
    └── StreamLocalityProvider { locality_columns: [transactions_dm.transaction_id] }
        ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.account_id ]
        ├── stream key: [ transactions_dm.transaction_id, transactions_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
        └── MergeExecutor
            ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.account_id ]
            └── stream key: [ transactions_dm.account_id, transactions_dm.transaction_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]

Fragment 19398 (Actor 157418,157417)
StreamSyncLogStore
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.account_id ]
├── stream key: [ transactions_dm.account_id, transactions_dm.transaction_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: LeftOuter, predicate: transactions_dm.account_id = account_to_portfolios_dm.account_id AND (account_to_portfolios_dm.effective_start_date <= transactions_dm.transaction_valuation_date) AND (IsNull(account_to_portfolios_dm.effective_end_date) OR (account_to_portfolios_dm.effective_end_date > transactions_dm.transaction_valuation_date)) }
    ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.account_id ]
    ├── stream key: [ transactions_dm.account_id, transactions_dm.transaction_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    ├── MergeExecutor { output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_id ] }
    └── MergeExecutor { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 19399 (Actor 157419,157420)
StreamLocalityProvider { locality_columns: [transactions_dm.account_id] }
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference ]
├── stream key: [ transactions_dm.account_id, transactions_dm.transaction_id ]
└── MergeExecutor { output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference ], stream key: [ transactions_dm.transaction_id ] }

Fragment 19400 (Actor 157425,157426)
StreamProject { exprs: [transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference] }
├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference ]
├── stream key: [ transactions_dm.transaction_id ]
└── StreamFilter { predicate: IsNull(transactions_dm.disabled_at) } { output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, transactions_dm.disabled_at ], stream key: [ transactions_dm.transaction_id ] }
    └── StreamTableScan { table: transactions_dm, columns: [transaction_id, account_id, asset_id, transaction_valuation_date, transaction_settlement_date, transaction_type_id, currency_code, gross_value, net_value, quantity, unit_price, order_id, external_reference, disabled_at] }
        ├── output: [ transactions_dm.transaction_id, transactions_dm.account_id, transactions_dm.asset_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_settlement_date, transactions_dm.transaction_type_id, transactions_dm.currency_code, transactions_dm.gross_value, transactions_dm.net_value, transactions_dm.quantity, transactions_dm.unit_price, transactions_dm.order_id, transactions_dm.external_reference, transactions_dm.disabled_at ]
        ├── stream key: [ transactions_dm.transaction_id ]
        ├── Upstream { output: [ transaction_id, account_id, asset_id, transaction_valuation_date, transaction_settlement_date, transaction_type_id, currency_code, gross_value, net_value, quantity, unit_price, order_id, external_reference, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ transaction_id, account_id, asset_id, transaction_valuation_date, transaction_settlement_date, transaction_type_id, currency_code, gross_value, net_value, quantity, unit_price, order_id, external_reference, disabled_at ], stream key: [] }

Fragment 19401 (Actor 157427,157428)
StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.account_id] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
└── MergeExecutor { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 19402 (Actor 157430,157429)
StreamProject { exprs: [account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
└── StreamFilter { predicate: IsNull(account_to_portfolios_dm.disabled_at) } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date, account_to_portfolios_dm.disabled_at ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
    └── StreamTableScan { table: account_to_portfolios_dm, columns: [account_id, portfolio_id, effective_start_date, effective_end_date, disabled_at] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_end_date, account_to_portfolios_dm.disabled_at ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
        ├── Upstream { output: [ account_id, portfolio_id, effective_start_date, effective_end_date, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ account_id, portfolio_id, effective_start_date, effective_end_date, disabled_at ], stream key: [] }

Fragment 19403 (Actor 156993,156992)
StreamTableScan { table: transaction_types_dm, columns: [transaction_type_id, type, name_en] } { output: [ transaction_types_dm.transaction_type_id, transaction_types_dm.type, transaction_types_dm.name_en ], stream key: [ transaction_types_dm.transaction_type_id ] }
├── Upstream { output: [ transaction_type_id, type, name_en ], stream key: [] }
└── BatchPlanNode { output: [ transaction_type_id, type, name_en ], stream key: [] }