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

← cluster insights objects client_account_direct_mv explain
Overview Objects Graph History
materialized view · insights.client_account_direct_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 · insights.client_account_direct_mv
0% idle 2 actors
Union
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
2 actors
Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · accounts_to_clients_dm_next.account_id = open_accounts_mv_n…
2 actors
HashJoin · Inner · accounts_to_clients_dm_next.account_id = open_accounts_mv_n… 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 · open_accounts_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
Filter · accounts_to_clients_dm_next
0% idle 2 actors
StreamScan · accounts_to_clients_dm_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
2 actors
Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
0% idle 2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
2 actors
Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull…
0% idle 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.client_account_direct_mv Materialize insights.client_account… idle · 2 actors Union Union idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Project IsNull(accounts_to_clie… — · 2 actors Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Filter IsNull(accounts_to_clie… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore SyncLogStore — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore SyncLogStore — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · accounts_to_clients_dm_next.account_id = open_accounts_mv_n… SyncLogStore Inner · accounts_to_cli… — · 2 actors HashJoin · Inner · accounts_to_clients_dm_next.account_id = open_accounts_mv_n… HashJoin Inner · accounts_to_cli… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · open_accounts_mv_next StreamScan open_accounts_mv_next 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 · accounts_to_clients_dm_next Filter accounts_to_clients_dm_… idle · 2 actors StreamScan · accounts_to_clients_dm_next StreamScan accounts_to_clients_dm_… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Project IsNull(accounts_to_clie… — · 2 actors Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Filter IsNull(accounts_to_clie… idle · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Project IsNull(accounts_to_clie… — · 2 actors Filter · IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull… Filter IsNull(accounts_to_clie… idle · 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 37494 (Actor 743127,743128)
StreamMaterialize { columns: [client_id, account_id, effective_start_date, effective_end_date, type, $src(hidden)], stream_key: [account_id, client_id, effective_start_date, $src], pk_columns: [account_id, client_id, effective_start_date, $src], pk_conflict: NoCheck }
├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'all':Varchar, $src ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date, $src ]
└── StreamUnion { all: true }
    ├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'all':Varchar, $src ]
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date, $src ]
    ├── MergeExecutor
    │   ├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'all':Varchar, 0:Int32 ]
    │   └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    ├── MergeExecutor
    │   ├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'restricted':Varchar, 1:Int32 ]
    │   └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    └── MergeExecutor
        ├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'un_restricted':Varchar, 2:Int32 ]
        └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37495 (Actor 743411,743412)
StreamProject { exprs: [accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'all':Varchar, 0:Int32] }
├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'all':Varchar, 0:Int32 ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── StreamFilter { predicate: IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull(accounts_to_clients_dm_next.effective_end_date) OR (accounts_to_clients_dm_next.effective_end_date > accounts_to_clients_dm_next.effective_start_date)) }
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    └── MergeExecutor
        ├── output:
        │   ┌── accounts_to_clients_dm_next.account_id
        │   ├── accounts_to_clients_dm_next.client_id
        │   ├── accounts_to_clients_dm_next.disabled_at
        │   ├── accounts_to_clients_dm_next.effective_start_date
        │   ├── accounts_to_clients_dm_next.effective_end_date
        │   ├── open_accounts_mv_next.is_restricted
        │   └── open_accounts_mv_next.account_id
        └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37496 (Actor 743414,743413)
StreamSyncLogStore
├── output:
│   ┌── accounts_to_clients_dm_next.account_id
│   ├── accounts_to_clients_dm_next.client_id
│   ├── accounts_to_clients_dm_next.disabled_at
│   ├── accounts_to_clients_dm_next.effective_start_date
│   ├── accounts_to_clients_dm_next.effective_end_date
│   ├── open_accounts_mv_next.is_restricted
│   └── open_accounts_mv_next.account_id
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── MergeExecutor
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37497 (Actor 743407,743408)
StreamSyncLogStore
├── output:
│   ┌── accounts_to_clients_dm_next.account_id
│   ├── accounts_to_clients_dm_next.client_id
│   ├── accounts_to_clients_dm_next.disabled_at
│   ├── accounts_to_clients_dm_next.effective_start_date
│   ├── accounts_to_clients_dm_next.effective_end_date
│   ├── open_accounts_mv_next.is_restricted
│   └── open_accounts_mv_next.account_id
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── MergeExecutor
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37498 (Actor 743416,743415)
StreamSyncLogStore
├── output:
│   ┌── accounts_to_clients_dm_next.account_id
│   ├── accounts_to_clients_dm_next.client_id
│   ├── accounts_to_clients_dm_next.disabled_at
│   ├── accounts_to_clients_dm_next.effective_start_date
│   ├── accounts_to_clients_dm_next.effective_end_date
│   ├── open_accounts_mv_next.is_restricted
│   └── open_accounts_mv_next.account_id
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: accounts_to_clients_dm_next.account_id = open_accounts_mv_next.account_id }
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    ├── MergeExecutor
    │   ├── output: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.disabled_at, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date ]
    │   └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    └── MergeExecutor { output: [ open_accounts_mv_next.account_id, open_accounts_mv_next.is_restricted ], stream key: [ open_accounts_mv_next.account_id ] }

Fragment 37499 (Actor 743418,743417)
StreamLocalityProvider { locality_columns: [accounts_to_clients_dm_next.account_id] }
├── output: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.disabled_at, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── MergeExecutor
    ├── output: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.disabled_at, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date ]
    └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37500 (Actor 743370,743369)
StreamFilter { predicate: IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull(accounts_to_clients_dm_next.effective_end_date) OR (accounts_to_clients_dm_next.effective_end_date > accounts_to_clients_dm_next.effective_start_date)) }
├── output: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.disabled_at, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── StreamTableScan { table: accounts_to_clients_dm_next, columns: [account_id, client_id, disabled_at, effective_start_date, effective_end_date] }
    ├── output: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.disabled_at, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date ]
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    ├── Upstream { output: [ account_id, client_id, disabled_at, effective_start_date, effective_end_date ], stream key: [] }
    └── BatchPlanNode { output: [ account_id, client_id, disabled_at, effective_start_date, effective_end_date ], stream key: [] }

Fragment 37501 (Actor 743373,743374)
StreamTableScan { table: open_accounts_mv_next, columns: [account_id, is_restricted] } { output: [ open_accounts_mv_next.account_id, open_accounts_mv_next.is_restricted ], stream key: [ open_accounts_mv_next.account_id ] }
├── Upstream { output: [ account_id, is_restricted ], stream key: [] }
└── BatchPlanNode { output: [ account_id, is_restricted ], stream key: [] }

Fragment 37502 (Actor 743409,743410)
StreamProject { exprs: [accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'restricted':Varchar, 1:Int32] }
├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'restricted':Varchar, 1:Int32 ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── StreamFilter { predicate: IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull(accounts_to_clients_dm_next.effective_end_date) OR (accounts_to_clients_dm_next.effective_end_date > accounts_to_clients_dm_next.effective_start_date)) AND (open_accounts_mv_next.is_restricted = true:Boolean) }
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    └── MergeExecutor
        ├── output:
        │   ┌── accounts_to_clients_dm_next.account_id
        │   ├── accounts_to_clients_dm_next.client_id
        │   ├── accounts_to_clients_dm_next.disabled_at
        │   ├── accounts_to_clients_dm_next.effective_start_date
        │   ├── accounts_to_clients_dm_next.effective_end_date
        │   ├── open_accounts_mv_next.is_restricted
        │   └── open_accounts_mv_next.account_id
        └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]

Fragment 37503 (Actor 743405,743406)
StreamProject { exprs: [accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'un_restricted':Varchar, 2:Int32] }
├── output: [ accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.effective_start_date, accounts_to_clients_dm_next.effective_end_date, 'un_restricted':Varchar, 2:Int32 ]
├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
└── StreamFilter { predicate: IsNull(accounts_to_clients_dm_next.disabled_at) AND (IsNull(accounts_to_clients_dm_next.effective_end_date) OR (accounts_to_clients_dm_next.effective_end_date > accounts_to_clients_dm_next.effective_start_date)) AND Not(IsTrue(open_accounts_mv_next.is_restricted)) }
    ├── output:
    │   ┌── accounts_to_clients_dm_next.account_id
    │   ├── accounts_to_clients_dm_next.client_id
    │   ├── accounts_to_clients_dm_next.disabled_at
    │   ├── accounts_to_clients_dm_next.effective_start_date
    │   ├── accounts_to_clients_dm_next.effective_end_date
    │   ├── open_accounts_mv_next.is_restricted
    │   └── open_accounts_mv_next.account_id
    ├── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]
    └── MergeExecutor
        ├── output:
        │   ┌── accounts_to_clients_dm_next.account_id
        │   ├── accounts_to_clients_dm_next.client_id
        │   ├── accounts_to_clients_dm_next.disabled_at
        │   ├── accounts_to_clients_dm_next.effective_start_date
        │   ├── accounts_to_clients_dm_next.effective_end_date
        │   ├── open_accounts_mv_next.is_restricted
        │   └── open_accounts_mv_next.account_id
        └── stream key: [ accounts_to_clients_dm_next.account_id, accounts_to_clients_dm_next.client_id, accounts_to_clients_dm_next.effective_start_date ]