RWM Console cluster: risingwave.platform.svc.cluster.local

← cluster insights objects account_groups_mv explain
Overview Objects Graph History
materialized view · insights.account_groups_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
174 operators
Materialize · insights.account_groups_mv
0% idle 2 actors
Union
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Not(IsNull(min(lifecycle_profiles.base_currency_code)))
2 actors
Filter · Not(IsNull(min(lifecycle_profiles.base_currency_code)))
0% idle 2 actors
Project · Not(IsNull(min(lifecycle_profiles.base_currency_code)))
2 actors
HashAgg · Not(IsNull(min(lifecycle_profiles.base_currency_code))) Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
HashJoin · LeftOuter · party_account_direct_mv_next.customer_relationship_id = lif… 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 · lifecycle_profiles
2 actors
Filter · lifecycle_profiles
0% idle 2 actors
StreamScan · lifecycle_profiles
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
HashJoin · Inner · party_account_direct_mv_next.account_id = open_accounts_mv.… 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
Union
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · party_account_via_portfolio_mv_next
2 actors
StreamScan · party_account_via_portfolio_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · party_account_direct_mv_next
2 actors
StreamScan · party_account_direct_mv_next
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
Merge
2 actors
Exchange
0% idle 0 actors
HashJoin · Inner · user_account_membership_mv.account_id = open_accounts_mv.ac… 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
HashJoin · Inner · user_account_membership_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
StreamScan · users_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · user_account_membership_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_…
2 actors
HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… 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
Filter · portfolio_account_group_types_mv
0% idle 2 actors
StreamScan · portfolio_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · portfolios_dm
2 actors
Filter · portfolios_dm
0% idle 2 actors
StreamScan · portfolios_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_…
2 actors
HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… 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
Filter · portfolio_account_group_types_mv
0% idle 2 actors
StreamScan · portfolio_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · portfolios_dm
2 actors
Filter · portfolios_dm
0% idle 2 actors
StreamScan · portfolios_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_…
2 actors
HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… 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
Filter · portfolio_account_group_types_mv
0% idle 2 actors
StreamScan · portfolio_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · portfolios_dm
2 actors
Filter · portfolios_dm
0% idle 2 actors
StreamScan · portfolios_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · clients_dm.id = client_account_group_types_mv.client_id
2 actors
HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_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
Filter · client_account_group_types_mv
0% idle 2 actors
StreamScan · client_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · clients_dm
2 actors
Filter · clients_dm
0% idle 2 actors
StreamScan · clients_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · clients_dm.id = client_account_group_types_mv.client_id
2 actors
HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_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
Filter · client_account_group_types_mv
0% idle 2 actors
StreamScan · client_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · clients_dm
2 actors
Filter · clients_dm
0% idle 2 actors
StreamScan · clients_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · Inner · clients_dm.id = client_account_group_types_mv.client_id
2 actors
HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_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
Filter · client_account_group_types_mv
0% idle 2 actors
StreamScan · client_account_group_types_mv
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · clients_dm
2 actors
Filter · clients_dm
0% idle 2 actors
StreamScan · clients_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · open_accounts_mv
2 actors
StreamScan · open_accounts_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.account_groups_mv Materialize insights.account_groups… idle · 2 actors Union Union idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · Not(IsNull(min(lifecycle_profiles.base_currency_code))) Project Not(IsNull(min(lifecycl… — · 2 actors Filter · Not(IsNull(min(lifecycle_profiles.base_currency_code))) Filter Not(IsNull(min(lifecycl… idle · 2 actors Project · Not(IsNull(min(lifecycle_profiles.base_currency_code))) Project Not(IsNull(min(lifecycl… — · 2 actors HashAgg · Not(IsNull(min(lifecycle_profiles.base_currency_code))) HashAgg Not(IsNull(min(lifecycl… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors HashJoin · LeftOuter · party_account_direct_mv_next.customer_relationship_id = lif… HashJoin LeftOuter · party_accou… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · lifecycle_profiles Project lifecycle_profiles — · 2 actors Filter · lifecycle_profiles Filter lifecycle_profiles idle · 2 actors StreamScan · lifecycle_profiles StreamScan lifecycle_profiles idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors HashJoin · Inner · party_account_direct_mv_next.account_id = open_accounts_mv.… HashJoin Inner · party_account_d… 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 Union Union idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · party_account_via_portfolio_mv_next Project party_account_via_portf… — · 2 actors StreamScan · party_account_via_portfolio_mv_next StreamScan party_account_via_portf… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · party_account_direct_mv_next Project party_account_direct_mv… — · 2 actors StreamScan · party_account_direct_mv_next StreamScan party_account_direct_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 HashAgg HashAgg idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors HashJoin · Inner · user_account_membership_mv.account_id = open_accounts_mv.ac… HashJoin Inner · user_account_me… 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 HashJoin · Inner · user_account_membership_mv.user_id = users_dm.user_id HashJoin Inner · user_account_me… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 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 StreamScan · user_account_membership_mv StreamScan user_account_membership… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… Project Inner · portfolios_dm.p… — · 2 actors HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… HashJoin Inner · portfolios_dm.p… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · portfolio_account_group_types_mv Filter portfolio_account_group… idle · 2 actors StreamScan · portfolio_account_group_types_mv StreamScan portfolio_account_group… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · portfolios_dm Project portfolios_dm — · 2 actors Filter · portfolios_dm Filter portfolios_dm idle · 2 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 Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… Project Inner · portfolios_dm.p… — · 2 actors HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… HashJoin Inner · portfolios_dm.p… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · portfolio_account_group_types_mv Filter portfolio_account_group… idle · 2 actors StreamScan · portfolio_account_group_types_mv StreamScan portfolio_account_group… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · portfolios_dm Project portfolios_dm — · 2 actors Filter · portfolios_dm Filter portfolios_dm idle · 2 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 Project · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… Project Inner · portfolios_dm.p… — · 2 actors HashJoin · Inner · portfolios_dm.portfolio_id = portfolio_account_group_types_… HashJoin Inner · portfolios_dm.p… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · portfolio_account_group_types_mv Filter portfolio_account_group… idle · 2 actors StreamScan · portfolio_account_group_types_mv StreamScan portfolio_account_group… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · portfolios_dm Project portfolios_dm — · 2 actors Filter · portfolios_dm Filter portfolios_dm idle · 2 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 Project · Inner · clients_dm.id = client_account_group_types_mv.client_id Project Inner · clients_dm.id =… — · 2 actors HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_id HashJoin Inner · clients_dm.id =… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · client_account_group_types_mv Filter client_account_group_ty… idle · 2 actors StreamScan · client_account_group_types_mv StreamScan client_account_group_ty… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · clients_dm Project clients_dm — · 2 actors Filter · clients_dm Filter clients_dm idle · 2 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 Project · Inner · clients_dm.id = client_account_group_types_mv.client_id Project Inner · clients_dm.id =… — · 2 actors HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_id HashJoin Inner · clients_dm.id =… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · client_account_group_types_mv Filter client_account_group_ty… idle · 2 actors StreamScan · client_account_group_types_mv StreamScan client_account_group_ty… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · clients_dm Project clients_dm — · 2 actors Filter · clients_dm Filter clients_dm idle · 2 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 Project · Inner · clients_dm.id = client_account_group_types_mv.client_id Project Inner · clients_dm.id =… — · 2 actors HashJoin · Inner · clients_dm.id = client_account_group_types_mv.client_id HashJoin Inner · clients_dm.id =… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · client_account_group_types_mv Filter client_account_group_ty… idle · 2 actors StreamScan · client_account_group_types_mv StreamScan client_account_group_ty… idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · clients_dm Project clients_dm — · 2 actors Filter · clients_dm Filter clients_dm idle · 2 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 Project · open_accounts_mv Project open_accounts_mv — · 2 actors StreamScan · open_accounts_mv StreamScan open_accounts_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 12237 (Actor 33365,33366)
StreamMaterialize { columns: [account_group_id, base_currency, opening_date, source_entity_type, open_accounts_mv.account_id(hidden), null:Varchar(hidden), null:Varchar#1(hidden), null:Int32(hidden), $src(hidden)], stream_key: [open_accounts_mv.account_id, null:Varchar, null:Int32, null:Varchar#1, $src], pk_columns: [open_accounts_mv.account_id, null:Varchar, null:Int32, null:Varchar#1, $src], pk_conflict: NoCheck }
├── output: [ $expr1, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date, 'account':Varchar, open_accounts_mv.account_id, null:Varchar, null:Varchar, null:Int32, $src ]
├── stream key: [ open_accounts_mv.account_id, null:Varchar, null:Int32, null:Varchar, $src ]
└── StreamUnion { all: true } { output: [ $expr1, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date, 'account':Varchar, open_accounts_mv.account_id, null:Varchar, null:Varchar, null:Int32, $src ], stream key: [ open_accounts_mv.account_id, null:Varchar, null:Int32, null:Varchar, $src ] }
    ├── MergeExecutor { output: [ $expr1, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date, 'account':Varchar, open_accounts_mv.account_id, null:Varchar, null:Varchar, null:Int32, 0:Int32 ], stream key: [ open_accounts_mv.account_id ] }
    ├── MergeExecutor { output: [ $expr2, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 1:Int32 ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ $expr3, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 2:Int32 ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ $expr4, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 3:Int32 ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ $expr5, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 4:Int32 ], stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── MergeExecutor { output: [ $expr6, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 5:Int32 ], stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── MergeExecutor { output: [ $expr7, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 6:Int32 ], stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── MergeExecutor { output: [ $expr8, users_dm.base_currency_code, min(open_accounts_mv.opening_date), 'user':Varchar, user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, null:Int32, 7:Int32 ], stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code ] }
    └── MergeExecutor { output: [ $expr9, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date), 'party':Varchar, party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, null:Varchar, null:Int32, 8:Int32 ], stream key: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type ] }

Fragment 12238 (Actor 33352,33351)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(open_accounts_mv.account_id, 'all':Varchar)::Bytea)) as $expr1, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date, 'account':Varchar, open_accounts_mv.account_id, null:Varchar, null:Varchar, null:Int32, 0:Int32] }
├── output: [ $expr1, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date, 'account':Varchar, open_accounts_mv.account_id, null:Varchar, null:Varchar, null:Int32, 0:Int32 ]
├── stream key: [ open_accounts_mv.account_id ]
└── StreamTableScan { table: open_accounts_mv, columns: [account_id, base_currency_code, opening_date] } { output: [ open_accounts_mv.account_id, open_accounts_mv.base_currency_code, open_accounts_mv.opening_date ], stream key: [ open_accounts_mv.account_id ] }
    ├── Upstream { output: [ account_id, base_currency_code, opening_date ], stream key: [] }
    └── BatchPlanNode { output: [ account_id, base_currency_code, opening_date ], stream key: [] }

Fragment 12239 (Actor 33370,33369)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(clients_dm.id, 'all':Varchar)::Bytea)) as $expr2, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 1:Int32] }
├── output: [ $expr2, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 1:Int32 ]
├── stream key: [ clients_dm.id, client_account_group_types_mv.type ]
└── StreamHashJoin { type: Inner, predicate: clients_dm.id = client_account_group_types_mv.client_id } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
    └── MergeExecutor { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }

Fragment 12240 (Actor 33407,33408)
StreamProject { exprs: [clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
└── StreamFilter { predicate: IsNull(clients_dm.closing_date) AND Not(IsTrue(clients_dm.m_is_stub)) } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
    └── StreamTableScan { table: clients_dm, columns: [id, base_currency_code, onboarding_date, closing_date, m_is_stub] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
        ├── Upstream { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }

Fragment 12241 (Actor 33410,33409)
StreamFilter { predicate: (client_account_group_types_mv.type = 'all':Varchar) } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
└── StreamTableScan { table: client_account_group_types_mv, columns: [client_id, type] } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
    ├── Upstream { output: [ client_id, type ], stream key: [] }
    └── BatchPlanNode { output: [ client_id, type ], stream key: [] }

Fragment 12242 (Actor 33372,33371)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(clients_dm.id, 'restricted':Varchar)::Bytea)) as $expr3, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 2:Int32] }
├── output: [ $expr3, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 2:Int32 ]
├── stream key: [ clients_dm.id, client_account_group_types_mv.type ]
└── StreamHashJoin { type: Inner, predicate: clients_dm.id = client_account_group_types_mv.client_id } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
    └── MergeExecutor { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }

Fragment 12243 (Actor 33411,33412)
StreamProject { exprs: [clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
└── StreamFilter { predicate: IsNull(clients_dm.closing_date) AND Not(IsTrue(clients_dm.m_is_stub)) } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
    └── StreamTableScan { table: clients_dm, columns: [id, base_currency_code, onboarding_date, closing_date, m_is_stub] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
        ├── Upstream { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }

Fragment 12244 (Actor 33413,33414)
StreamFilter { predicate: (client_account_group_types_mv.type = 'restricted':Varchar) } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
└── StreamTableScan { table: client_account_group_types_mv, columns: [client_id, type] } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
    ├── Upstream { output: [ client_id, type ], stream key: [] }
    └── BatchPlanNode { output: [ client_id, type ], stream key: [] }

Fragment 12245 (Actor 33373,33374)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(clients_dm.id, 'un_restricted':Varchar)::Bytea)) as $expr4, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 3:Int32] }
├── output: [ $expr4, clients_dm.base_currency_code, clients_dm.onboarding_date, 'client':Varchar, clients_dm.id, client_account_group_types_mv.type, null:Varchar, null:Int32, 3:Int32 ]
├── stream key: [ clients_dm.id, client_account_group_types_mv.type ]
└── StreamHashJoin { type: Inner, predicate: clients_dm.id = client_account_group_types_mv.client_id } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ clients_dm.id, client_account_group_types_mv.type ] }
    ├── MergeExecutor { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
    └── MergeExecutor { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }

Fragment 12246 (Actor 33415,33416)
StreamProject { exprs: [clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date ], stream key: [ clients_dm.id ] }
└── StreamFilter { predicate: IsNull(clients_dm.closing_date) AND Not(IsTrue(clients_dm.m_is_stub)) } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
    └── StreamTableScan { table: clients_dm, columns: [id, base_currency_code, onboarding_date, closing_date, m_is_stub] } { output: [ clients_dm.id, clients_dm.base_currency_code, clients_dm.onboarding_date, clients_dm.closing_date, clients_dm.m_is_stub ], stream key: [ clients_dm.id ] }
        ├── Upstream { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ id, base_currency_code, onboarding_date, closing_date, m_is_stub ], stream key: [] }

Fragment 12247 (Actor 33418,33417)
StreamFilter { predicate: (client_account_group_types_mv.type = 'un_restricted':Varchar) } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
└── StreamTableScan { table: client_account_group_types_mv, columns: [client_id, type] } { output: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ], stream key: [ client_account_group_types_mv.client_id, client_account_group_types_mv.type ] }
    ├── Upstream { output: [ client_id, type ], stream key: [] }
    └── BatchPlanNode { output: [ client_id, type ], stream key: [] }

Fragment 12248 (Actor 33378,33377)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(portfolios_dm.portfolio_id, 'all':Varchar)::Bytea)) as $expr5, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 4:Int32] }
├── output: [ $expr5, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 4:Int32 ]
├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
└── StreamHashJoin { type: Inner, predicate: portfolios_dm.portfolio_id = portfolio_account_group_types_mv.portfolio_id }
    ├── output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── MergeExecutor { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
    └── MergeExecutor { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }

Fragment 12249 (Actor 33420,33419)
StreamProject { exprs: [portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
└── StreamFilter { predicate: IsNull(portfolios_dm.disabled_at) AND Not(IsTrue(portfolios_dm.m_is_stub)) } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
    └── StreamTableScan { table: portfolios_dm, columns: [portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
        ├── Upstream { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }

Fragment 12250 (Actor 33421,33422)
StreamFilter { predicate: (portfolio_account_group_types_mv.type = 'all':Varchar) } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
└── StreamTableScan { table: portfolio_account_group_types_mv, columns: [portfolio_id, type, $src] } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── Upstream { output: [ portfolio_id, type, $src ], stream key: [] }
    └── BatchPlanNode { output: [ portfolio_id, type, $src ], stream key: [] }

Fragment 12251 (Actor 33380,33379)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(portfolios_dm.portfolio_id, 'restricted':Varchar)::Bytea)) as $expr6, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 5:Int32] }
├── output: [ $expr6, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 5:Int32 ]
├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
└── StreamHashJoin { type: Inner, predicate: portfolios_dm.portfolio_id = portfolio_account_group_types_mv.portfolio_id }
    ├── output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── MergeExecutor { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
    └── MergeExecutor { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }

Fragment 12252 (Actor 33423,33424)
StreamProject { exprs: [portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
└── StreamFilter { predicate: IsNull(portfolios_dm.disabled_at) AND Not(IsTrue(portfolios_dm.m_is_stub)) } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
    └── StreamTableScan { table: portfolios_dm, columns: [portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
        ├── Upstream { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }

Fragment 12253 (Actor 33426,33425)
StreamFilter { predicate: (portfolio_account_group_types_mv.type = 'restricted':Varchar) } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
└── StreamTableScan { table: portfolio_account_group_types_mv, columns: [portfolio_id, type, $src] } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── Upstream { output: [ portfolio_id, type, $src ], stream key: [] }
    └── BatchPlanNode { output: [ portfolio_id, type, $src ], stream key: [] }

Fragment 12254 (Actor 33381,33382)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(portfolios_dm.portfolio_id, 'un_restricted':Varchar)::Bytea)) as $expr7, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 6:Int32] }
├── output: [ $expr7, portfolios_dm.base_currency_code, portfolios_dm.opening_date, 'portfolio':Varchar, portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, null:Varchar, portfolio_account_group_types_mv.$src, 6:Int32 ]
├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
└── StreamHashJoin { type: Inner, predicate: portfolios_dm.portfolio_id = portfolio_account_group_types_mv.portfolio_id }
    ├── output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── stream key: [ portfolios_dm.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ]
    ├── MergeExecutor { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
    └── MergeExecutor { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }

Fragment 12255 (Actor 33427,33428)
StreamProject { exprs: [portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date ], stream key: [ portfolios_dm.portfolio_id ] }
└── StreamFilter { predicate: IsNull(portfolios_dm.disabled_at) AND Not(IsTrue(portfolios_dm.m_is_stub)) } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
    └── StreamTableScan { table: portfolios_dm, columns: [portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub] } { output: [ portfolios_dm.portfolio_id, portfolios_dm.base_currency_code, portfolios_dm.opening_date, portfolios_dm.disabled_at, portfolios_dm.m_is_stub ], stream key: [ portfolios_dm.portfolio_id ] }
        ├── Upstream { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }
        └── BatchPlanNode { output: [ portfolio_id, base_currency_code, opening_date, disabled_at, m_is_stub ], stream key: [] }

Fragment 12256 (Actor 33430,33429)
StreamFilter { predicate: (portfolio_account_group_types_mv.type = 'un_restricted':Varchar) } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
└── StreamTableScan { table: portfolio_account_group_types_mv, columns: [portfolio_id, type, $src] } { output: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ], stream key: [ portfolio_account_group_types_mv.portfolio_id, portfolio_account_group_types_mv.type, portfolio_account_group_types_mv.$src ] }
    ├── Upstream { output: [ portfolio_id, type, $src ], stream key: [] }
    └── BatchPlanNode { output: [ portfolio_id, type, $src ], stream key: [] }

Fragment 12257 (Actor 33383,33384)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(user_account_membership_mv.user_id, user_account_membership_mv.type)::Bytea)) as $expr8, users_dm.base_currency_code, min(open_accounts_mv.opening_date), 'user':Varchar, user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, null:Int32, 7:Int32] }
├── output: [ $expr8, users_dm.base_currency_code, min(open_accounts_mv.opening_date), 'user':Varchar, user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, null:Int32, 7:Int32 ]
├── stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code ]
└── StreamHashAgg { group_key: [user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code], aggs: [min(open_accounts_mv.opening_date), count] }
    ├── output: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, min(open_accounts_mv.opening_date), count ]
    ├── stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code ]
    └── MergeExecutor { output: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, open_accounts_mv.opening_date, user_account_membership_mv.account_id, user_account_membership_mv.$src, open_accounts_mv.account_id ], stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ] }

Fragment 12258 (Actor 33385,33386)
StreamHashJoin { type: Inner, predicate: user_account_membership_mv.account_id = open_accounts_mv.account_id }
├── output: [ user_account_membership_mv.user_id, user_account_membership_mv.type, users_dm.base_currency_code, open_accounts_mv.opening_date, user_account_membership_mv.account_id, user_account_membership_mv.$src, open_accounts_mv.account_id ]
├── stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ]
├── MergeExecutor { output: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.type, users_dm.base_currency_code, user_account_membership_mv.$src, users_dm.user_id ], stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ] }
└── MergeExecutor { output: [ open_accounts_mv.account_id, open_accounts_mv.opening_date ], stream key: [ open_accounts_mv.account_id ] }

Fragment 12259 (Actor 33387,33388)
StreamHashJoin { type: Inner, predicate: user_account_membership_mv.user_id = users_dm.user_id }
├── output: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.type, users_dm.base_currency_code, user_account_membership_mv.$src, users_dm.user_id ]
├── stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ]
├── MergeExecutor { output: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.type, user_account_membership_mv.$src ], stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ] }
└── MergeExecutor { output: [ users_dm.user_id, users_dm.base_currency_code ], stream key: [ users_dm.user_id ] }

Fragment 12260 (Actor 33431,33432)
StreamTableScan { table: user_account_membership_mv, columns: [user_id, account_id, type, $src] } { output: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.type, user_account_membership_mv.$src ], stream key: [ user_account_membership_mv.user_id, user_account_membership_mv.account_id, user_account_membership_mv.$src ] }
├── Upstream { output: [ user_id, account_id, type, $src ], stream key: [] }
└── BatchPlanNode { output: [ user_id, account_id, type, $src ], stream key: [] }

Fragment 12261 (Actor 33434,33433)
StreamTableScan { table: users_dm, columns: [user_id, base_currency_code] } { output: [ users_dm.user_id, users_dm.base_currency_code ], stream key: [ users_dm.user_id ] }
├── Upstream { output: [ user_id, base_currency_code ], stream key: [] }
└── BatchPlanNode { output: [ user_id, base_currency_code ], stream key: [] }

Fragment 12262 (Actor 33436,33435)
StreamTableScan { table: open_accounts_mv, columns: [account_id, opening_date] } { output: [ open_accounts_mv.account_id, open_accounts_mv.opening_date ], stream key: [ open_accounts_mv.account_id ] }
├── Upstream { output: [ account_id, opening_date ], stream key: [] }
└── BatchPlanNode { output: [ account_id, opening_date ], stream key: [] }

Fragment 12263 (Actor 33389,33390)
StreamProject { exprs: [ConcatOp('account_group_':Varchar, Md5(ConcatOp(party_account_direct_mv_next.party_id, party_account_direct_mv_next.type)::Bytea)) as $expr9, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date), 'party':Varchar, party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, null:Varchar, null:Int32, 8:Int32] }
├── output: [ $expr9, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date), 'party':Varchar, party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, null:Varchar, null:Int32, 8:Int32 ]
├── stream key: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type ]
└── StreamFilter { predicate: Not(IsNull(min(lifecycle_profiles.base_currency_code))) } { output: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date) ], stream key: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type ] }
    └── StreamProject { exprs: [party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date)] }
        ├── output: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date) ]
        ├── stream key: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type ]
        └── StreamHashAgg { group_key: [party_account_direct_mv_next.party_id, party_account_direct_mv_next.type], aggs: [min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date), count] }
            ├── output: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type, min(lifecycle_profiles.base_currency_code), min(open_accounts_mv.opening_date), count ]
            ├── stream key: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.type ]
            └── MergeExecutor
                ├── output:
                │   ┌── party_account_direct_mv_next.party_id
                │   ├── party_account_direct_mv_next.type
                │   ├── lifecycle_profiles.base_currency_code
                │   ├── open_accounts_mv.opening_date
                │   ├── party_account_direct_mv_next.party_involvements_dm.id
                │   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
                │   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
                │   ├── party_account_direct_mv_next.$src
                │   ├── null:Date
                │   ├── null:Varchar
                │   ├── null:Varchar
                │   ├── null:Varchar
                │   ├── $src
                │   ├── party_account_direct_mv_next.account_id
                │   ├── party_account_direct_mv_next.customer_relationship_id
                │   └── lifecycle_profiles.id
                └── stream key:
                    ┌── party_account_direct_mv_next.party_involvements_dm.id
                    ├── party_account_direct_mv_next.party_involvements_dm.entity_id
                    ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
                    ├── party_account_direct_mv_next.$src
                    ├── null:Date
                    ├── null:Varchar
                    ├── null:Varchar
                    ├── null:Varchar
                    ├── $src
                    ├── party_account_direct_mv_next.account_id
                    ├── lifecycle_profiles.id
                    └── party_account_direct_mv_next.customer_relationship_id

Fragment 12264 (Actor 33391,33392)
StreamHashJoin { type: LeftOuter, predicate: party_account_direct_mv_next.customer_relationship_id = lifecycle_profiles.customer_relationship_id }
├── output:
│   ┌── party_account_direct_mv_next.party_id
│   ├── party_account_direct_mv_next.type
│   ├── lifecycle_profiles.base_currency_code
│   ├── open_accounts_mv.opening_date
│   ├── party_account_direct_mv_next.party_involvements_dm.id
│   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   ├── party_account_direct_mv_next.$src
│   ├── null:Date
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── $src
│   ├── party_account_direct_mv_next.account_id
│   ├── party_account_direct_mv_next.customer_relationship_id
│   └── lifecycle_profiles.id
├── stream key:
│   ┌── party_account_direct_mv_next.party_involvements_dm.id
│   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   ├── party_account_direct_mv_next.$src
│   ├── null:Date
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── $src
│   ├── party_account_direct_mv_next.account_id
│   ├── lifecycle_profiles.id
│   └── party_account_direct_mv_next.customer_relationship_id
├── MergeExecutor
│   ├── output:
│   │   ┌── party_account_direct_mv_next.party_id
│   │   ├── party_account_direct_mv_next.customer_relationship_id
│   │   ├── party_account_direct_mv_next.type
│   │   ├── open_accounts_mv.opening_date
│   │   ├── party_account_direct_mv_next.party_involvements_dm.id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   │   ├── party_account_direct_mv_next.$src
│   │   ├── null:Date
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── $src
│   │   ├── party_account_direct_mv_next.account_id
│   │   └── open_accounts_mv.account_id
│   └── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src, null:Date, null:Varchar, null:Varchar, null:Varchar, $src, party_account_direct_mv_next.account_id ]
└── MergeExecutor { output: [ lifecycle_profiles.customer_relationship_id, lifecycle_profiles.base_currency_code, lifecycle_profiles.id ], stream key: [ lifecycle_profiles.id ] }

Fragment 12265 (Actor 33393,33394)
StreamHashJoin { type: Inner, predicate: party_account_direct_mv_next.account_id = open_accounts_mv.account_id }
├── output:
│   ┌── party_account_direct_mv_next.party_id
│   ├── party_account_direct_mv_next.customer_relationship_id
│   ├── party_account_direct_mv_next.type
│   ├── open_accounts_mv.opening_date
│   ├── party_account_direct_mv_next.party_involvements_dm.id
│   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   ├── party_account_direct_mv_next.$src
│   ├── null:Date
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── $src
│   ├── party_account_direct_mv_next.account_id
│   └── open_accounts_mv.account_id
├── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src, null:Date, null:Varchar, null:Varchar, null:Varchar, $src, party_account_direct_mv_next.account_id ]
├── MergeExecutor
│   ├── output:
│   │   ┌── party_account_direct_mv_next.party_id
│   │   ├── party_account_direct_mv_next.customer_relationship_id
│   │   ├── party_account_direct_mv_next.account_id
│   │   ├── party_account_direct_mv_next.type
│   │   ├── null:Date
│   │   ├── party_account_direct_mv_next.party_involvements_dm.id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── party_account_direct_mv_next.$src
│   │   └── $src
│   └── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src, null:Date, null:Varchar, null:Varchar, null:Varchar, $src ]
└── MergeExecutor { output: [ open_accounts_mv.account_id, open_accounts_mv.opening_date ], stream key: [ open_accounts_mv.account_id ] }

Fragment 12266 (Actor 33396,33395)
StreamUnion { all: true }
├── output:
│   ┌── party_account_direct_mv_next.party_id
│   ├── party_account_direct_mv_next.customer_relationship_id
│   ├── party_account_direct_mv_next.account_id
│   ├── party_account_direct_mv_next.type
│   ├── null:Date
│   ├── party_account_direct_mv_next.party_involvements_dm.id
│   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── null:Varchar
│   ├── party_account_direct_mv_next.$src
│   └── $src
├── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src, null:Date, null:Varchar, null:Varchar, null:Varchar, $src ]
├── MergeExecutor
│   ├── output:
│   │   ┌── party_account_direct_mv_next.party_id
│   │   ├── party_account_direct_mv_next.customer_relationship_id
│   │   ├── party_account_direct_mv_next.account_id
│   │   ├── party_account_direct_mv_next.type
│   │   ├── null:Date
│   │   ├── party_account_direct_mv_next.party_involvements_dm.id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.entity_id
│   │   ├── party_account_direct_mv_next.party_involvements_dm.customer_relationship_id
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── null:Varchar
│   │   ├── party_account_direct_mv_next.$src
│   │   └── 0:Int32
│   └── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src ]
└── MergeExecutor
    ├── output:
    │   ┌── party_account_via_portfolio_mv_next.party_id
    │   ├── party_account_via_portfolio_mv_next.customer_relationship_id
    │   ├── party_account_via_portfolio_mv_next.account_id
    │   ├── party_account_via_portfolio_mv_next.type
    │   ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date
    │   ├── party_account_via_portfolio_mv_next.open_accounts_mv.account_id
    │   ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id
    │   ├── party_account_via_portfolio_mv_next.customer_relationships.id
    │   ├── party_account_via_portfolio_mv_next.party_involvements_dm.id
    │   ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id
    │   ├── party_account_via_portfolio_mv_next.party_involvements_dm.party_id
    │   ├── party_account_via_portfolio_mv_next.$src
    │   └── 1:Int32
    └── stream key:
        ┌── party_account_via_portfolio_mv_next.open_accounts_mv.account_id
        ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id
        ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date
        ├── party_account_via_portfolio_mv_next.customer_relationships.id
        ├── party_account_via_portfolio_mv_next.party_involvements_dm.id
        ├── party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id
        ├── party_account_via_portfolio_mv_next.party_involvements_dm.party_id
        └── party_account_via_portfolio_mv_next.$src

Fragment 12267 (Actor 33437,33438)
StreamProject { exprs: [party_account_direct_mv_next.party_id, party_account_direct_mv_next.customer_relationship_id, party_account_direct_mv_next.account_id, party_account_direct_mv_next.type, null:Date, party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, null:Varchar, null:Varchar, null:Varchar, party_account_direct_mv_next.$src, 0:Int32] }
├── output: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.customer_relationship_id, party_account_direct_mv_next.account_id, party_account_direct_mv_next.type, null:Date, party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, null:Varchar, null:Varchar, null:Varchar, party_account_direct_mv_next.$src, 0:Int32 ]
├── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src ]
└── StreamTableScan { table: party_account_direct_mv_next, columns: [party_id, customer_relationship_id, account_id, type, party_involvements_dm.id, party_involvements_dm.entity_id, party_involvements_dm.customer_relationship_id, $src] }
    ├── output: [ party_account_direct_mv_next.party_id, party_account_direct_mv_next.customer_relationship_id, party_account_direct_mv_next.account_id, party_account_direct_mv_next.type, party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src ]
    ├── stream key: [ party_account_direct_mv_next.party_involvements_dm.id, party_account_direct_mv_next.party_involvements_dm.entity_id, party_account_direct_mv_next.party_involvements_dm.customer_relationship_id, party_account_direct_mv_next.$src ]
    ├── Upstream { output: [ party_id, customer_relationship_id, account_id, type, party_involvements_dm.id, party_involvements_dm.entity_id, party_involvements_dm.customer_relationship_id, $src ], stream key: [] }
    └── BatchPlanNode { output: [ party_id, customer_relationship_id, account_id, type, party_involvements_dm.id, party_involvements_dm.entity_id, party_involvements_dm.customer_relationship_id, $src ], stream key: [] }

Fragment 12268 (Actor 33440,33439)
StreamProject { exprs: [party_account_via_portfolio_mv_next.party_id, party_account_via_portfolio_mv_next.customer_relationship_id, party_account_via_portfolio_mv_next.account_id, party_account_via_portfolio_mv_next.type, party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date, party_account_via_portfolio_mv_next.open_accounts_mv.account_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id, party_account_via_portfolio_mv_next.customer_relationships.id, party_account_via_portfolio_mv_next.party_involvements_dm.id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id, party_account_via_portfolio_mv_next.party_involvements_dm.party_id, party_account_via_portfolio_mv_next.$src, 1:Int32] }
├── output: [ party_account_via_portfolio_mv_next.party_id, party_account_via_portfolio_mv_next.customer_relationship_id, party_account_via_portfolio_mv_next.account_id, party_account_via_portfolio_mv_next.type, party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date, party_account_via_portfolio_mv_next.open_accounts_mv.account_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id, party_account_via_portfolio_mv_next.customer_relationships.id, party_account_via_portfolio_mv_next.party_involvements_dm.id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id, party_account_via_portfolio_mv_next.party_involvements_dm.party_id, party_account_via_portfolio_mv_next.$src, 1:Int32 ]
├── stream key: [ party_account_via_portfolio_mv_next.open_accounts_mv.account_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date, party_account_via_portfolio_mv_next.customer_relationships.id, party_account_via_portfolio_mv_next.party_involvements_dm.id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id, party_account_via_portfolio_mv_next.party_involvements_dm.party_id, party_account_via_portfolio_mv_next.$src ]
└── StreamTableScan { table: party_account_via_portfolio_mv_next, columns: [party_id, customer_relationship_id, account_id, type, open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, customer_relationships.id, party_involvements_dm.id, account_to_portfolios_dm.account_id, party_involvements_dm.party_id, $src] }
    ├── output: [ party_account_via_portfolio_mv_next.party_id, party_account_via_portfolio_mv_next.customer_relationship_id, party_account_via_portfolio_mv_next.account_id, party_account_via_portfolio_mv_next.type, party_account_via_portfolio_mv_next.open_accounts_mv.account_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date, party_account_via_portfolio_mv_next.customer_relationships.id, party_account_via_portfolio_mv_next.party_involvements_dm.id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id, party_account_via_portfolio_mv_next.party_involvements_dm.party_id, party_account_via_portfolio_mv_next.$src ]
    ├── stream key: [ party_account_via_portfolio_mv_next.open_accounts_mv.account_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.portfolio_id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.effective_start_date, party_account_via_portfolio_mv_next.customer_relationships.id, party_account_via_portfolio_mv_next.party_involvements_dm.id, party_account_via_portfolio_mv_next.account_to_portfolios_dm.account_id, party_account_via_portfolio_mv_next.party_involvements_dm.party_id, party_account_via_portfolio_mv_next.$src ]
    ├── Upstream { output: [ party_id, customer_relationship_id, account_id, type, open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, customer_relationships.id, party_involvements_dm.id, account_to_portfolios_dm.account_id, party_involvements_dm.party_id, $src ], stream key: [] }
    └── BatchPlanNode { output: [ party_id, customer_relationship_id, account_id, type, open_accounts_mv.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, customer_relationships.id, party_involvements_dm.id, account_to_portfolios_dm.account_id, party_involvements_dm.party_id, $src ], stream key: [] }

Fragment 12269 (Actor 33441,33442)
StreamTableScan { table: open_accounts_mv, columns: [account_id, opening_date] } { output: [ open_accounts_mv.account_id, open_accounts_mv.opening_date ], stream key: [ open_accounts_mv.account_id ] }
├── Upstream { output: [ account_id, opening_date ], stream key: [] }
└── BatchPlanNode { output: [ account_id, opening_date ], stream key: [] }

Fragment 12270 (Actor 33397,33398)
StreamProject { exprs: [lifecycle_profiles.customer_relationship_id, lifecycle_profiles.base_currency_code, lifecycle_profiles.id] } { output: [ lifecycle_profiles.customer_relationship_id, lifecycle_profiles.base_currency_code, lifecycle_profiles.id ], stream key: [ lifecycle_profiles.id ] }
└── StreamFilter { predicate: IsNull(lifecycle_profiles.disabled_at) } { output: [ lifecycle_profiles.customer_relationship_id, lifecycle_profiles.base_currency_code, lifecycle_profiles.id, lifecycle_profiles.disabled_at ], stream key: [ lifecycle_profiles.id ] }
    └── StreamTableScan { table: lifecycle_profiles, columns: [customer_relationship_id, base_currency_code, id, disabled_at] } { output: [ lifecycle_profiles.customer_relationship_id, lifecycle_profiles.base_currency_code, lifecycle_profiles.id, lifecycle_profiles.disabled_at ], stream key: [ lifecycle_profiles.id ] }
        ├── Upstream { output: [ customer_relationship_id, base_currency_code, id, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ customer_relationship_id, base_currency_code, id, disabled_at ], stream key: [] }