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

← cluster insights objects asset_distributions_week_binned_mv explain
Overview Objects Graph History
materialized view · insights.asset_distributions_week_binned_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
27 operators
Materialize · insights.asset_distributions_week_binned_mv
0% idle 2 actors
Project · ($expr1 <= $expr2) AND ($expr2 <= asset_distributions_for_c…
2 actors
Filter · ($expr1 <= $expr2) AND ($expr2 <= asset_distributions_for_c…
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
SyncLogStore · Inner · asset_distributions_for_consumers_mv.asset_id = position_as…
2 actors
HashJoin · Inner · asset_distributions_for_consumers_mv.asset_id = position_as… Stateful hash join (4 state tables) — consider a temporal join for dimension lookups
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project
2 actors
HashAgg Aggregation state — unbounded unless keyed or temporally filtered
0% idle 2 actors
LocalityProvider
0% idle 2 actors
Merge
2 actors
Exchange
0% idle 0 actors
Project · position_asset_values_mv_next
2 actors
StreamScan · position_asset_values_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 · asset_distributions_for_consumers_mv
2 actors
StreamScan · asset_distributions_for_consumers_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.asset_distributions_week_binned_mv Materialize insights.asset_distribu… idle · 2 actors Project · ($expr1 <= $expr2) AND ($expr2 <= asset_distributions_for_c… Project ($expr1 <= $expr2) AND … — · 2 actors Filter · ($expr1 <= $expr2) AND ($expr2 <= asset_distributions_for_c… Filter ($expr1 <= $expr2) AND … idle · 2 actors Merge Merge — · 2 actors Exchange Exchange idle · 0 actors SyncLogStore · Inner · asset_distributions_for_consumers_mv.asset_id = position_as… SyncLogStore Inner · asset_distribut… — · 2 actors HashJoin · Inner · asset_distributions_for_consumers_mv.asset_id = position_as… HashJoin Inner · asset_distribut… 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 Project · position_asset_values_mv_next Project position_asset_values_m… — · 2 actors StreamScan · position_asset_values_mv_next StreamScan position_asset_values_m… 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 · asset_distributions_for_consumers_mv Project asset_distributions_for… — · 2 actors StreamScan · asset_distributions_for_consumers_mv StreamScan asset_distributions_for… 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 19902 (Actor 165986,165987)
StreamMaterialize { columns: [asset_id, distribution_type, effective_start_date, effective_end_date, taxonomy_node_id, taxonomy_code, share, dim_value_week, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id(hidden), asset_distributions_for_consumers_mv.asset_distributions_dm.dimension(hidden), position_asset_values_mv_next.asset_id(hidden)], stream_key: [asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, effective_start_date, dim_value_week], pk_columns: [asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, effective_start_date, dim_value_week], pk_conflict: NoCheck }
├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr2, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id ]
├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]
└── StreamProject { exprs: [asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr2, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id] }
    ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr2, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id ]
    ├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]
    └── StreamFilter { predicate: ($expr1 <= $expr2) AND ($expr2 <= asset_distributions_for_consumers_mv.effective_end_date) }
        ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id, $expr2 ]
        ├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]
        └── MergeExecutor
            ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id, $expr2 ]
            └── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]

Fragment 19903 (Actor 165976,165977)
StreamSyncLogStore
├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id, $expr2 ]
├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]
└── StreamHashJoin { type: Inner, predicate: asset_distributions_for_consumers_mv.asset_id = position_asset_values_mv_next.asset_id }
    ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, position_asset_values_mv_next.asset_id, $expr2 ]
    ├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date, $expr2 ]
    ├── MergeExecutor
    │   ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension ]
    │   └── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date ]
    └── MergeExecutor { output: [ position_asset_values_mv_next.asset_id, $expr2 ], stream key: [ position_asset_values_mv_next.asset_id, $expr2 ] }

Fragment 19904 (Actor 165978,165979)
StreamLocalityProvider { locality_columns: [asset_distributions_for_consumers_mv.asset_id] }
├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension ]
├── stream key: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date ]
└── MergeExecutor
    ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension ]
    └── stream key: [ asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date ]

Fragment 19905 (Actor 165980,165981)
StreamProject { exprs: [asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, AtTimeZone(DateTrunc('WEEK':Varchar, AtTimeZone(asset_distributions_for_consumers_mv.effective_start_date::Timestamp, 'UTC':Varchar), 'UTC':Varchar), 'UTC':Varchar)::Date as $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension] }
├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, $expr1, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension ]
├── stream key: [ asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date ]
└── StreamTableScan { table: asset_distributions_for_consumers_mv, columns: [asset_id, distribution_type, effective_start_date, effective_end_date, taxonomy_node_id, taxonomy_code, share, taxonomy_nodes_dm.dimension_id, asset_distributions_dm.dimension] }
    ├── output: [ asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.distribution_type, asset_distributions_for_consumers_mv.effective_start_date, asset_distributions_for_consumers_mv.effective_end_date, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.taxonomy_code, asset_distributions_for_consumers_mv.share, asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension ]
    ├── stream key: [ asset_distributions_for_consumers_mv.taxonomy_nodes_dm.dimension_id, asset_distributions_for_consumers_mv.taxonomy_node_id, asset_distributions_for_consumers_mv.asset_id, asset_distributions_for_consumers_mv.asset_distributions_dm.dimension, asset_distributions_for_consumers_mv.effective_start_date ]
    ├── Upstream { output: [ asset_id, distribution_type, effective_start_date, effective_end_date, taxonomy_node_id, taxonomy_code, share, taxonomy_nodes_dm.dimension_id, asset_distributions_dm.dimension ], stream key: [] }
    └── BatchPlanNode { output: [ asset_id, distribution_type, effective_start_date, effective_end_date, taxonomy_node_id, taxonomy_code, share, taxonomy_nodes_dm.dimension_id, asset_distributions_dm.dimension ], stream key: [] }

Fragment 19906 (Actor 165983,165982)
StreamProject { exprs: [position_asset_values_mv_next.asset_id, $expr2] } { output: [ position_asset_values_mv_next.asset_id, $expr2 ], stream key: [ position_asset_values_mv_next.asset_id, $expr2 ] }
└── StreamHashAgg { group_key: [position_asset_values_mv_next.asset_id, $expr2], aggs: [count] } { output: [ position_asset_values_mv_next.asset_id, $expr2, count ], stream key: [ position_asset_values_mv_next.asset_id, $expr2 ] }
    └── StreamLocalityProvider { locality_columns: [position_asset_values_mv_next.asset_id, $expr2] }
        ├── output: [ position_asset_values_mv_next.asset_id, $expr2, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
        ├── stream key: [ position_asset_values_mv_next.asset_id, $expr2, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
        └── MergeExecutor { output: [ position_asset_values_mv_next.asset_id, $expr2, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ], stream key: [ position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.asset_id, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ] }

Fragment 19907 (Actor 165985,165984)
StreamProject { exprs: [position_asset_values_mv_next.asset_id, AtTimeZone(DateTrunc('WEEK':Varchar, AtTimeZone(position_asset_values_mv_next.dim_value_date::Timestamp, 'UTC':Varchar), 'UTC':Varchar), 'UTC':Varchar)::Date as $expr2, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag] }
├── output: [ position_asset_values_mv_next.asset_id, $expr2, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
├── stream key: [ position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.asset_id, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
└── StreamTableScan { table: position_asset_values_mv_next, columns: [asset_id, dim_value_date, account_group_id, source_entity_type, group_currency, position_values_mv_next.position_type_expanded, flag] }
    ├── output: [ position_asset_values_mv_next.asset_id, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
    ├── stream key: [ position_asset_values_mv_next.account_group_id, position_asset_values_mv_next.source_entity_type, position_asset_values_mv_next.asset_id, position_asset_values_mv_next.dim_value_date, position_asset_values_mv_next.group_currency, position_asset_values_mv_next.position_values_mv_next.position_type_expanded, position_asset_values_mv_next.flag ]
    ├── Upstream { output: [ asset_id, dim_value_date, account_group_id, source_entity_type, group_currency, position_values_mv_next.position_type_expanded, flag ], stream key: [] }
    └── BatchPlanNode { output: [ asset_id, dim_value_date, account_group_id, source_entity_type, group_currency, position_values_mv_next.position_type_expanded, flag ], stream key: [] }