alamb commented on issue #6747: URL: https://github.com/apache/datafusion/issues/6747#issuecomment-2090260284
Here is another example from https://github.com/apache/datafusion/pull/10345 / @timsaucer showing how non easy it is to create a window function via the expr API ```rust use datafusion::{logical_expr::{expr::WindowFunction, BuiltInWindowFunction, WindowFrame, WindowFunctionDefinition}, prelude::*}; #[tokio::main] async fn main() -> datafusion::error::Result<()> { let ctx = SessionContext::new(); let mut df = ctx.read_csv("/Users/tsaucer/working/testing_ballista/lead_lag/example.csv", CsvReadOptions::default()).await?; df = df.with_column("array_col", make_array(vec![col("a"), col("b"), col("c")]))?; df.clone().show().await?; let lag_expr = Expr::WindowFunction(WindowFunction::new( WindowFunctionDefinition::BuiltInWindowFunction( BuiltInWindowFunction::Lead, ), vec![col("array_col")], vec![], vec![], WindowFrame::new(None), None, )); df = df.select(vec![col("a"), col("b"), col("c"), col("array_col"), lag_expr.alias("lagged")])?; df.show().await?; Ok(()) } ``` It would be great if instead of ```rust let lag_expr = Expr::WindowFunction(WindowFunction::new( WindowFunctionDefinition::BuiltInWindowFunction( BuiltInWindowFunction::Lead, ), vec![col("array_col")], vec![], vec![], WindowFrame::new(None), None, )); ``` It looked more like ```rust let lag_expr = lead( vec![col("array_col")], vec![], vec![], WindowFrame::new(None), None, )); ``` Maybe even better like a builder style ```rust let lag_expr = lead(col("array_col")).build() ``` Which would permit adding the various `OVER` clauses like ```rust let lag_expr = lead(col("array_col")) .partition_by(vec![]) .order_by(vec![]) .build() ``` Maybe there are some inspirations in the polars API too: https://docs.pola.rs/user-guide/expressions/window/#group-by-aggregations-in-selection -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org