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

← cluster alinma_bff objects notes_mv explain
Overview Objects Graph History
materialized view · alinma_bff.notes_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
78 operators
Materialize · alinma_bff.notes_mv
0% idle 2 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · notes_dm.resource_account_id = account_owners_mv.account_id
2 actors
HashJoin · LeftOuter · notes_dm.resource_account_id = account_owners_mv.account_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
StreamScan · account_owners_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
TemporalJoin · LeftOuter · notes_dm.resource_account_id = accounts_dm.account_id, nest…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · accounts_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
SyncLogStore · LeftOuter · notes_dm.resource_portfolio_id = portfolio_owners_mv_next.p…
2 actors
HashJoin · LeftOuter · notes_dm.resource_portfolio_id = portfolio_owners_mv_next.p… 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 · portfolio_owners_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
TemporalJoin · LeftOuter · notes_dm.resource_portfolio_id = portfolios_dm.portfolio_id…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · 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
TemporalJoin · LeftOuter · notes_dm.resource_client_id = clients_dm.id, nested_loop: f…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · 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
SyncLogStore · LeftOuter · notes_dm.id = note_tags_dm.note_id
2 actors
HashJoin · LeftOuter · notes_dm.id = note_tags_dm.note_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
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
StreamScan · note_tags_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · notes_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 · alinma_bff.notes_mv Materialize alinma_bff.notes_mv idle · 2 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · notes_dm.resource_account_id = account_owners_mv.account_id SyncLogStore LeftOuter · notes_dm.re… — · 2 actors HashJoin · LeftOuter · notes_dm.resource_account_id = account_owners_mv.account_id HashJoin LeftOuter · notes_dm.re… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · account_owners_mv StreamScan account_owners_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 TemporalJoin · LeftOuter · notes_dm.resource_account_id = accounts_dm.account_id, nest… TemporalJoin LeftOuter · notes_dm.re… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · accounts_dm StreamScan accounts_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 SyncLogStore · LeftOuter · notes_dm.resource_portfolio_id = portfolio_owners_mv_next.p… SyncLogStore LeftOuter · notes_dm.re… — · 2 actors HashJoin · LeftOuter · notes_dm.resource_portfolio_id = portfolio_owners_mv_next.p… HashJoin LeftOuter · notes_dm.re… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · portfolio_owners_mv_next StreamScan portfolio_owners_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 TemporalJoin · LeftOuter · notes_dm.resource_portfolio_id = portfolios_dm.portfolio_id… TemporalJoin LeftOuter · notes_dm.re… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · portfolios_dm StreamScan 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 TemporalJoin · LeftOuter · notes_dm.resource_client_id = clients_dm.id, nested_loop: f… TemporalJoin LeftOuter · notes_dm.re… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · clients_dm StreamScan 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 SyncLogStore · LeftOuter · notes_dm.id = note_tags_dm.note_id SyncLogStore LeftOuter · notes_dm.id… — · 2 actors HashJoin · LeftOuter · notes_dm.id = note_tags_dm.note_id HashJoin LeftOuter · notes_dm.id… idle · 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 StreamScan · note_tags_dm StreamScan note_tags_dm idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · notes_dm StreamScan notes_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 63290 (Actor 745794,745795)
StreamMaterialize { columns: [id, content_text, content_format, created_at, updated_at, is_archived, archived_at, client_id, portfolio_id, account_id, draft_account_id, party_id, entity_type, entity_id, tag_ids, created_by_id, updated_by_id, client_display_name, client_local_display_name, client_preferred_name, client_customer_identification_file, portfolio_number, portfolio_owners, account_name, account_number, account_owners], stream_key: [account_id, portfolio_id, client_id, id], pk_columns: [account_id, portfolio_id, client_id, id], pk_conflict: NoCheck } { output: [ notes_dm.id, $expr1, $expr2, notes_dm.created_at, notes_dm.updated_at, $expr3, notes_dm.archived_at, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, $expr4, $expr5, $expr6, notes_dm.created_by, notes_dm.updated_by, clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, $expr7, accounts_dm.name, accounts_dm.number, $expr8 ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── StreamProject { exprs: [notes_dm.id, JsonbAccessStr(notes_dm.content, 'text':Varchar) as $expr1, JsonbAccessStr(notes_dm.content, 'format':Varchar) as $expr2, notes_dm.created_at, notes_dm.updated_at, Not(IsNull(notes_dm.archived_at)) as $expr3, notes_dm.archived_at, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, Case(Not(IsNull(notes_dm.resource_client_id)), 'CLIENT':Varchar, Not(IsNull(notes_dm.resource_portfolio_id)), 'PORTFOLIO':Varchar, Not(IsNull(notes_dm.resource_account_id)), 'ACCOUNT':Varchar, Not(IsNull(notes_dm.resource_draft_account_id)), 'DRAFT_ACCOUNT':Varchar, Not(IsNull(notes_dm.resource_party_id)), 'PARTY':Varchar, null:Varchar) as $expr4, Coalesce(notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id) as $expr5, Coalesce(array_agg(note_tags_dm.tag_id), ARRAY[]:List(Varchar)) as $expr6, notes_dm.created_by, notes_dm.updated_by, clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, Coalesce(portfolio_owners_mv_next.owners, '[]':Jsonb) as $expr7, accounts_dm.name, accounts_dm.number, Coalesce(account_owners_mv.owners, '[]':Jsonb) as $expr8] }
    ├── output: [ notes_dm.id, $expr1, $expr2, notes_dm.created_at, notes_dm.updated_at, $expr3, notes_dm.archived_at, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, $expr4, $expr5, $expr6, notes_dm.created_by, notes_dm.updated_by, clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, $expr7, accounts_dm.name, accounts_dm.number, $expr8 ]
    ├── stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ]
    └── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, account_owners_mv.owners, account_owners_mv.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }

Fragment 63291 (Actor 745792,745793)
StreamSyncLogStore { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, account_owners_mv.owners, account_owners_mv.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── StreamHashJoin { type: LeftOuter, predicate: notes_dm.resource_account_id = account_owners_mv.account_id } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, account_owners_mv.owners, account_owners_mv.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
    ├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, accounts_dm.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
    └── MergeExecutor { output: [ account_owners_mv.account_id, account_owners_mv.owners ], stream key: [ account_owners_mv.account_id ] }

Fragment 63292 (Actor 742353,742352)
StreamLocalityProvider { locality_columns: [notes_dm.resource_account_id] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, accounts_dm.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, accounts_dm.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }

Fragment 63293 (Actor 742351,742350)
StreamTemporalJoin { type: LeftOuter, append_only: false, predicate: notes_dm.resource_account_id = accounts_dm.account_id, nested_loop: false } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, accounts_dm.name, accounts_dm.number, accounts_dm.account_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, portfolio_owners_mv_next.portfolio_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ accounts_dm.account_id, accounts_dm.name, accounts_dm.number ], stream key: [ accounts_dm.account_id ] }

Fragment 63294 (Actor 745853,745852)
StreamLocalityProvider { locality_columns: [notes_dm.resource_account_id] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, portfolio_owners_mv_next.portfolio_id ], stream key: [ notes_dm.resource_account_id, notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, portfolio_owners_mv_next.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }

Fragment 63295 (Actor 745855,745854)
StreamSyncLogStore { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, portfolio_owners_mv_next.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── StreamHashJoin { type: LeftOuter, predicate: notes_dm.resource_portfolio_id = portfolio_owners_mv_next.portfolio_id } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolio_owners_mv_next.owners, portfolio_owners_mv_next.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
    ├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolios_dm.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
    └── MergeExecutor { output: [ portfolio_owners_mv_next.portfolio_id, portfolio_owners_mv_next.owners ], stream key: [ portfolio_owners_mv_next.portfolio_id ] }

Fragment 63296 (Actor 741969,741970)
StreamLocalityProvider { locality_columns: [notes_dm.resource_portfolio_id] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolios_dm.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolios_dm.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }

Fragment 63297 (Actor 741968,741967)
StreamTemporalJoin { type: LeftOuter, append_only: false, predicate: notes_dm.resource_portfolio_id = portfolios_dm.portfolio_id, nested_loop: false } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, portfolios_dm.number, portfolios_dm.portfolio_id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, clients_dm.id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ portfolios_dm.portfolio_id, portfolios_dm.number ], stream key: [ portfolios_dm.portfolio_id ] }

Fragment 63298 (Actor 745856,745857)
StreamLocalityProvider { locality_columns: [notes_dm.resource_portfolio_id] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, clients_dm.id ], stream key: [ notes_dm.resource_portfolio_id, notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, clients_dm.id ], stream key: [ notes_dm.resource_client_id, notes_dm.id ] }

Fragment 63299 (Actor 742068,742067)
StreamTemporalJoin { type: LeftOuter, append_only: false, predicate: notes_dm.resource_client_id = clients_dm.id, nested_loop: false } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file, clients_dm.id ], stream key: [ notes_dm.resource_client_id, notes_dm.id ] }
├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), note_tags_dm.note_id ], stream key: [ notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ clients_dm.id, clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file ], stream key: [ clients_dm.id ] }

Fragment 63300 (Actor 745858,745859)
StreamLocalityProvider { locality_columns: [notes_dm.resource_client_id] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), note_tags_dm.note_id ], stream key: [ notes_dm.resource_client_id, notes_dm.id ] }
└── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), note_tags_dm.note_id ], stream key: [ notes_dm.id ] }

Fragment 63301 (Actor 745860,745861)
StreamSyncLogStore { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), note_tags_dm.note_id ], stream key: [ notes_dm.id ] }
└── StreamHashJoin { type: LeftOuter, predicate: notes_dm.id = note_tags_dm.note_id } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at, array_agg(note_tags_dm.tag_id), note_tags_dm.note_id ], stream key: [ notes_dm.id ] }
    ├── MergeExecutor { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at ], stream key: [ notes_dm.id ] }
    └── MergeExecutor { output: [ note_tags_dm.note_id, array_agg(note_tags_dm.tag_id) ], stream key: [ note_tags_dm.note_id ] }

Fragment 63302 (Actor 745862,745863)
StreamTableScan { table: notes_dm, columns: [id, resource_client_id, resource_portfolio_id, resource_account_id, resource_draft_account_id, resource_party_id, content, created_by, updated_by, archived_at, created_at, updated_at] } { output: [ notes_dm.id, notes_dm.resource_client_id, notes_dm.resource_portfolio_id, notes_dm.resource_account_id, notes_dm.resource_draft_account_id, notes_dm.resource_party_id, notes_dm.content, notes_dm.created_by, notes_dm.updated_by, notes_dm.archived_at, notes_dm.created_at, notes_dm.updated_at ], stream key: [ notes_dm.id ] }
├── Upstream { output: [ id, resource_client_id, resource_portfolio_id, resource_account_id, resource_draft_account_id, resource_party_id, content, created_by, updated_by, archived_at, created_at, updated_at ], stream key: [] }
└── BatchPlanNode { output: [ id, resource_client_id, resource_portfolio_id, resource_account_id, resource_draft_account_id, resource_party_id, content, created_by, updated_by, archived_at, created_at, updated_at ], stream key: [] }

Fragment 63303 (Actor 745864,745865)
StreamProject { exprs: [note_tags_dm.note_id, array_agg(note_tags_dm.tag_id)] } { output: [ note_tags_dm.note_id, array_agg(note_tags_dm.tag_id) ], stream key: [ note_tags_dm.note_id ] }
└── StreamHashAgg { group_key: [note_tags_dm.note_id], aggs: [array_agg(note_tags_dm.tag_id), count] } { output: [ note_tags_dm.note_id, array_agg(note_tags_dm.tag_id), count ], stream key: [ note_tags_dm.note_id ] }
    └── StreamLocalityProvider { locality_columns: [note_tags_dm.note_id] } { output: [ note_tags_dm.note_id, note_tags_dm.tag_id ], stream key: [ note_tags_dm.note_id, note_tags_dm.tag_id ] }
        └── MergeExecutor { output: [ note_tags_dm.note_id, note_tags_dm.tag_id ], stream key: [ note_tags_dm.note_id, note_tags_dm.tag_id ] }

Fragment 63304 (Actor 745878,745879)
StreamTableScan { table: note_tags_dm, columns: [note_id, tag_id] } { output: [ note_tags_dm.note_id, note_tags_dm.tag_id ], stream key: [ note_tags_dm.note_id, note_tags_dm.tag_id ] }
├── Upstream { output: [ note_id, tag_id ], stream key: [] }
└── BatchPlanNode { output: [ note_id, tag_id ], stream key: [] }

Fragment 63305 (Actor 742065,742066)
StreamTableScan { table: clients_dm, columns: [id, display_name, local_display_name, preferred_name, customer_identification_file] } { output: [ clients_dm.id, clients_dm.display_name, clients_dm.local_display_name, clients_dm.preferred_name, clients_dm.customer_identification_file ], stream key: [ clients_dm.id ] }
├── Upstream { output: [ id, display_name, local_display_name, preferred_name, customer_identification_file ], stream key: [] }
└── BatchPlanNode { output: [ id, display_name, local_display_name, preferred_name, customer_identification_file ], stream key: [] }

Fragment 63306 (Actor 741971,741972)
StreamTableScan { table: portfolios_dm, columns: [portfolio_id, number] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.number ], stream key: [ portfolios_dm.portfolio_id ] }
├── Upstream { output: [ portfolio_id, number ], stream key: [] }
└── BatchPlanNode { output: [ portfolio_id, number ], stream key: [] }

Fragment 63307 (Actor 745880,745881)
StreamTableScan { table: portfolio_owners_mv_next, columns: [portfolio_id, owners] } { output: [ portfolio_owners_mv_next.portfolio_id, portfolio_owners_mv_next.owners ], stream key: [ portfolio_owners_mv_next.portfolio_id ] }
├── Upstream { output: [ portfolio_id, owners ], stream key: [] }
└── BatchPlanNode { output: [ portfolio_id, owners ], stream key: [] }

Fragment 63308 (Actor 742355,742354)
StreamTableScan { table: accounts_dm, columns: [account_id, name, number] } { output: [ accounts_dm.account_id, accounts_dm.name, accounts_dm.number ], stream key: [ accounts_dm.account_id ] }
├── Upstream { output: [ account_id, name, number ], stream key: [] }
└── BatchPlanNode { output: [ account_id, name, number ], stream key: [] }

Fragment 63309 (Actor 745885,745884)
StreamTableScan { table: account_owners_mv, columns: [account_id, owners] } { output: [ account_owners_mv.account_id, account_owners_mv.owners ], stream key: [ account_owners_mv.account_id ] }
├── Upstream { output: [ account_id, owners ], stream key: [] }
└── BatchPlanNode { output: [ account_id, owners ], stream key: [] }