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

← cluster opportunity objects portfolio_idle_cash_breaches_mv explain
Overview Objects Graph History
materialized view · opportunity.portfolio_idle_cash_breaches_mv profiled over 5s
seconds (1–30)
Stateful hash join (4 state tables) — consider a temporal join for dimension lookupsAggregation state — unbounded unless keyed or temporally filteredDynamic filter — verify it pairs with a temporal condition to clean state
113 operators
Materialize · opportunity.portfolio_idle_cash_breaches_mv
0% idle 2 actors
Project · IsNull(account_to_portfolios_dm.portfolio_id)
2 actors
Filter · IsNull(account_to_portfolios_dm.portfolio_id)
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · opportunity_conditions_mv.opportunity_id = opportunity_cond…
2 actors
HashJoin · LeftOuter · opportunity_conditions_mv.opportunity_id = opportunity_cond… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
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
SyncLogStore · Inner · 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar = opportunity_…
2 actors
HashJoin · Inner · 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar = opportunity_… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Filter · opportunity_conditions_mv
0% idle 2 actors
StreamScan · opportunity_conditions_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
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
SyncLogStore · Inner · transactions_dm.account_id = account_to_portfolios_dm.accou…
2 actors
HashJoin · Inner · transactions_dm.account_id = account_to_portfolios_dm.accou… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · account_to_portfolios_dm
2 actors
Filter · account_to_portfolios_dm
0% idle 2 actors
StreamScan · account_to_portfolios_dm
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
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
Project · transactions_dm
2 actors
DynamicFilter · transactions_dm Dynamic filter — verify it pairs with a temporal condition to clean state
0% idle 2 actors
Merge
2 actors
Exchange
0% 2/s 0 actors
Project
1 actor
Now
0% 2/s 1 actor
Project · transactions_dm
2 actors
Filter · transactions_dm
1% idle 2 actors
StreamScan · transactions_dm
1% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · portfolio_cash_ratio_mv_next.portfolio_id = portfolio_cash_…
2 actors
HashJoin · Inner · portfolio_cash_ratio_mv_next.portfolio_id = portfolio_cash_… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · portfolio_cash_ratio_mv_next
0% idle 2 actors
BatchPlan
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Filter · (count = max(opportunity_conditions_mv.interval_to_check_da…
0% idle 2 actors
HashAgg · (count = max(opportunity_conditions_mv.interval_to_check_da… Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
LocalityProvider · (count = max(opportunity_conditions_mv.interval_to_check_da…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · portfolio_cash_ratio_mv_next.activity_name = opportunity_co…
2 actors
HashJoin · Inner · portfolio_cash_ratio_mv_next.activity_name = opportunity_co… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
Merge
2 actors
Merge
2 actors
Exchange
0% idle 0 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
StreamScan · portfolio_cash_ratio_mv_next
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 · opportunity.portfolio_idle_cash_breaches_mv Materialize opportunity.portfolio_i… idle · 2 actors Project · IsNull(account_to_portfolios_dm.portfolio_id) Project IsNull(account_to_portf… — · 2 actors Filter · IsNull(account_to_portfolios_dm.portfolio_id) Filter IsNull(account_to_portf… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · opportunity_conditions_mv.opportunity_id = opportunity_cond… SyncLogStore LeftOuter · opportunity… — · 2 actors HashJoin · LeftOuter · opportunity_conditions_mv.opportunity_id = opportunity_cond… HashJoin LeftOuter · opportunity… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors HashAgg HashAgg idle · 2 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar = opportunity_… SyncLogStore Inner · 'GET_PORTFOLIO_… — · 2 actors HashJoin · Inner · 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar = opportunity_… HashJoin Inner · 'GET_PORTFOLIO_… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Filter · opportunity_conditions_mv Filter opportunity_conditions_… idle · 2 actors StreamScan · opportunity_conditions_mv StreamScan opportunity_conditions_… 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 Project Project — · 2 actors HashAgg HashAgg idle · 2 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · transactions_dm.account_id = account_to_portfolios_dm.accou… SyncLogStore Inner · transactions_dm… — · 2 actors HashJoin · Inner · transactions_dm.account_id = account_to_portfolios_dm.accou… HashJoin Inner · transactions_dm… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · account_to_portfolios_dm Project account_to_portfolios_dm — · 2 actors Filter · account_to_portfolios_dm Filter account_to_portfolios_dm idle · 2 actors StreamScan · account_to_portfolios_dm StreamScan account_to_portfolios_dm idle · 2 actors BatchPlan BatchPlan — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors HashAgg HashAgg idle · 2 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project · transactions_dm Project transactions_dm — · 2 actors DynamicFilter · transactions_dm DynamicFilter transactions_dm idle · 2 actors Merge Merge — · 2 actors Exchange Exchange 2/s · 0 actors Project Project — · 1 actor Now Now 2/s · 1 actor Project · transactions_dm Project transactions_dm — · 2 actors Filter · transactions_dm Filter transactions_dm idle · 2 actors StreamScan · transactions_dm StreamScan transactions_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 · Inner · portfolio_cash_ratio_mv_next.portfolio_id = portfolio_cash_… SyncLogStore Inner · portfolio_cash_… — · 2 actors HashJoin · Inner · portfolio_cash_ratio_mv_next.portfolio_id = portfolio_cash_… HashJoin Inner · portfolio_cash_… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · portfolio_cash_ratio_mv_next StreamScan portfolio_cash_ratio_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 Filter · (count = max(opportunity_conditions_mv.interval_to_check_da… Filter (count = max(opportunit… idle · 2 actors HashAgg · (count = max(opportunity_conditions_mv.interval_to_check_da… HashAgg (count = max(opportunit… idle · 2 actors LocalityProvider · (count = max(opportunity_conditions_mv.interval_to_check_da… LocalityProvider (count = max(opportunit… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · portfolio_cash_ratio_mv_next.activity_name = opportunity_co… SyncLogStore Inner · portfolio_cash_… — · 2 actors HashJoin · Inner · portfolio_cash_ratio_mv_next.activity_name = opportunity_co… HashJoin Inner · portfolio_cash_… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors Project Project — · 2 actors Merge Merge — · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors LocalityProvider LocalityProvider idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors StreamScan · portfolio_cash_ratio_mv_next StreamScan portfolio_cash_ratio_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 61624 (Actor 739664,739663)
StreamMaterialize { columns: [opportunity_id, resource_id, fact_date, activity_name, latest_date, interval_to_check_days, cash_ratio, idle_cash_amount, currency, portfolio_cash_ratio_mv_next.currency_code(hidden)], stream_key: [opportunity_id, resource_id, latest_date, fact_date, activity_name, interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code], pk_columns: [opportunity_id, resource_id, latest_date, fact_date, activity_name, interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code], pk_conflict: NoCheck }
├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.cash_value, max(portfolio_cash_ratio_mv_next.currency_code), portfolio_cash_ratio_mv_next.currency_code ]
├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
└── StreamProject { exprs: [opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.cash_value, max(portfolio_cash_ratio_mv_next.currency_code), portfolio_cash_ratio_mv_next.currency_code] }
    ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.cash_value, max(portfolio_cash_ratio_mv_next.currency_code), portfolio_cash_ratio_mv_next.currency_code ]
    ├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
    └── StreamFilter { predicate: IsNull(account_to_portfolios_dm.portfolio_id) }
        ├── output:
        │   ┌── opportunity_conditions_mv.opportunity_id
        │   ├── portfolio_cash_ratio_mv_next.portfolio_id
        │   ├── opportunity_conditions_mv.as_of_date
        │   ├── opportunity_conditions_mv.activity_name
        │   ├── opportunity_conditions_mv.interval_to_check_days
        │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
        │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
        │   ├── portfolio_cash_ratio_mv_next.cash_value
        │   ├── portfolio_cash_ratio_mv_next.cash_ratio
        │   ├── account_to_portfolios_dm.portfolio_id
        │   ├── portfolio_cash_ratio_mv_next.currency_code
        │   └── opportunity_conditions_mv.opportunity_id
        ├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
        └── MergeExecutor
            ├── output:
            │   ┌── opportunity_conditions_mv.opportunity_id
            │   ├── portfolio_cash_ratio_mv_next.portfolio_id
            │   ├── opportunity_conditions_mv.as_of_date
            │   ├── opportunity_conditions_mv.activity_name
            │   ├── opportunity_conditions_mv.interval_to_check_days
            │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
            │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
            │   ├── portfolio_cash_ratio_mv_next.cash_value
            │   ├── portfolio_cash_ratio_mv_next.cash_ratio
            │   ├── account_to_portfolios_dm.portfolio_id
            │   ├── portfolio_cash_ratio_mv_next.currency_code
            │   └── opportunity_conditions_mv.opportunity_id
            └── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]

Fragment 61625 (Actor 739666,739665)
StreamSyncLogStore
├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), portfolio_cash_ratio_mv_next.cash_value, portfolio_cash_ratio_mv_next.cash_ratio, account_to_portfolios_dm.portfolio_id, portfolio_cash_ratio_mv_next.currency_code, opportunity_conditions_mv.opportunity_id ]
├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
└── StreamHashJoin { type: LeftOuter, predicate: opportunity_conditions_mv.opportunity_id = opportunity_conditions_mv.opportunity_id AND portfolio_cash_ratio_mv_next.portfolio_id = account_to_portfolios_dm.portfolio_id }
    ├── output:
    │   ┌── opportunity_conditions_mv.opportunity_id
    │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   ├── opportunity_conditions_mv.as_of_date
    │   ├── opportunity_conditions_mv.activity_name
    │   ├── opportunity_conditions_mv.interval_to_check_days
    │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
    │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
    │   ├── portfolio_cash_ratio_mv_next.cash_value
    │   ├── portfolio_cash_ratio_mv_next.cash_ratio
    │   ├── account_to_portfolios_dm.portfolio_id
    │   ├── portfolio_cash_ratio_mv_next.currency_code
    │   └── opportunity_conditions_mv.opportunity_id
    ├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
    ├── MergeExecutor
    │   ├── output:
    │   │   ┌── opportunity_conditions_mv.opportunity_id
    │   │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   │   ├── opportunity_conditions_mv.as_of_date
    │   │   ├── opportunity_conditions_mv.activity_name
    │   │   ├── opportunity_conditions_mv.interval_to_check_days
    │   │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
    │   │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
    │   │   ├── portfolio_cash_ratio_mv_next.cash_value
    │   │   ├── portfolio_cash_ratio_mv_next.cash_ratio
    │   │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   │   ├── portfolio_cash_ratio_mv_next.dim_value_date
    │   │   └── portfolio_cash_ratio_mv_next.currency_code
    │   └── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
    └── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ], stream key: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ] }

Fragment 61626 (Actor 739672,739671)
StreamLocalityProvider { locality_columns: [opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id] }
├── output:
│   ┌── opportunity_conditions_mv.opportunity_id
│   ├── portfolio_cash_ratio_mv_next.portfolio_id
│   ├── opportunity_conditions_mv.as_of_date
│   ├── opportunity_conditions_mv.activity_name
│   ├── opportunity_conditions_mv.interval_to_check_days
│   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
│   ├── max(portfolio_cash_ratio_mv_next.currency_code)
│   ├── portfolio_cash_ratio_mv_next.cash_value
│   ├── portfolio_cash_ratio_mv_next.cash_ratio
│   ├── portfolio_cash_ratio_mv_next.portfolio_id
│   ├── portfolio_cash_ratio_mv_next.dim_value_date
│   └── portfolio_cash_ratio_mv_next.currency_code
├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
└── MergeExecutor
    ├── output:
    │   ┌── opportunity_conditions_mv.opportunity_id
    │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   ├── opportunity_conditions_mv.as_of_date
    │   ├── opportunity_conditions_mv.activity_name
    │   ├── opportunity_conditions_mv.interval_to_check_days
    │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
    │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
    │   ├── portfolio_cash_ratio_mv_next.cash_value
    │   ├── portfolio_cash_ratio_mv_next.cash_ratio
    │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   ├── portfolio_cash_ratio_mv_next.dim_value_date
    │   └── portfolio_cash_ratio_mv_next.currency_code
    └── stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]

Fragment 61627 (Actor 739690,739689)
StreamSyncLogStore
├── output:
│   ┌── opportunity_conditions_mv.opportunity_id
│   ├── portfolio_cash_ratio_mv_next.portfolio_id
│   ├── opportunity_conditions_mv.as_of_date
│   ├── opportunity_conditions_mv.activity_name
│   ├── opportunity_conditions_mv.interval_to_check_days
│   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
│   ├── max(portfolio_cash_ratio_mv_next.currency_code)
│   ├── portfolio_cash_ratio_mv_next.cash_value
│   ├── portfolio_cash_ratio_mv_next.cash_ratio
│   ├── portfolio_cash_ratio_mv_next.portfolio_id
│   ├── portfolio_cash_ratio_mv_next.dim_value_date
│   └── portfolio_cash_ratio_mv_next.currency_code
├── stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
└── StreamHashJoin { type: Inner, predicate: portfolio_cash_ratio_mv_next.portfolio_id = portfolio_cash_ratio_mv_next.portfolio_id AND max(portfolio_cash_ratio_mv_next.dim_value_date) = portfolio_cash_ratio_mv_next.dim_value_date }
    ├── output:
    │   ┌── opportunity_conditions_mv.opportunity_id
    │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   ├── opportunity_conditions_mv.as_of_date
    │   ├── opportunity_conditions_mv.activity_name
    │   ├── opportunity_conditions_mv.interval_to_check_days
    │   ├── max(portfolio_cash_ratio_mv_next.dim_value_date)
    │   ├── max(portfolio_cash_ratio_mv_next.currency_code)
    │   ├── portfolio_cash_ratio_mv_next.cash_value
    │   ├── portfolio_cash_ratio_mv_next.cash_ratio
    │   ├── portfolio_cash_ratio_mv_next.portfolio_id
    │   ├── portfolio_cash_ratio_mv_next.dim_value_date
    │   └── portfolio_cash_ratio_mv_next.currency_code
    ├── stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.currency_code ]
    ├── MergeExecutor
    │   ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days) ]
    │   └── stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days ]
    └── MergeExecutor { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.cash_value, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.currency_code ], stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code ] }

Fragment 61628 (Actor 739692,739691)
StreamLocalityProvider { locality_columns: [portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date)] }
├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days) ]
├── stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, max(portfolio_cash_ratio_mv_next.dim_value_date), opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days ]
└── MergeExecutor
    ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days) ]
    └── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days ]

Fragment 61629 (Actor 739696,739695)
StreamFilter { predicate: (count = max(opportunity_conditions_mv.interval_to_check_days)) }
├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days) ]
├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days ]
└── StreamHashAgg { group_key: [opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days], aggs: [max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days)] }
    ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, max(portfolio_cash_ratio_mv_next.dim_value_date), max(portfolio_cash_ratio_mv_next.currency_code), count, max(opportunity_conditions_mv.interval_to_check_days) ]
    ├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days ]
    └── StreamLocalityProvider { locality_columns: [opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days] }
        ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
        ├── stream key: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
        └── MergeExecutor
            ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
            └── stream key: [ portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]

Fragment 61630 (Actor 739698,739697)
StreamSyncLogStore { output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── StreamHashJoin { type: Inner, predicate: portfolio_cash_ratio_mv_next.activity_name = opportunity_conditions_mv.activity_name AND (portfolio_cash_ratio_mv_next.dim_value_date <= opportunity_conditions_mv.as_of_date) AND (portfolio_cash_ratio_mv_next.dim_value_date > $expr1) AND Case((opportunity_conditions_mv.op = 'GTE':Varchar), (portfolio_cash_ratio_mv_next.cash_ratio >= opportunity_conditions_mv.threshold), (opportunity_conditions_mv.op = 'GT':Varchar), (portfolio_cash_ratio_mv_next.cash_ratio > opportunity_conditions_mv.threshold), (opportunity_conditions_mv.op = 'LTE':Varchar), (portfolio_cash_ratio_mv_next.cash_ratio <= opportunity_conditions_mv.threshold), (opportunity_conditions_mv.op = 'LT':Varchar), (portfolio_cash_ratio_mv_next.cash_ratio < opportunity_conditions_mv.threshold), (opportunity_conditions_mv.op = 'EQ':Varchar), (portfolio_cash_ratio_mv_next.cash_ratio = opportunity_conditions_mv.threshold), false:Boolean) }
    ├── output: [ opportunity_conditions_mv.opportunity_id, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.interval_to_check_days, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
    ├── stream key: [ portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
    ├── MergeExecutor { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.activity_name ], stream key: [ portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }
    └── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, $expr1, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.activity_name, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61631 (Actor 739723,739724)
StreamLocalityProvider { locality_columns: [portfolio_cash_ratio_mv_next.activity_name] } { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.activity_name ], stream key: [ portfolio_cash_ratio_mv_next.activity_name, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }
└── MergeExecutor { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.activity_name ], stream key: [ portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }

Fragment 61632 (Actor 739754,739755)
StreamTableScan { table: portfolio_cash_ratio_mv_next, columns: [portfolio_id, dim_value_date, currency_code, cash_ratio, activity_name] } { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.activity_name ], stream key: [ portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }
├── Upstream { output: [ portfolio_id, dim_value_date, currency_code, cash_ratio, activity_name ], stream key: [] }
└── BatchPlanNode { output: [ portfolio_id, dim_value_date, currency_code, cash_ratio, activity_name ], stream key: [] }

Fragment 61633 (Actor 739725,739726)
StreamLocalityProvider { locality_columns: [opportunity_conditions_mv.activity_name] } { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, $expr1, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.activity_name, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, $expr1, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61634 (Actor 739761,739760)
StreamProject { exprs: [opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, (opportunity_conditions_mv.as_of_date - opportunity_conditions_mv.interval_to_check_days) as $expr1, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1] }
├── output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, $expr1, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
├── stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ]
└── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61635 (Actor 739756,739757)
StreamFilter { predicate: (opportunity_conditions_mv.activity_name = 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar) AND Not(IsNull(opportunity_conditions_mv.as_of_date)) AND Not(IsNull(opportunity_conditions_mv.interval_to_check_days)) } { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── StreamTableScan { table: opportunity_conditions_mv, columns: [opportunity_id, activity_name, op, threshold, interval_to_check_days, as_of_date, _rw_projected_row_id, _rw_projected_row_id#1] } { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
    ├── Upstream { output: [ opportunity_id, activity_name, op, threshold, interval_to_check_days, as_of_date, _rw_projected_row_id, _rw_projected_row_id#1 ], stream key: [] }
    └── BatchPlanNode { output: [ opportunity_id, activity_name, op, threshold, interval_to_check_days, as_of_date, _rw_projected_row_id, _rw_projected_row_id#1 ], stream key: [] }

Fragment 61636 (Actor 739730,739729)
StreamLocalityProvider { locality_columns: [portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date] } { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.cash_value, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.currency_code ], stream key: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code ] }
└── MergeExecutor { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.cash_value, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.currency_code ], stream key: [ portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }

Fragment 61637 (Actor 739763,739762)
StreamTableScan { table: portfolio_cash_ratio_mv_next, columns: [portfolio_id, dim_value_date, cash_value, cash_ratio, currency_code] } { output: [ portfolio_cash_ratio_mv_next.portfolio_id, portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.cash_value, portfolio_cash_ratio_mv_next.cash_ratio, portfolio_cash_ratio_mv_next.currency_code ], stream key: [ portfolio_cash_ratio_mv_next.dim_value_date, portfolio_cash_ratio_mv_next.currency_code, portfolio_cash_ratio_mv_next.portfolio_id ] }
├── Upstream { output: [ portfolio_id, dim_value_date, cash_value, cash_ratio, currency_code ], stream key: [] }
└── BatchPlanNode { output: [ portfolio_id, dim_value_date, cash_value, cash_ratio, currency_code ], stream key: [] }

Fragment 61638 (Actor 739733,739734)
StreamLocalityProvider { locality_columns: [opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id] } { output: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ], stream key: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ] }
└── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ], stream key: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id ] }

Fragment 61639 (Actor 739732,739731)
StreamProject { exprs: [opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id] } { output: [ opportunity_conditions_mv.opportunity_id, account_to_portfolios_dm.portfolio_id ], stream key: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id ] }
└── StreamHashAgg { group_key: [account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id], aggs: [count] } { output: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, count ], stream key: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id ] }
    └── StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id] } { output: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, transactions_dm.transaction_valuation_date, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
        └── MergeExecutor { output: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61640 (Actor 739736,739735)
StreamSyncLogStore { output: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── StreamHashJoin { type: Inner, predicate: 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar = opportunity_conditions_mv.activity_name AND (transactions_dm.transaction_valuation_date <= opportunity_conditions_mv.as_of_date) AND (transactions_dm.transaction_valuation_date > $expr4) } { output: [ account_to_portfolios_dm.portfolio_id, opportunity_conditions_mv.opportunity_id, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.activity_name, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
    ├── MergeExecutor { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar ], stream key: [ 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date ] }
    └── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.as_of_date, $expr4, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.activity_name, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61641 (Actor 739737,739738)
StreamLocalityProvider { locality_columns: ['GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar] } { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar ], stream key: [ 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar, account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date ] }
└── MergeExecutor { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar ], stream key: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date ] }

Fragment 61642 (Actor 739740,739739)
StreamProject { exprs: [account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar] } { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, 'GET_PORTFOLIO_IDLE_CASH_PERCENTAGE':Varchar ], stream key: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date ] }
└── StreamHashAgg { group_key: [account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date], aggs: [count] } { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, count ], stream key: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date ] }
    └── StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date] } { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, transactions_dm.account_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, transactions_dm.account_id, account_to_portfolios_dm.effective_start_date ] }
        └── MergeExecutor { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, transactions_dm.account_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 61643 (Actor 739742,739741)
StreamSyncLogStore { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, transactions_dm.account_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
└── StreamHashJoin { type: Inner, predicate: transactions_dm.account_id = account_to_portfolios_dm.account_id } { output: [ account_to_portfolios_dm.portfolio_id, transactions_dm.transaction_valuation_date, transactions_dm.account_id, account_to_portfolios_dm.account_id, account_to_portfolios_dm.effective_start_date ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
    ├── MergeExecutor { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date ] }
    └── MergeExecutor { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 61644 (Actor 739743,739744)
StreamProject { exprs: [transactions_dm.account_id, transactions_dm.transaction_valuation_date] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date ] }
└── StreamHashAgg { group_key: [transactions_dm.account_id, transactions_dm.transaction_valuation_date], aggs: [count] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, count ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date ] }
    └── StreamLocalityProvider { locality_columns: [transactions_dm.account_id, transactions_dm.transaction_valuation_date] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id ], stream key: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id ] }
        └── MergeExecutor { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id ], stream key: [ transactions_dm.transaction_id ] }

Fragment 61645 (Actor 739774,739775)
StreamProject { exprs: [transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id ], stream key: [ transactions_dm.transaction_id ] }
└── StreamDynamicFilter { predicate: ($expr2 >= $expr3), output_watermarks: [[$expr2]], output: [transactions_dm.account_id, transactions_dm.transaction_valuation_date, $expr2, transactions_dm.transaction_id], cleaned_by_watermark: true } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, $expr2, transactions_dm.transaction_id ], stream key: [ transactions_dm.transaction_id ] }
    ├── StreamProject { exprs: [transactions_dm.account_id, transactions_dm.transaction_valuation_date, AtTimeZone(transactions_dm.transaction_valuation_date::Timestamp, 'UTC':Varchar) as $expr2, transactions_dm.transaction_id] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, $expr2, transactions_dm.transaction_id ], stream key: [ transactions_dm.transaction_id ] }
    │   └── StreamFilter { predicate: IsNull(transactions_dm.disabled_at) } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id, transactions_dm.disabled_at ], stream key: [ transactions_dm.transaction_id ] }
    │       └── StreamTableScan { table: transactions_dm, columns: [account_id, transaction_valuation_date, transaction_id, disabled_at] } { output: [ transactions_dm.account_id, transactions_dm.transaction_valuation_date, transactions_dm.transaction_id, transactions_dm.disabled_at ], stream key: [ transactions_dm.transaction_id ] }
    │           ├── Upstream { output: [ account_id, transaction_valuation_date, transaction_id, disabled_at ], stream key: [] }
    │           └── BatchPlanNode { output: [ account_id, transaction_valuation_date, transaction_id, disabled_at ], stream key: [] }
    └── MergeExecutor { output: [ $expr3 ], stream key: [] }

Fragment 61646 (Actor 739745)
StreamProject { exprs: [SubtractWithTimeZone(now, '30 days':Interval, 'UTC':Varchar) as $expr3], output_watermarks: [[$expr3]] } { output: [ $expr3 ], stream key: [] }
└── StreamNow { output: [ now ], stream key: [] }

Fragment 61647 (Actor 739746,739747)
StreamLocalityProvider { locality_columns: [account_to_portfolios_dm.account_id] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
└── MergeExecutor { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }

Fragment 61648 (Actor 739751,739750)
StreamProject { exprs: [account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
└── StreamFilter { predicate: IsNull(account_to_portfolios_dm.disabled_at) AND IsNull(account_to_portfolios_dm.effective_end_date) } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.disabled_at, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
    └── StreamTableScan { table: account_to_portfolios_dm, columns: [account_id, portfolio_id, effective_start_date, disabled_at, effective_end_date] } { output: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date, account_to_portfolios_dm.disabled_at, account_to_portfolios_dm.effective_end_date ], stream key: [ account_to_portfolios_dm.account_id, account_to_portfolios_dm.portfolio_id, account_to_portfolios_dm.effective_start_date ] }
        ├── Upstream { output: [ account_id, portfolio_id, effective_start_date, disabled_at, effective_end_date ], stream key: [] }
        └── BatchPlanNode { output: [ account_id, portfolio_id, effective_start_date, disabled_at, effective_end_date ], stream key: [] }

Fragment 61649 (Actor 739748,739749)
StreamLocalityProvider { locality_columns: [opportunity_conditions_mv.activity_name] } { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.as_of_date, $expr4, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.activity_name, opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.as_of_date, $expr4, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }

Fragment 61650 (Actor 739758,739759)
StreamProject { exprs: [opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.as_of_date, (opportunity_conditions_mv.as_of_date - opportunity_conditions_mv.interval_to_check_days) as $expr4, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1] } { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.as_of_date, $expr4, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }
└── MergeExecutor { output: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv.activity_name, opportunity_conditions_mv.op, opportunity_conditions_mv.threshold, opportunity_conditions_mv.interval_to_check_days, opportunity_conditions_mv.as_of_date, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ], stream key: [ opportunity_conditions_mv.opportunity_id, opportunity_conditions_mv._rw_projected_row_id, opportunity_conditions_mv._rw_projected_row_id#1 ] }