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

← cluster insights objects user_account_membership_mv explain
Overview Objects Graph History
materialized view · insights.user_account_membership_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 lookupsAggregation state — unbounded unless keyed or temporally filtered
149 operators
Materialize · insights.user_account_membership_mv
0% idle 2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · user_to_portfolios_mv.user_id = users_dm.user_id
2 actors
HashJoin · Inner · user_to_portfolios_mv.user_id = users_dm.user_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
Project · users_dm
2 actors
Filter · users_dm
0% idle 2 actors
StreamScan · users_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
HashAgg Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Union
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · clients_portfolios_dm.portfolio_id = account_to_portfolios_…
2 actors
HashJoin · Inner · clients_portfolios_dm.portfolio_id = account_to_portfolios_… 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
SyncLogStore · Inner · open_accounts_mv.account_id = account_to_portfolios_dm.acco…
2 actors
HashJoin · Inner · open_accounts_mv.account_id = account_to_portfolios_dm.acco… 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
StreamScan · open_accounts_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
SyncLogStore · Inner · user_to_clients_mv.client_id = clients_portfolios_dm.client…
2 actors
HashJoin · Inner · user_to_clients_mv.client_id = clients_portfolios_dm.client… 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 · clients_portfolios_dm
2 actors
Filter · clients_portfolios_dm
0% idle 2 actors
StreamScan · clients_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
StreamScan · user_to_clients_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · accounts_to_clients_dm.account_id = open_accounts_mv.accoun…
2 actors
HashJoin · Inner · accounts_to_clients_dm.account_id = open_accounts_mv.accoun… 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
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 · Inner · user_to_clients_mv.client_id = accounts_to_clients_dm.clien…
2 actors
HashJoin · Inner · user_to_clients_mv.client_id = accounts_to_clients_dm.clien… 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 · accounts_to_clients_dm
2 actors
Filter · accounts_to_clients_dm
0% idle 2 actors
StreamScan · accounts_to_clients_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
StreamScan · user_to_clients_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · account_to_portfolios_dm.account_id = open_accounts_mv.acco…
2 actors
HashJoin · Inner · account_to_portfolios_dm.account_id = open_accounts_mv.acco… 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
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 · Inner · user_to_portfolios_mv.portfolio_id = account_to_portfolios_…
2 actors
HashJoin · Inner · user_to_portfolios_mv.portfolio_id = account_to_portfolios_… 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
StreamScan · user_to_portfolios_mv
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.user_account_membership_mv Materialize insights.user_account_m… idle · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · user_to_portfolios_mv.user_id = users_dm.user_id SyncLogStore Inner · user_to_portfol… — · 2 actors HashJoin · Inner · user_to_portfolios_mv.user_id = users_dm.user_id HashJoin Inner · user_to_portfol… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · users_dm Project users_dm — · 2 actors Filter · users_dm Filter users_dm idle · 2 actors StreamScan · users_dm StreamScan users_dm idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors HashAgg HashAgg idle · 2 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Union Union idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · clients_portfolios_dm.portfolio_id = account_to_portfolios_… SyncLogStore Inner · clients_portfol… — · 2 actors HashJoin · Inner · clients_portfolios_dm.portfolio_id = account_to_portfolios_… HashJoin Inner · clients_portfol… 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 SyncLogStore · Inner · open_accounts_mv.account_id = account_to_portfolios_dm.acco… SyncLogStore Inner · open_accounts_m… — · 2 actors HashJoin · Inner · open_accounts_mv.account_id = account_to_portfolios_dm.acco… HashJoin Inner · open_accounts_m… 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 StreamScan · open_accounts_mv StreamScan open_accounts_mv 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 · Inner · user_to_clients_mv.client_id = clients_portfolios_dm.client… SyncLogStore Inner · user_to_clients… — · 2 actors HashJoin · Inner · user_to_clients_mv.client_id = clients_portfolios_dm.client… HashJoin Inner · user_to_clients… 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 · clients_portfolios_dm Project clients_portfolios_dm — · 2 actors Filter · clients_portfolios_dm Filter clients_portfolios_dm idle · 2 actors StreamScan · clients_portfolios_dm StreamScan clients_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 StreamScan · user_to_clients_mv StreamScan user_to_clients_mv idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · accounts_to_clients_dm.account_id = open_accounts_mv.accoun… SyncLogStore Inner · accounts_to_cli… — · 2 actors HashJoin · Inner · accounts_to_clients_dm.account_id = open_accounts_mv.accoun… HashJoin Inner · accounts_to_cli… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · open_accounts_mv StreamScan open_accounts_mv 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 · Inner · user_to_clients_mv.client_id = accounts_to_clients_dm.clien… SyncLogStore Inner · user_to_clients… — · 2 actors HashJoin · Inner · user_to_clients_mv.client_id = accounts_to_clients_dm.clien… HashJoin Inner · user_to_clients… 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 · accounts_to_clients_dm Project accounts_to_clients_dm — · 2 actors Filter · accounts_to_clients_dm Filter accounts_to_clients_dm idle · 2 actors StreamScan · accounts_to_clients_dm 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 LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · user_to_clients_mv StreamScan user_to_clients_mv idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · account_to_portfolios_dm.account_id = open_accounts_mv.acco… SyncLogStore Inner · account_to_port… — · 2 actors HashJoin · Inner · account_to_portfolios_dm.account_id = open_accounts_mv.acco… HashJoin Inner · account_to_port… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · open_accounts_mv StreamScan open_accounts_mv 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 · Inner · user_to_portfolios_mv.portfolio_id = account_to_portfolios_… SyncLogStore Inner · user_to_portfol… — · 2 actors HashJoin · Inner · user_to_portfolios_mv.portfolio_id = account_to_portfolios_… HashJoin Inner · user_to_portfol… 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 StreamScan · user_to_portfolios_mv StreamScan user_to_portfolios_mv 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 12660 (Actor 157593,157592)
StreamMaterialize { columns: [user_id, account_id, type], stream_key: [user_id, account_id], pk_columns: [user_id, account_id], pk_conflict: NoCheck }
├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, 'all':Varchar ]
├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
└── StreamProject { exprs: [user_to_portfolios_mv.user_id, open_accounts_mv.account_id, 'all':Varchar] }
    ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, 'all':Varchar ]
    ├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
    └── MergeExecutor
        ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, users_dm.user_id ]
        └── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]

Fragment 12661 (Actor 157595,157594)
StreamSyncLogStore
├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, users_dm.user_id ]
├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
└── StreamHashJoin { type: Inner, predicate: user_to_portfolios_mv.user_id = users_dm.user_id }
    ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, users_dm.user_id ]
    ├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
    ├── MergeExecutor
    │   ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
    │   └── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
    └── MergeExecutor { output: [ users_dm.user_id ], stream key: [ users_dm.user_id ] }

Fragment 12662 (Actor 157596,157597)
StreamProject { exprs: [user_to_portfolios_mv.user_id, open_accounts_mv.account_id] }
├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
└── StreamHashAgg { group_key: [user_to_portfolios_mv.user_id, open_accounts_mv.account_id], aggs: [count] }
    ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, count ]
    ├── stream key: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id ]
    └── StreamLocalityProvider { locality_columns: [user_to_portfolios_mv.user_id, open_accounts_mv.account_id] }
        ├── output:
        │   ┌── user_to_portfolios_mv.user_id
        │   ├── open_accounts_mv.account_id
        │   ├── account_to_portfolios_dm.account_id
        │   ├── user_to_portfolios_mv.portfolio_id
        │   ├── user_to_portfolios_mv.user_id
        │   ├── null:Varchar
        │   ├── account_to_portfolios_dm.effective_start_date
        │   ├── null:Date
        │   └── $src
        ├── stream key:
        │   ┌── user_to_portfolios_mv.user_id
        │   ├── open_accounts_mv.account_id
        │   ├── account_to_portfolios_dm.account_id
        │   ├── user_to_portfolios_mv.portfolio_id
        │   ├── user_to_portfolios_mv.user_id
        │   ├── account_to_portfolios_dm.effective_start_date
        │   ├── null:Varchar
        │   ├── null:Date
        │   └── $src
        └── MergeExecutor
            ├── output:
            │   ┌── user_to_portfolios_mv.user_id
            │   ├── open_accounts_mv.account_id
            │   ├── account_to_portfolios_dm.account_id
            │   ├── user_to_portfolios_mv.portfolio_id
            │   ├── user_to_portfolios_mv.user_id
            │   ├── null:Varchar
            │   ├── account_to_portfolios_dm.effective_start_date
            │   ├── null:Date
            │   └── $src
            └── stream key:
                ┌── account_to_portfolios_dm.account_id
                ├── user_to_portfolios_mv.portfolio_id
                ├── user_to_portfolios_mv.user_id
                ├── account_to_portfolios_dm.effective_start_date
                ├── null:Varchar
                ├── null:Date
                └── $src

Fragment 12663 (Actor 157598,157599)
StreamUnion { all: true }
├── output:
│   ┌── user_to_portfolios_mv.user_id
│   ├── open_accounts_mv.account_id
│   ├── account_to_portfolios_dm.account_id
│   ├── user_to_portfolios_mv.portfolio_id
│   ├── user_to_portfolios_mv.user_id
│   ├── null:Varchar
│   ├── account_to_portfolios_dm.effective_start_date
│   ├── null:Date
│   └── $src
├── stream key:
│   ┌── account_to_portfolios_dm.account_id
│   ├── user_to_portfolios_mv.portfolio_id
│   ├── user_to_portfolios_mv.user_id
│   ├── account_to_portfolios_dm.effective_start_date
│   ├── null:Varchar
│   ├── null:Date
│   └── $src
├── MergeExecutor
│   ├── output:
│   │   ┌── user_to_portfolios_mv.user_id
│   │   ├── open_accounts_mv.account_id
│   │   ├── account_to_portfolios_dm.account_id
│   │   ├── user_to_portfolios_mv.portfolio_id
│   │   ├── user_to_portfolios_mv.user_id
│   │   ├── null:Varchar
│   │   ├── account_to_portfolios_dm.effective_start_date
│   │   ├── null:Date
│   │   └── 0:Int32
│   └── stream key:
│       ┌── account_to_portfolios_dm.account_id
│       ├── user_to_portfolios_mv.portfolio_id
│       ├── user_to_portfolios_mv.user_id
│       └── account_to_portfolios_dm.effective_start_date
├── MergeExecutor
│   ├── output:
│   │   ┌── user_to_clients_mv.user_id
│   │   ├── open_accounts_mv.account_id
│   │   ├── accounts_to_clients_dm.account_id
│   │   ├── user_to_clients_mv.client_id
│   │   ├── user_to_clients_mv.user_id
│   │   ├── null:Varchar
│   │   ├── accounts_to_clients_dm.effective_start_date
│   │   ├── null:Date
│   │   └── 1:Int32
│   └── stream key:
│       ┌── accounts_to_clients_dm.account_id
│       ├── user_to_clients_mv.client_id
│       ├── user_to_clients_mv.user_id
│       └── accounts_to_clients_dm.effective_start_date
└── MergeExecutor
    ├── output:
    │   ┌── user_to_clients_mv.user_id
    │   ├── open_accounts_mv.account_id
    │   ├── clients_portfolios_dm.portfolio_id
    │   ├── user_to_clients_mv.client_id
    │   ├── user_to_clients_mv.user_id
    │   ├── open_accounts_mv.account_id
    │   ├── clients_portfolios_dm.effective_start_date
    │   ├── account_to_portfolios_dm.effective_start_date
    │   └── 2:Int32
    └── stream key:
        ┌── clients_portfolios_dm.portfolio_id
        ├── user_to_clients_mv.client_id
        ├── user_to_clients_mv.user_id
        ├── clients_portfolios_dm.effective_start_date
        ├── open_accounts_mv.account_id
        └── account_to_portfolios_dm.effective_start_date

Fragment 12664 (Actor 157602,157603)
StreamProject { exprs: [user_to_portfolios_mv.user_id, open_accounts_mv.account_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, null:Varchar, account_to_portfolios_dm.effective_start_date, null:Date, 0:Int32] }
├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, null:Varchar, account_to_portfolios_dm.effective_start_date, null:Date, 0:Int32 ]
├── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    └── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12665 (Actor 157600,157601)
StreamSyncLogStore
├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: account_to_portfolios_dm.account_id = open_accounts_mv.account_id }
    ├── output: [ user_to_portfolios_mv.user_id, open_accounts_mv.account_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    ├── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]
    ├── MergeExecutor
    │   ├── output: [ user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    │   └── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]
    └── MergeExecutor { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }

Fragment 12666 (Actor 157605,157604)
StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.account_id] }
├── output: [ user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    └── stream key: [ user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12667 (Actor 157607,157606)
StreamSyncLogStore
├── output: [ user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: user_to_portfolios_mv.portfolio_id = account_to_portfolios_dm.portfolio_id }
    ├── output: [ user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, user_to_portfolios_mv.portfolio_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    ├── stream key: [ user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
    ├── MergeExecutor { output: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ], stream key: [ user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id ] }
    └── MergeExecutor
        ├── output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
        └── stream key: [ account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12668 (Actor 157609,157608)
StreamLocalityProvider { locality_columns: [user_to_portfolios_mv.portfolio_id] } { output: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ], stream key: [ user_to_portfolios_mv.portfolio_id, user_to_portfolios_mv.user_id ] }
└── MergeExecutor { output: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ], stream key: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ] }

Fragment 12669 (Actor 157649,157648)
StreamTableScan { table: user_to_portfolios_mv, columns: [user_id, portfolio_id] } { output: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ], stream key: [ user_to_portfolios_mv.user_id, user_to_portfolios_mv.portfolio_id ] }
├── Upstream { output: [ user_id, portfolio_id ], stream key: [] }
└── BatchPlanNode { output: [ user_id, portfolio_id ], stream key: [] }

Fragment 12670 (Actor 157610,157611)
StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.portfolio_id] }
├── output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_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 ]
    └── stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12671 (Actor 157651,157650)
StreamProject { exprs: [account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date] }
├── output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_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.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, 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.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, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ account_id, portfolio_id, effective_start_date, disabled_at ], stream key: [] }

Fragment 12672 (Actor 157653,157652)
StreamTableScan { table: open_accounts_mv, columns: [account_id] } { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }
├── Upstream { output: [ account_id ], stream key: [] }
└── BatchPlanNode { output: [ account_id ], stream key: [] }

Fragment 12673 (Actor 157613,157612)
StreamProject { exprs: [user_to_clients_mv.user_id, open_accounts_mv.account_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, null:Varchar, accounts_to_clients_dm.effective_start_date, null:Date, 1:Int32] }
├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, null:Varchar, accounts_to_clients_dm.effective_start_date, null:Date, 1:Int32 ]
├── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.effective_start_date ]
    └── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]

Fragment 12674 (Actor 157614,157615)
StreamSyncLogStore
├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.effective_start_date ]
├── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: accounts_to_clients_dm.account_id = open_accounts_mv.account_id }
    ├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.effective_start_date ]
    ├── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]
    ├── MergeExecutor
    │   ├── output: [ user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
    │   └── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]
    └── MergeExecutor { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }

Fragment 12675 (Actor 157617,157616)
StreamLocalityProvider { locality_columns: [accounts_to_clients_dm.account_id] }
├── output: [ user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
├── stream key: [ accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
    └── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, accounts_to_clients_dm.effective_start_date ]

Fragment 12676 (Actor 157618,157619)
StreamSyncLogStore
├── output: [ user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
├── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, accounts_to_clients_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: user_to_clients_mv.client_id = accounts_to_clients_dm.client_id }
    ├── output: [ user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, user_to_clients_mv.client_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
    ├── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, accounts_to_clients_dm.account_id, accounts_to_clients_dm.effective_start_date ]
    ├── MergeExecutor { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id ] }
    └── MergeExecutor
        ├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
        └── stream key: [ accounts_to_clients_dm.client_id, accounts_to_clients_dm.account_id, accounts_to_clients_dm.effective_start_date ]

Fragment 12677 (Actor 157620,157621)
StreamLocalityProvider { locality_columns: [user_to_clients_mv.client_id] } { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id ] }
└── MergeExecutor { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ] }

Fragment 12678 (Actor 157654,157655)
StreamTableScan { table: user_to_clients_mv, columns: [user_id, client_id] } { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ] }
├── Upstream { output: [ user_id, client_id ], stream key: [] }
└── BatchPlanNode { output: [ user_id, client_id ], stream key: [] }

Fragment 12679 (Actor 157623,157622)
StreamLocalityProvider { locality_columns: [accounts_to_clients_dm.client_id] }
├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
├── stream key: [ accounts_to_clients_dm.client_id, accounts_to_clients_dm.account_id, accounts_to_clients_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
    └── stream key: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]

Fragment 12680 (Actor 157656,157657)
StreamProject { exprs: [accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date] }
├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
├── stream key: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
└── StreamFilter { predicate: IsNull(accounts_to_clients_dm.disabled_at) }
    ├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date, accounts_to_clients_dm.disabled_at ]
    ├── stream key: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
    └── StreamTableScan { table: accounts_to_clients_dm, columns: [account_id, client_id, effective_start_date, disabled_at] }
        ├── output: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date, accounts_to_clients_dm.disabled_at ]
        ├── stream key: [ accounts_to_clients_dm.account_id, accounts_to_clients_dm.client_id, accounts_to_clients_dm.effective_start_date ]
        ├── Upstream { output: [ account_id, client_id, effective_start_date, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ account_id, client_id, effective_start_date, disabled_at ], stream key: [] }

Fragment 12681 (Actor 157659,157658)
StreamTableScan { table: open_accounts_mv, columns: [account_id] } { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }
├── Upstream { output: [ account_id ], stream key: [] }
└── BatchPlanNode { output: [ account_id ], stream key: [] }

Fragment 12682 (Actor 157627,157626)
StreamProject { exprs: [user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_start_date, 2:Int32] }
├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.effective_start_date, account_to_portfolios_dm.effective_start_date, 2:Int32 ]
├── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.effective_start_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    └── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12683 (Actor 157625,157624)
StreamSyncLogStore
├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.effective_start_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: clients_portfolios_dm.portfolio_id = account_to_portfolios_dm.portfolio_id }
    ├── output: [ user_to_clients_mv.user_id, open_accounts_mv.account_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.effective_start_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    ├── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]
    ├── MergeExecutor
    │   ├── output: [ user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.client_id, clients_portfolios_dm.effective_start_date ]
    │   └── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date ]
    └── MergeExecutor
        ├── output: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
        └── stream key: [ account_to_portfolios_dm.portfolio_id, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12684 (Actor 157629,157628)
StreamLocalityProvider { locality_columns: [clients_portfolios_dm.portfolio_id] }
├── output: [ user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.client_id, clients_portfolios_dm.effective_start_date ]
├── stream key: [ clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.client_id, clients_portfolios_dm.effective_start_date ]
    └── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]

Fragment 12685 (Actor 157630,157631)
StreamSyncLogStore
├── output: [ user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.client_id, clients_portfolios_dm.effective_start_date ]
├── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: user_to_clients_mv.client_id = clients_portfolios_dm.client_id }
    ├── output: [ user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, user_to_clients_mv.client_id, clients_portfolios_dm.client_id, clients_portfolios_dm.effective_start_date ]
    ├── stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
    ├── MergeExecutor { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id ] }
    └── MergeExecutor { output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ], stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ] }

Fragment 12686 (Actor 157632,157633)
StreamLocalityProvider { locality_columns: [user_to_clients_mv.client_id] } { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.client_id, user_to_clients_mv.user_id ] }
└── MergeExecutor { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ] }

Fragment 12687 (Actor 157660,157661)
StreamTableScan { table: user_to_clients_mv, columns: [user_id, client_id] } { output: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ], stream key: [ user_to_clients_mv.user_id, user_to_clients_mv.client_id ] }
├── Upstream { output: [ user_id, client_id ], stream key: [] }
└── BatchPlanNode { output: [ user_id, client_id ], stream key: [] }

Fragment 12688 (Actor 157634,157635)
StreamLocalityProvider { locality_columns: [clients_portfolios_dm.client_id] }
├── output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
├── stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
└── MergeExecutor { output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ], stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ] }

Fragment 12689 (Actor 157663,157662)
StreamProject { exprs: [clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date] }
├── output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
├── stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
└── StreamFilter { predicate: IsNull(clients_portfolios_dm.disabled_at) }
    ├── output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date, clients_portfolios_dm.disabled_at ]
    ├── stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
    └── StreamTableScan { table: clients_portfolios_dm, columns: [client_id, portfolio_id, effective_start_date, disabled_at] }
        ├── output: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date, clients_portfolios_dm.disabled_at ]
        ├── stream key: [ clients_portfolios_dm.client_id, clients_portfolios_dm.portfolio_id, clients_portfolios_dm.effective_start_date ]
        ├── Upstream { output: [ client_id, portfolio_id, effective_start_date, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ client_id, portfolio_id, effective_start_date, disabled_at ], stream key: [] }

Fragment 12690 (Actor 157636,157637)
StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.portfolio_id] }
├── output: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ account_to_portfolios_dm.portfolio_id, open_accounts_mv.account_id, account_to_portfolios_dm.effective_start_date ]
└── MergeExecutor
    ├── output: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
    └── stream key: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]

Fragment 12691 (Actor 157639,157638)
StreamSyncLogStore
├── output: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
├── stream key: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
└── StreamHashJoin { type: Inner, predicate: open_accounts_mv.account_id = account_to_portfolios_dm.account_id }
    ├── output: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ]
    ├── stream key: [ open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ]
    ├── MergeExecutor { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }
    └── MergeExecutor { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 12692 (Actor 157665,157664)
StreamTableScan { table: open_accounts_mv, columns: [account_id] } { output: [ open_accounts_mv.account_id ], stream key: [ open_accounts_mv.account_id ] }
├── Upstream { output: [ account_id ], stream key: [] }
└── BatchPlanNode { output: [ account_id ], stream key: [] }

Fragment 12693 (Actor 157643,157642)
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 ]
├── 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 ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 12694 (Actor 157644,157645)
StreamProject { exprs: [account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date] }
├── output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_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.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, 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.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, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ account_id, portfolio_id, effective_start_date, disabled_at ], stream key: [] }

Fragment 12695 (Actor 157647,157646)
StreamProject { exprs: [users_dm.user_id] } { output: [ users_dm.user_id ], stream key: [ users_dm.user_id ] }
└── StreamFilter { predicate: IsNull(users_dm.disabled_at) } { output: [ users_dm.user_id, users_dm.disabled_at ], stream key: [ users_dm.user_id ] }
    └── StreamTableScan { table: users_dm, columns: [user_id, disabled_at] } { output: [ users_dm.user_id, users_dm.disabled_at ], stream key: [ users_dm.user_id ] }
        ├── Upstream { output: [ user_id, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ user_id, disabled_at ], stream key: [] }