pub struct AggregateExprBuilder {
fun: Arc<AggregateUDF>,
args: Vec<Arc<dyn PhysicalExpr>>,
alias: Option<String>,
human_display: String,
schema: SchemaRef,
order_bys: Vec<PhysicalSortExpr>,
ignore_nulls: bool,
is_distinct: bool,
is_reversed: bool,
}Expand description
Builder for physical AggregateFunctionExpr
AggregateFunctionExpr contains the information necessary to call
an aggregate expression.
Fields§
§fun: Arc<AggregateUDF>§args: Vec<Arc<dyn PhysicalExpr>>Physical expressions of the aggregate function
alias: Option<String>§human_display: StringA human readable name
schema: SchemaRefArrow Schema for the aggregate function
order_bys: Vec<PhysicalSortExpr>The physical order by expressions
ignore_nulls: boolWhether to ignore null values
is_distinct: boolWhether is distinct aggregate function
is_reversed: boolWhether the expression is reversed
Implementations§
Source§impl AggregateExprBuilder
impl AggregateExprBuilder
pub fn new(fun: Arc<AggregateUDF>, args: Vec<Arc<dyn PhysicalExpr>>) -> Self
Sourcepub fn build(self) -> Result<AggregateFunctionExpr>
pub fn build(self) -> Result<AggregateFunctionExpr>
Constructs an AggregateFunctionExpr from the builder
Note that an Self::alias must be provided before calling this method.
§Example: Create an AggregateUDF
In the following example, AggregateFunctionExpr will be built using AggregateExprBuilder
which provides a build function. Full example could be accessed from the source file.
fn build_aggregate_expr() -> Result<()> {
let args = vec![Arc::new(Column::new("a", 0)) as Arc<dyn PhysicalExpr>];
let order_by = vec![PhysicalSortExpr {
expr: Arc::new(Column::new("x", 1)) as Arc<dyn PhysicalExpr>,
options: Default::default(),
}];
let first_value = AggregateUDF::from(FirstValueUdf::new());
let aggregate_expr = AggregateExprBuilder::new(
Arc::new(first_value),
args
)
.order_by(order_by)
.alias("first_a_by_x")
.ignore_nulls()
.build()?;
Ok(())
}This creates a physical expression equivalent to SQL:
first_value(a ORDER BY x) IGNORE NULLS AS first_a_by_x
pub fn alias(self, alias: impl Into<String>) -> Self
pub fn human_display(self, name: String) -> Self
pub fn schema(self, schema: SchemaRef) -> Self
pub fn order_by(self, order_bys: Vec<PhysicalSortExpr>) -> Self
pub fn reversed(self) -> Self
pub fn with_reversed(self, is_reversed: bool) -> Self
pub fn distinct(self) -> Self
pub fn with_distinct(self, is_distinct: bool) -> Self
pub fn ignore_nulls(self) -> Self
pub fn with_ignore_nulls(self, ignore_nulls: bool) -> Self
Trait Implementations§
Source§impl Clone for AggregateExprBuilder
impl Clone for AggregateExprBuilder
Source§fn clone(&self) -> AggregateExprBuilder
fn clone(&self) -> AggregateExprBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for AggregateExprBuilder
impl !RefUnwindSafe for AggregateExprBuilder
impl Send for AggregateExprBuilder
impl Sync for AggregateExprBuilder
impl Unpin for AggregateExprBuilder
impl !UnwindSafe for AggregateExprBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more