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

← cluster insights objects private_asset_valuations_mv explain
Overview Objects Graph History
materialized view · insights.private_asset_valuations_mv profiled over 5s
seconds (1–30)

Job is idle — throughput ~0; structure shown.

Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
46 operators
Materialize · insights.private_asset_valuations_mv
0% idle 2 actors
Project · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(…
2 actors
Filter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · $expr1 = fx_rates_snapshot_mv_next.source_currency_code
2 actors
HashJoin · LeftOuter · $expr1 = fx_rates_snapshot_mv_next.source_currency_code 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
Filter · fx_rates_snapshot_mv_next
0% idle 2 actors
StreamScan · fx_rates_snapshot_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
Project · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as…
2 actors
Filter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · LeftOuter · private_asset_valuations_ft.market_value_currency = fx_rate…
2 actors
HashJoin · LeftOuter · private_asset_valuations_ft.market_value_currency = fx_rate… 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
Filter · fx_rates_snapshot_mv_next
0% idle 2 actors
StreamScan · fx_rates_snapshot_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
Project · private_asset_valuations_ft
2 actors
Filter · private_asset_valuations_ft
0% idle 2 actors
StreamScan · private_asset_valuations_ft
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.private_asset_valuations_mv Materialize insights.private_asset_… idle · 2 actors Project · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… Project ((Not(IsNull(fx_rates_s… — · 2 actors Filter · ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(… Filter ((Not(IsNull(fx_rates_s… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · $expr1 = fx_rates_snapshot_mv_next.source_currency_code SyncLogStore LeftOuter · $expr1 = fx… — · 2 actors HashJoin · LeftOuter · $expr1 = fx_rates_snapshot_mv_next.source_currency_code HashJoin LeftOuter · $expr1 = fx… 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 Filter · fx_rates_snapshot_mv_next Filter fx_rates_snapshot_mv_ne… idle · 2 actors StreamScan · fx_rates_snapshot_mv_next StreamScan fx_rates_snapshot_mv_ne… 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 · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… Project (Not(IsNull(fx_rates_sn… — · 2 actors Filter · (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_as… Filter (Not(IsNull(fx_rates_sn… idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · LeftOuter · private_asset_valuations_ft.market_value_currency = fx_rate… SyncLogStore LeftOuter · private_ass… — · 2 actors HashJoin · LeftOuter · private_asset_valuations_ft.market_value_currency = fx_rate… HashJoin LeftOuter · private_ass… 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 Filter · fx_rates_snapshot_mv_next Filter fx_rates_snapshot_mv_ne… idle · 2 actors StreamScan · fx_rates_snapshot_mv_next StreamScan fx_rates_snapshot_mv_ne… 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 · private_asset_valuations_ft Project private_asset_valuation… — · 2 actors Filter · private_asset_valuations_ft Filter private_asset_valuation… idle · 2 actors StreamScan · private_asset_valuations_ft StreamScan private_asset_valuation… 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 62593 (Actor 743752,743751)
StreamMaterialize { columns: [asset_id, fact_date, market_value_currency, value_system_currency, cost_system_currency, $expr1(hidden), private_asset_valuations_ft.id(hidden), fx_rates_snapshot_mv_next.target_currency_code(hidden), fx_rates_snapshot_mv_next.target_currency_code#1(hidden)], stream_key: [$expr1, market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code#1], pk_columns: [$expr1, market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code#1], pk_conflict: NoCheck }
├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, $expr2, $expr3, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
├── stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
└── StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, (private_asset_valuations_ft.market_value * Coalesce(fx_rates_snapshot_mv_next.rate, Case((private_asset_valuations_ft.market_value_currency = 'SAR':Varchar), 1:Int32, null:Int32)::Decimal)) as $expr2, Case((Coalesce(private_asset_valuations_ft.average_cost, 0:Decimal) = 0:Decimal), 0:Decimal, (private_asset_valuations_ft.average_cost * Coalesce(fx_rates_snapshot_mv_next.rate, Case((Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) = 'SAR':Varchar), 1:Int32, null:Int32)::Decimal))) as $expr3, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code] }
    ├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value_currency, $expr2, $expr3, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
    ├── stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
    └── StreamFilter { predicate: ((Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) = 'SAR':Varchar)) OR (Coalesce(private_asset_valuations_ft.average_cost, 0:Decimal) = 0:Decimal)) }
        ├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
        ├── stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ]
        └── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62594 (Actor 743753,743754)
StreamSyncLogStore { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── StreamHashJoin { type: LeftOuter, predicate: $expr1 = fx_rates_snapshot_mv_next.source_currency_code } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
    ├── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }
    └── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62595 (Actor 743758,743757)
StreamLocalityProvider { locality_columns: [$expr1] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ $expr1, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }
└── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62596 (Actor 743760,743759)
StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, Coalesce(private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.market_value_currency) as $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code] }
├── output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, $expr1, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ]
├── stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ]
└── StreamFilter { predicate: (Not(IsNull(fx_rates_snapshot_mv_next.rate)) OR (private_asset_valuations_ft.market_value_currency = 'SAR':Varchar)) } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }
    └── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62597 (Actor 743761,743762)
StreamSyncLogStore { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }
└── StreamHashJoin { type: LeftOuter, predicate: private_asset_valuations_ft.market_value_currency = fx_rates_snapshot_mv_next.source_currency_code } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, fx_rates_snapshot_mv_next.rate, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id, fx_rates_snapshot_mv_next.target_currency_code ] }
    ├── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id ] }
    └── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62598 (Actor 743764,743763)
StreamLocalityProvider { locality_columns: [private_asset_valuations_ft.market_value_currency] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.id ] }
└── MergeExecutor { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.id ] }

Fragment 62599 (Actor 743699,743700)
StreamProject { exprs: [private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id ], stream key: [ private_asset_valuations_ft.id ] }
└── StreamFilter { predicate: IsNull(private_asset_valuations_ft.disabled_at) } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id, private_asset_valuations_ft.disabled_at ], stream key: [ private_asset_valuations_ft.id ] }
    └── StreamTableScan { table: private_asset_valuations_ft, columns: [asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at] } { output: [ private_asset_valuations_ft.asset_id, private_asset_valuations_ft.fact_date, private_asset_valuations_ft.market_value, private_asset_valuations_ft.market_value_currency, private_asset_valuations_ft.average_cost, private_asset_valuations_ft.average_cost_currency, private_asset_valuations_ft.id, private_asset_valuations_ft.disabled_at ], stream key: [ private_asset_valuations_ft.id ] }
        ├── Upstream { output: [ asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at ], stream key: [] }
        └── BatchPlanNode { output: [ asset_id, fact_date, market_value, market_value_currency, average_cost, average_cost_currency, id, disabled_at ], stream key: [] }

Fragment 62600 (Actor 743765,743766)
StreamLocalityProvider { locality_columns: [fx_rates_snapshot_mv_next.source_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62601 (Actor 743702,743701)
StreamFilter { predicate: (fx_rates_snapshot_mv_next.target_currency_code = 'SAR':Varchar) } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, rate, target_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
    ├── Upstream { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }
    └── BatchPlanNode { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }

Fragment 62602 (Actor 743767,743768)
StreamLocalityProvider { locality_columns: [fx_rates_snapshot_mv_next.source_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── MergeExecutor { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }

Fragment 62603 (Actor 743704,743703)
StreamFilter { predicate: (fx_rates_snapshot_mv_next.target_currency_code = 'SAR':Varchar) } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
└── StreamTableScan { table: fx_rates_snapshot_mv_next, columns: [source_currency_code, rate, target_currency_code] } { output: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.rate, fx_rates_snapshot_mv_next.target_currency_code ], stream key: [ fx_rates_snapshot_mv_next.source_currency_code, fx_rates_snapshot_mv_next.target_currency_code ] }
    ├── Upstream { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }
    └── BatchPlanNode { output: [ source_currency_code, rate, target_currency_code ], stream key: [] }