Trait datafusion_physical_expr::window::WindowExpr
source · pub trait WindowExpr: Send + Sync + Debug {
Show 13 methods
fn as_any(&self) -> &dyn Any;
fn field(&self) -> Result<Field>;
fn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ;
fn evaluate(&self, batch: &RecordBatch) -> Result<ArrayRef>;
fn partition_by(&self) -> &[Arc<dyn PhysicalExpr>];
fn order_by(&self) -> &[PhysicalSortExpr];
fn name(&self) -> &str { ... }
fn evaluate_args(&self, batch: &RecordBatch) -> Result<Vec<ArrayRef>> { ... }
fn evaluate_partition_points(
&self,
num_rows: usize,
partition_columns: &[SortColumn]
) -> Result<Vec<Range<usize>>> { ... }
fn partition_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>> { ... }
fn order_by_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>> { ... }
fn sort_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>> { ... }
fn get_values_orderbys(
&self,
record_batch: &RecordBatch
) -> Result<(Vec<ArrayRef>, Vec<ArrayRef>)> { ... }
}
Expand description
A window expression that:
- knows its resulting field
Required Methods§
sourcefn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Returns the window expression as Any
so that it can be
downcast to a specific implementation.
sourcefn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
fn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
expressions that are passed to the WindowAccumulator.
Functions which take a single input argument, such as sum
, return a single datafusion_expr::expr::Expr
,
others (e.g. cov
) return many.
sourcefn evaluate(&self, batch: &RecordBatch) -> Result<ArrayRef>
fn evaluate(&self, batch: &RecordBatch) -> Result<ArrayRef>
evaluate the window function values against the batch
sourcefn partition_by(&self) -> &[Arc<dyn PhysicalExpr>]
fn partition_by(&self) -> &[Arc<dyn PhysicalExpr>]
expressions that’s from the window function’s partition by clause, empty if absent
sourcefn order_by(&self) -> &[PhysicalSortExpr]
fn order_by(&self) -> &[PhysicalSortExpr]
expressions that’s from the window function’s order by clause, empty if absent
Provided Methods§
sourcefn name(&self) -> &str
fn name(&self) -> &str
Human readable name such as "MIN(c2)"
or "RANK()"
. The default
implementation returns placeholder text.
sourcefn evaluate_args(&self, batch: &RecordBatch) -> Result<Vec<ArrayRef>>
fn evaluate_args(&self, batch: &RecordBatch) -> Result<Vec<ArrayRef>>
evaluate the window function arguments against the batch and return array ref, normally the resulting vec is a single element one.
sourcefn evaluate_partition_points(
&self,
num_rows: usize,
partition_columns: &[SortColumn]
) -> Result<Vec<Range<usize>>>
fn evaluate_partition_points(
&self,
num_rows: usize,
partition_columns: &[SortColumn]
) -> Result<Vec<Range<usize>>>
evaluate the partition points given the sort columns; if the sort columns are empty then the result will be a single element vec of the whole column rows.
sourcefn partition_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
fn partition_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
get partition columns that can be used for partitioning, empty if absent
sourcefn order_by_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
fn order_by_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
get order by columns, empty if absent
sourcefn sort_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
fn sort_columns(&self, batch: &RecordBatch) -> Result<Vec<SortColumn>>
get sort columns that can be used for peer evaluation, empty if absent
sourcefn get_values_orderbys(
&self,
record_batch: &RecordBatch
) -> Result<(Vec<ArrayRef>, Vec<ArrayRef>)>
fn get_values_orderbys(
&self,
record_batch: &RecordBatch
) -> Result<(Vec<ArrayRef>, Vec<ArrayRef>)>
Get values columns(argument of Window Function) and order by columns (columns of the ORDER BY expression)used in evaluators
Implementors§
impl WindowExpr for AggregateWindowExpr
peer based evaluation based on the fact that batch is pre-sorted given the sort columns and then per partition point we’ll evaluate the peer group (e.g. SUM or MAX gives the same results for peers) and concatenate the results.