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

← cluster adib_rm objects settlement_orders_mv explain
Overview Objects Graph History
materialized view · adib_rm.settlement_orders_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
33 operators
Materialize · adib_rm.settlement_orders_mv
0% idle 2 actors
Project
2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · orders.id = order_routes.order_id
2 actors
HashJoin · LeftOuter · orders.id = order_routes.order_id Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Project · LeftOuter · orders.id = order_routes.order_id
2 actors
GroupTopN · LeftOuter · orders.id = order_routes.order_id
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · order_routes
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · orders.id = order_settlements.order_id
2 actors
HashJoin · LeftOuter · orders.id = order_settlements.order_id Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Project · LeftOuter · orders.id = order_settlements.order_id
2 actors
GroupTopN · LeftOuter · orders.id = order_settlements.order_id
1% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Filter · order_settlements
0% idle 2 actors
StreamScan · order_settlements
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · orders
2 actors
GroupTopN · orders
0% idle 2 actors
StreamScan · orders
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 · adib_rm.settlement_orders_mv Materialize adib_rm.settlement_orde… idle · 2 actors Project Project — · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · orders.id = order_routes.order_id SyncLogStore LeftOuter · orders.id =… — · 2 actors HashJoin · LeftOuter · orders.id = order_routes.order_id HashJoin LeftOuter · orders.id =… idle · 2 actors Project · LeftOuter · orders.id = order_routes.order_id Project LeftOuter · orders.id =… — · 2 actors GroupTopN · LeftOuter · orders.id = order_routes.order_id GroupTopN LeftOuter · orders.id =… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · order_routes StreamScan order_routes idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · orders.id = order_settlements.order_id SyncLogStore LeftOuter · orders.id =… — · 2 actors HashJoin · LeftOuter · orders.id = order_settlements.order_id HashJoin LeftOuter · orders.id =… idle · 2 actors Project · LeftOuter · orders.id = order_settlements.order_id Project LeftOuter · orders.id =… — · 2 actors GroupTopN · LeftOuter · orders.id = order_settlements.order_id GroupTopN LeftOuter · orders.id =… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · order_settlements Filter order_settlements idle · 2 actors StreamScan · order_settlements StreamScan order_settlements idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · orders Project orders — · 2 actors GroupTopN · orders GroupTopN orders idle · 2 actors StreamScan · orders StreamScan orders 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 25078 (Actor 120510,120509)
StreamMaterialize { columns: [order_id, client_order_id, external_order_id, security_account_id, asset_id, order_side, settlement_state, created_at, expected_settlement_date, settled_at, failure_reason, filled_quantity, est_net_amount, est_net_currency, settled_amount], stream_key: [order_id], pk_columns: [order_id], pk_conflict: NoCheck }
├── output: [ orders.id, orders.client_order_id, order_routes.external_order_id, orders.security_account_id, orders.asset_id, orders.side, $expr2, orders.created_at, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.failure_reason, orders.filled_quantity, $expr3, $expr4, $expr5 ]
├── stream key: [ orders.id ]
└── StreamProject { exprs: [orders.id, orders.client_order_id, order_routes.external_order_id, orders.security_account_id, orders.asset_id, orders.side, Coalesce(order_settlements.state, 'SETTLEMENT_STATE_UNSPECIFIED':Varchar) as $expr2, orders.created_at, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.failure_reason, orders.filled_quantity, JsonbAccessStr(JsonbAccess($expr1, 'amount':Varchar), 'value':Varchar)::Decimal as $expr3, JsonbAccessStr(JsonbAccess($expr1, 'currencyCode':Varchar), 'value':Varchar) as $expr4, JsonbAccessStr(JsonbAccess(order_settlements.amount, 'amount':Varchar), 'value':Varchar)::Decimal as $expr5] }
    ├── output: [ orders.id, orders.client_order_id, order_routes.external_order_id, orders.security_account_id, orders.asset_id, orders.side, $expr2, orders.created_at, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.failure_reason, orders.filled_quantity, $expr3, $expr4, $expr5 ]
    ├── stream key: [ orders.id ]
    └── StreamProject { exprs: [orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_routes.external_order_id, JsonbAccess(orders.cost_estimate, 'estimatedNet':Varchar) as $expr1] }
        ├── output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_routes.external_order_id, $expr1 ]
        ├── stream key: [ orders.id ]
        └── MergeExecutor { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_routes.external_order_id, order_routes.order_id ], stream key: [ orders.id ] }

Fragment 25079 (Actor 120507,120508)
StreamSyncLogStore { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_routes.external_order_id, order_routes.order_id ], stream key: [ orders.id ] }
└── StreamHashJoin { type: LeftOuter, predicate: orders.id = order_routes.order_id } { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_routes.external_order_id, order_routes.order_id ], stream key: [ orders.id ] }
    ├── MergeExecutor { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.order_id ], stream key: [ orders.id ] }
    └── StreamProject { exprs: [order_routes.order_id, order_routes.external_order_id] } { output: [ order_routes.order_id, order_routes.external_order_id ], stream key: [ order_routes.order_id ] }
        └── StreamGroupTopN { order: [order_routes.created_at DESC, order_routes.id DESC], limit: 1, offset: 0, group_key: [order_routes.order_id] } { output: [ order_routes.id, order_routes.order_id, order_routes.external_order_id, order_routes.created_at ], stream key: [ order_routes.order_id ] }
            └── MergeExecutor { output: [ order_routes.id, order_routes.order_id, order_routes.external_order_id, order_routes.created_at ], stream key: [ order_routes.id ] }

Fragment 25080 (Actor 120506,120505)
StreamSyncLogStore { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.order_id ], stream key: [ orders.id ] }
└── StreamHashJoin { type: LeftOuter, predicate: orders.id = order_settlements.order_id } { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.order_id ], stream key: [ orders.id ] }
    ├── MergeExecutor { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at ], stream key: [ orders.id ] }
    └── StreamProject { exprs: [order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason] } { output: [ order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason ], stream key: [ order_settlements.order_id ] }
        └── StreamGroupTopN { order: [order_settlements.settled_at DESC NULLS LAST, order_settlements.created_at DESC, order_settlements.id DESC], limit: 1, offset: 0, group_key: [order_settlements.order_id] } { output: [ order_settlements.id, order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.created_at ], stream key: [ order_settlements.order_id ] }
            └── MergeExecutor { output: [ order_settlements.id, order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.created_at ], stream key: [ order_settlements.id ] }

Fragment 25081 (Actor 120503,120504)
StreamProject { exprs: [orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at] } { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at ], stream key: [ orders.id ] }
└── StreamGroupTopN { order: [orders.created_at DESC], limit: 1, offset: 0, group_key: [orders.id] } { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at ], stream key: [ orders.id ] }
    └── StreamTableScan { table: orders, columns: [id, client_order_id, security_account_id, asset_id, side, cost_estimate, filled_quantity, created_at] } { output: [ orders.id, orders.client_order_id, orders.security_account_id, orders.asset_id, orders.side, orders.cost_estimate, orders.filled_quantity, orders.created_at ], stream key: [ orders.id, orders.created_at ] }
        ├── Upstream { output: [ id, client_order_id, security_account_id, asset_id, side, cost_estimate, filled_quantity, created_at ], stream key: [] }
        └── BatchPlanNode { output: [ id, client_order_id, security_account_id, asset_id, side, cost_estimate, filled_quantity, created_at ], stream key: [] }

Fragment 25082 (Actor 120511,120512)
StreamFilter { predicate: Not(IsNull(order_settlements.order_id)) } { output: [ order_settlements.id, order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.created_at ], stream key: [ order_settlements.id ] }
└── StreamTableScan { table: order_settlements, columns: [id, order_id, state, expected_settlement_date, settled_at, amount, failure_reason, created_at] } { output: [ order_settlements.id, order_settlements.order_id, order_settlements.state, order_settlements.expected_settlement_date, order_settlements.settled_at, order_settlements.amount, order_settlements.failure_reason, order_settlements.created_at ], stream key: [ order_settlements.id ] }
    ├── Upstream { output: [ id, order_id, state, expected_settlement_date, settled_at, amount, failure_reason, created_at ], stream key: [] }
    └── BatchPlanNode { output: [ id, order_id, state, expected_settlement_date, settled_at, amount, failure_reason, created_at ], stream key: [] }

Fragment 25083 (Actor 120514,120513)
StreamTableScan { table: order_routes, columns: [id, order_id, external_order_id, created_at] } { output: [ order_routes.id, order_routes.order_id, order_routes.external_order_id, order_routes.created_at ], stream key: [ order_routes.id ] }
├── Upstream { output: [ id, order_id, external_order_id, created_at ], stream key: [] }
└── BatchPlanNode { output: [ id, order_id, external_order_id, created_at ], stream key: [] }