diff --git a/datafusion/expr/src/expr.rs b/datafusion/expr/src/expr.rs index ef0187a8782d7..c497e897942fc 100644 --- a/datafusion/expr/src/expr.rs +++ b/datafusion/expr/src/expr.rs @@ -600,7 +600,7 @@ impl Alias { } } -/// Binary expression +/// Binary expression for [`Expr::BinaryExpr`] #[derive(Clone, PartialEq, Eq, PartialOrd, Hash, Debug)] pub struct BinaryExpr { /// Left-hand side of the expression @@ -917,7 +917,7 @@ impl<'a> TreeNodeContainer<'a, Expr> for Sort { } } -/// Aggregate function +/// Aggregate Function /// /// See also [`ExprFunctionExt`] to set these fields on `Expr` /// diff --git a/datafusion/expr/src/function.rs b/datafusion/expr/src/function.rs index 68d2c9073241b..d358497cc11df 100644 --- a/datafusion/expr/src/function.rs +++ b/datafusion/expr/src/function.rs @@ -27,6 +27,8 @@ pub use datafusion_functions_aggregate_common::accumulator::{ AccumulatorArgs, AccumulatorFactoryFunction, StateFieldsArgs, }; +use crate::expr::{AggregateFunction, WindowFunction}; +use crate::simplify::SimplifyContext; pub use datafusion_functions_window_common::expr::ExpressionArgs; pub use datafusion_functions_window_common::field::WindowUDFFieldArgs; pub use datafusion_functions_window_common::partition::PartitionEvaluatorArgs; @@ -64,28 +66,22 @@ pub type PartitionEvaluatorFactory = pub type StateTypeFunction = Arc Result>> + Send + Sync>; -/// [crate::udaf::AggregateUDFImpl::simplify] simplifier closure -/// A closure with two arguments: -/// * 'aggregate_function': [crate::expr::AggregateFunction] for which simplified has been invoked -/// * 'info': [crate::simplify::SimplifyContext] +/// Return type for [crate::udaf::AggregateUDFImpl::simplify] +/// +/// This closure is invoked with two arguments: +/// * 'aggregate_function': [AggregateFunction] with already simplified arguments +/// * 'info': [SimplifyContext] /// /// Closure returns simplified [Expr] or an error. -pub type AggregateFunctionSimplification = Box< - dyn Fn( - crate::expr::AggregateFunction, - &crate::simplify::SimplifyContext, - ) -> Result, ->; +pub type AggregateFunctionSimplification = + Box Result>; -/// [crate::udwf::WindowUDFImpl::simplify] simplifier closure -/// A closure with two arguments: -/// * 'window_function': [crate::expr::WindowFunction] for which simplified has been invoked -/// * 'info': [crate::simplify::SimplifyContext] +/// Return type for [crate::udwf::WindowUDFImpl::simplify] +/// +/// This closure is invoked with two arguments: +/// * 'window_function': [WindowFunction] for which simplified has been invoked +/// * 'info': [SimplifyContext] /// /// Closure returns simplified [Expr] or an error. -pub type WindowFunctionSimplification = Box< - dyn Fn( - crate::expr::WindowFunction, - &crate::simplify::SimplifyContext, - ) -> Result, ->; +pub type WindowFunctionSimplification = + Box Result>; diff --git a/datafusion/expr/src/udaf.rs b/datafusion/expr/src/udaf.rs index ee38077dbf304..06094a8e44001 100644 --- a/datafusion/expr/src/udaf.rs +++ b/datafusion/expr/src/udaf.rs @@ -651,10 +651,10 @@ pub trait AggregateUDFImpl: Debug + DynEq + DynHash + Send + Sync { AggregateOrderSensitivity::HardRequirement } - /// Optionally apply per-UDaF simplification / rewrite rules. + /// Return a closure for simplifying a user defined aggregate. /// /// This can be used to apply function specific simplification rules during - /// optimization (e.g. `arrow_cast` --> `Expr::Cast`). The default + /// optimization (e.g. `percentile_cont(` --> `Min`). The default /// implementation does nothing. /// /// Note that DataFusion handles simplifying arguments and "constant @@ -664,10 +664,11 @@ pub trait AggregateUDFImpl: Debug + DynEq + DynHash + Send + Sync { /// /// # Returns /// - /// [None] if simplify is not defined or, + /// [None] if simplify is not defined /// /// Or, a closure with two arguments: - /// * 'aggregate_function': [AggregateFunction] for which simplified has been invoked + /// * 'aggregate_function': [AggregateFunction], which includes already simplified + /// arguments /// * 'info': [crate::simplify::SimplifyContext] /// /// closure returns simplified [Expr] or an error. diff --git a/datafusion/functions-aggregate/src/sum.rs b/datafusion/functions-aggregate/src/sum.rs index 198ba54adfa2a..1b0d4ca5c2198 100644 --- a/datafusion/functions-aggregate/src/sum.rs +++ b/datafusion/functions-aggregate/src/sum.rs @@ -32,12 +32,16 @@ use datafusion_common::types::{ logical_int64, logical_uint8, logical_uint16, logical_uint32, logical_uint64, }; use datafusion_common::{HashMap, Result, ScalarValue, exec_err, not_impl_err}; -use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs}; +use datafusion_expr::expr::{AggregateFunction, AggregateFunctionParams}; +use datafusion_expr::function::{ + AccumulatorArgs, AggregateFunctionSimplification, StateFieldsArgs, +}; +use datafusion_expr::simplify::SimplifyContext; use datafusion_expr::utils::{AggregateOrderSensitivity, format_state_name}; use datafusion_expr::{ - Accumulator, AggregateUDFImpl, Coercion, Documentation, Expr, GroupsAccumulator, - ReversedUDAF, SetMonotonicity, Signature, TypeSignature, TypeSignatureClass, - Volatility, + Accumulator, AggregateUDFImpl, BinaryExpr, Coercion, Documentation, Expr, + GroupsAccumulator, Operator, ReversedUDAF, SetMonotonicity, Signature, TypeSignature, + TypeSignatureClass, Volatility, }; use datafusion_functions_aggregate_common::aggregate::groups_accumulator::prim_op::PrimitiveGroupsAccumulator; use datafusion_functions_aggregate_common::aggregate::sum_distinct::DistinctSumAccumulator; @@ -54,7 +58,7 @@ make_udaf_expr_and_func!( ); pub fn sum_distinct(expr: Expr) -> Expr { - Expr::AggregateFunction(datafusion_expr::expr::AggregateFunction::new_udf( + Expr::AggregateFunction(AggregateFunction::new_udf( sum_udaf(), vec![expr], true, @@ -346,6 +350,88 @@ impl AggregateUDFImpl for Sum { _ => SetMonotonicity::NotMonotonic, } } + + /// Simplification Rules + fn simplify(&self) -> Option { + Some(Box::new(sum_simplifier)) + } +} + +/// Implement ClickBench Q29 specific optimization: +/// `SUM(arg + constant)` --> `SUM(arg) + constant * COUNT(arg)` +/// +/// Backstory: TODO +/// +fn sum_simplifier(mut agg: AggregateFunction, _info: &SimplifyContext) -> Result { + // Explicitly destructure to ensure we check all relevant fields + let AggregateFunctionParams { + args, + distinct, + filter, + order_by, + null_treatment, + } = &agg.params; + + if *distinct + || filter.is_some() + || !order_by.is_empty() + || null_treatment.is_some() + || args.len() != 1 + { + return Ok(Expr::AggregateFunction(agg)); + } + + // otherwise check the arguments if they are scalar + let (arg, lit) = match SplitResult::new(agg.params.args.swap_remove(0)) { + SplitResult::Original(expr) => { + agg.params.args.push(expr); // put it back + return Ok(Expr::AggregateFunction(agg)); + } + SplitResult::Split { arg, lit } => (arg, lit), + }; + + // Rewrite to SUM(arg) + agg.params.args.push(arg.clone()); + let sum_agg = Expr::AggregateFunction(agg); + + // sum(arg) + scalar * COUNT(arg) + Ok(sum_agg + (lit * crate::count::count(arg))) +} + +/// Result of trying to split an expression into an arg and constant +#[derive(Debug, Clone)] +enum SplitResult { + /// if the expression is either of + /// * ` ` + /// * ` ` + /// + /// When `op` is `+` + Split { arg: Expr, lit: Expr }, + /// If the expression is something else + Original(Expr), +} + +impl SplitResult { + fn new(expr: Expr) -> Self { + let Expr::BinaryExpr(BinaryExpr { left, op, right }) = expr else { + return Self::Original(expr); + }; + if op != Operator::Plus { + return Self::Original(Expr::BinaryExpr(BinaryExpr { left, op, right })); + } + + match (left.as_ref(), right.as_ref()) { + (Expr::Literal(..), _) => Self::Split { + arg: *right, + lit: *left, + }, + (_, Expr::Literal(..)) => Self::Split { + arg: *left, + lit: *right, + }, + _ => Self::Original(Expr::BinaryExpr(BinaryExpr { left, op, right })), + } + } } /// This accumulator computes SUM incrementally diff --git a/datafusion/sqllogictest/test_files/aggregates_simplify.slt b/datafusion/sqllogictest/test_files/aggregates_simplify.slt new file mode 100644 index 0000000000000..c053a8796bd0d --- /dev/null +++ b/datafusion/sqllogictest/test_files/aggregates_simplify.slt @@ -0,0 +1,97 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +####### +# Tests for aggregate optimizations / simplifications +####### + +statement ok +CREATE TABLE sum_simplify_t AS VALUES (1), (2), (NULL); + +####### +# Positive EXPLAIN cases for SUM(arg + literal) simplification +####### + +# Expect to see one COUNT and one SUM in each query below +query TT +EXPLAIN SELECT SUM(column1 + 1), SUM(column1 + 2) FROM sum_simplify_t; +---- +logical_plan +01)Projection: __common_expr_1 + __common_expr_2 AS sum(sum_simplify_t.column1 + Int64(1)), __common_expr_1 + Int64(2) * __common_expr_2 AS sum(sum_simplify_t.column1 + Int64(2)) +02)--Aggregate: groupBy=[[]], aggr=[[sum(sum_simplify_t.column1) AS __common_expr_1, count(sum_simplify_t.column1) AS __common_expr_2]] +03)----TableScan: sum_simplify_t projection=[column1] +physical_plan +01)ProjectionExec: expr=[__common_expr_1@0 + __common_expr_2@1 as sum(sum_simplify_t.column1 + Int64(1)), __common_expr_1@0 + 2 * __common_expr_2@1 as sum(sum_simplify_t.column1 + Int64(2))] +02)--AggregateExec: mode=Single, gby=[], aggr=[__common_expr_1, __common_expr_2] +03)----DataSourceExec: partitions=1, partition_sizes=[1] + +query TT +EXPLAIN SELECT SUM(1 + column1), SUM(column1 + 2) FROM sum_simplify_t; +---- +logical_plan +01)Projection: __common_expr_1 + __common_expr_2 AS sum(Int64(1) + sum_simplify_t.column1), __common_expr_1 + Int64(2) * __common_expr_2 AS sum(sum_simplify_t.column1 + Int64(2)) +02)--Aggregate: groupBy=[[]], aggr=[[sum(sum_simplify_t.column1) AS __common_expr_1, count(sum_simplify_t.column1) AS __common_expr_2]] +03)----TableScan: sum_simplify_t projection=[column1] +physical_plan +01)ProjectionExec: expr=[__common_expr_1@0 + __common_expr_2@1 as sum(Int64(1) + sum_simplify_t.column1), __common_expr_1@0 + 2 * __common_expr_2@1 as sum(sum_simplify_t.column1 + Int64(2))] +02)--AggregateExec: mode=Single, gby=[], aggr=[__common_expr_1, __common_expr_2] +03)----DataSourceExec: partitions=1, partition_sizes=[1] + +####### +# Cases where rewrite should not apply +####### + +query TT +EXPLAIN SELECT SUM(DISTINCT column1 + 1), SUM(DISTINCT column1 + 2) FROM sum_simplify_t; +---- +logical_plan +01)Aggregate: groupBy=[[]], aggr=[[sum(DISTINCT sum_simplify_t.column1 + Int64(1)), sum(DISTINCT sum_simplify_t.column1 + Int64(2))]] +02)--TableScan: sum_simplify_t projection=[column1] +physical_plan +01)AggregateExec: mode=Single, gby=[], aggr=[sum(DISTINCT sum_simplify_t.column1 + Int64(1)), sum(DISTINCT sum_simplify_t.column1 + Int64(2))] +02)--DataSourceExec: partitions=1, partition_sizes=[1] + +query TT +EXPLAIN SELECT SUM(column1 + 1) FILTER (WHERE column1 > 1), SUM(column1 + 2) FILTER (WHERE column1 > 2 ) FROM sum_simplify_t; +---- +logical_plan +01)Aggregate: groupBy=[[]], aggr=[[sum(sum_simplify_t.column1 + Int64(1)) FILTER (WHERE sum_simplify_t.column1 > Int64(1)), sum(sum_simplify_t.column1 + Int64(2)) FILTER (WHERE sum_simplify_t.column1 > Int64(2))]] +02)--TableScan: sum_simplify_t projection=[column1] +physical_plan +01)AggregateExec: mode=Single, gby=[], aggr=[sum(sum_simplify_t.column1 + Int64(1)) FILTER (WHERE sum_simplify_t.column1 > Int64(1)), sum(sum_simplify_t.column1 + Int64(2)) FILTER (WHERE sum_simplify_t.column1 > Int64(2))] +02)--DataSourceExec: partitions=1, partition_sizes=[1] + +# This test should work +query error +SELECT SUM(random() + 1), SUM(random() + 2) FROM sum_simplify_t; + + +####### +# Reproducers for known issues +####### + +# Blocking: single rewritten SUM fails with "Invalid aggregate expression" +query error +SELECT SUM(column1 + 1) FROM sum_simplify_t; + +# Blocking: CSE can fail with "No field named ... Valid fields are __common_expr_1" +query error +SELECT SUM(column1), SUM(column1 + 1) FROM sum_simplify_t; + + +statement ok +DROP TABLE sum_simplify_t; diff --git a/datafusion/sqllogictest/test_files/clickbench.slt b/datafusion/sqllogictest/test_files/clickbench.slt index 10059664adad7..063d39ed0818f 100644 --- a/datafusion/sqllogictest/test_files/clickbench.slt +++ b/datafusion/sqllogictest/test_files/clickbench.slt @@ -795,13 +795,15 @@ query TT EXPLAIN SELECT SUM("ResolutionWidth"), SUM("ResolutionWidth" + 1), SUM("ResolutionWidth" + 2), SUM("ResolutionWidth" + 3), SUM("ResolutionWidth" + 4), SUM("ResolutionWidth" + 5), SUM("ResolutionWidth" + 6), SUM("ResolutionWidth" + 7), SUM("ResolutionWidth" + 8), SUM("ResolutionWidth" + 9), SUM("ResolutionWidth" + 10), SUM("ResolutionWidth" + 11), SUM("ResolutionWidth" + 12), SUM("ResolutionWidth" + 13), SUM("ResolutionWidth" + 14), SUM("ResolutionWidth" + 15), SUM("ResolutionWidth" + 16), SUM("ResolutionWidth" + 17), SUM("ResolutionWidth" + 18), SUM("ResolutionWidth" + 19), SUM("ResolutionWidth" + 20), SUM("ResolutionWidth" + 21), SUM("ResolutionWidth" + 22), SUM("ResolutionWidth" + 23), SUM("ResolutionWidth" + 24), SUM("ResolutionWidth" + 25), SUM("ResolutionWidth" + 26), SUM("ResolutionWidth" + 27), SUM("ResolutionWidth" + 28), SUM("ResolutionWidth" + 29), SUM("ResolutionWidth" + 30), SUM("ResolutionWidth" + 31), SUM("ResolutionWidth" + 32), SUM("ResolutionWidth" + 33), SUM("ResolutionWidth" + 34), SUM("ResolutionWidth" + 35), SUM("ResolutionWidth" + 36), SUM("ResolutionWidth" + 37), SUM("ResolutionWidth" + 38), SUM("ResolutionWidth" + 39), SUM("ResolutionWidth" + 40), SUM("ResolutionWidth" + 41), SUM("ResolutionWidth" + 42), SUM("ResolutionWidth" + 43), SUM("ResolutionWidth" + 44), SUM("ResolutionWidth" + 45), SUM("ResolutionWidth" + 46), SUM("ResolutionWidth" + 47), SUM("ResolutionWidth" + 48), SUM("ResolutionWidth" + 49), SUM("ResolutionWidth" + 50), SUM("ResolutionWidth" + 51), SUM("ResolutionWidth" + 52), SUM("ResolutionWidth" + 53), SUM("ResolutionWidth" + 54), SUM("ResolutionWidth" + 55), SUM("ResolutionWidth" + 56), SUM("ResolutionWidth" + 57), SUM("ResolutionWidth" + 58), SUM("ResolutionWidth" + 59), SUM("ResolutionWidth" + 60), SUM("ResolutionWidth" + 61), SUM("ResolutionWidth" + 62), SUM("ResolutionWidth" + 63), SUM("ResolutionWidth" + 64), SUM("ResolutionWidth" + 65), SUM("ResolutionWidth" + 66), SUM("ResolutionWidth" + 67), SUM("ResolutionWidth" + 68), SUM("ResolutionWidth" + 69), SUM("ResolutionWidth" + 70), SUM("ResolutionWidth" + 71), SUM("ResolutionWidth" + 72), SUM("ResolutionWidth" + 73), SUM("ResolutionWidth" + 74), SUM("ResolutionWidth" + 75), SUM("ResolutionWidth" + 76), SUM("ResolutionWidth" + 77), SUM("ResolutionWidth" + 78), SUM("ResolutionWidth" + 79), SUM("ResolutionWidth" + 80), SUM("ResolutionWidth" + 81), SUM("ResolutionWidth" + 82), SUM("ResolutionWidth" + 83), SUM("ResolutionWidth" + 84), SUM("ResolutionWidth" + 85), SUM("ResolutionWidth" + 86), SUM("ResolutionWidth" + 87), SUM("ResolutionWidth" + 88), SUM("ResolutionWidth" + 89) FROM hits; ---- logical_plan -01)Aggregate: groupBy=[[]], aggr=[[sum(__common_expr_1 AS hits.ResolutionWidth), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(1)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(2)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(3)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(4)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(5)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(6)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(7)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(8)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(9)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(10)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(11)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(12)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(13)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(14)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(15)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(16)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(17)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(18)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(19)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(20)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(21)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(22)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(23)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(24)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(25)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(26)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(27)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(28)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(29)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(30)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(31)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(32)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(33)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(34)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(35)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(36)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(37)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(38)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(39)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(40)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(41)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(42)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(43)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(44)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(45)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(46)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(47)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(48)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(49)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(50)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(51)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(52)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(53)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(54)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(55)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(56)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(57)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(58)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(59)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(60)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(61)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(62)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(63)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(64)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(65)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(66)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(67)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(68)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(69)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(70)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(71)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(72)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(73)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(74)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(75)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(76)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(77)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(78)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(79)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(80)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(81)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(82)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(83)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(84)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(85)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(86)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(87)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(88)), sum(__common_expr_1 AS hits.ResolutionWidth + Int64(89))]] -02)--Projection: CAST(hits.ResolutionWidth AS Int64) AS __common_expr_1 -03)----SubqueryAlias: hits -04)------TableScan: hits_raw projection=[ResolutionWidth] +01)Projection: __common_expr_4 AS sum(hits.ResolutionWidth), __common_expr_2 + __common_expr_3 AS sum(hits.ResolutionWidth + Int64(1)), __common_expr_2 + Int64(2) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(2)), __common_expr_2 + Int64(3) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(3)), __common_expr_2 + Int64(4) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(4)), __common_expr_2 + Int64(5) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(5)), __common_expr_2 + Int64(6) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(6)), __common_expr_2 + Int64(7) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(7)), __common_expr_2 + Int64(8) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(8)), __common_expr_2 + Int64(9) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(9)), __common_expr_2 + Int64(10) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(10)), __common_expr_2 + Int64(11) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(11)), __common_expr_2 + Int64(12) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(12)), __common_expr_2 + Int64(13) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(13)), __common_expr_2 + Int64(14) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(14)), __common_expr_2 + Int64(15) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(15)), __common_expr_2 + Int64(16) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(16)), __common_expr_2 + Int64(17) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(17)), __common_expr_2 + Int64(18) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(18)), __common_expr_2 + Int64(19) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(19)), __common_expr_2 + Int64(20) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(20)), __common_expr_2 + Int64(21) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(21)), __common_expr_2 + Int64(22) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(22)), __common_expr_2 + Int64(23) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(23)), __common_expr_2 + Int64(24) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(24)), __common_expr_2 + Int64(25) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(25)), __common_expr_2 + Int64(26) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(26)), __common_expr_2 + Int64(27) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(27)), __common_expr_2 + Int64(28) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(28)), __common_expr_2 + Int64(29) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(29)), __common_expr_2 + Int64(30) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(30)), __common_expr_2 + Int64(31) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(31)), __common_expr_2 + Int64(32) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(32)), __common_expr_2 + Int64(33) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(33)), __common_expr_2 + Int64(34) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(34)), __common_expr_2 + Int64(35) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(35)), __common_expr_2 + Int64(36) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(36)), __common_expr_2 + Int64(37) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(37)), __common_expr_2 + Int64(38) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(38)), __common_expr_2 + Int64(39) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(39)), __common_expr_2 + Int64(40) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(40)), __common_expr_2 + Int64(41) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(41)), __common_expr_2 + Int64(42) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(42)), __common_expr_2 + Int64(43) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(43)), __common_expr_2 + Int64(44) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(44)), __common_expr_2 + Int64(45) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(45)), __common_expr_2 + Int64(46) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(46)), __common_expr_2 + Int64(47) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(47)), __common_expr_2 + Int64(48) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(48)), __common_expr_2 + Int64(49) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(49)), __common_expr_2 + Int64(50) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(50)), __common_expr_2 + Int64(51) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(51)), __common_expr_2 + Int64(52) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(52)), __common_expr_2 + Int64(53) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(53)), __common_expr_2 + Int64(54) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(54)), __common_expr_2 + Int64(55) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(55)), __common_expr_2 + Int64(56) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(56)), __common_expr_2 + Int64(57) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(57)), __common_expr_2 + Int64(58) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(58)), __common_expr_2 + Int64(59) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(59)), __common_expr_2 + Int64(60) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(60)), __common_expr_2 + Int64(61) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(61)), __common_expr_2 + Int64(62) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(62)), __common_expr_2 + Int64(63) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(63)), __common_expr_2 + Int64(64) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(64)), __common_expr_2 + Int64(65) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(65)), __common_expr_2 + Int64(66) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(66)), __common_expr_2 + Int64(67) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(67)), __common_expr_2 + Int64(68) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(68)), __common_expr_2 + Int64(69) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(69)), __common_expr_2 + Int64(70) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(70)), __common_expr_2 + Int64(71) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(71)), __common_expr_2 + Int64(72) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(72)), __common_expr_2 + Int64(73) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(73)), __common_expr_2 + Int64(74) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(74)), __common_expr_2 + Int64(75) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(75)), __common_expr_2 + Int64(76) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(76)), __common_expr_2 + Int64(77) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(77)), __common_expr_2 + Int64(78) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(78)), __common_expr_2 + Int64(79) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(79)), __common_expr_2 + Int64(80) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(80)), __common_expr_2 + Int64(81) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(81)), __common_expr_2 + Int64(82) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(82)), __common_expr_2 + Int64(83) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(83)), __common_expr_2 + Int64(84) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(84)), __common_expr_2 + Int64(85) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(85)), __common_expr_2 + Int64(86) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(86)), __common_expr_2 + Int64(87) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(87)), __common_expr_2 + Int64(88) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(88)), __common_expr_2 + Int64(89) * __common_expr_3 AS sum(hits.ResolutionWidth + Int64(89)) +02)--Aggregate: groupBy=[[]], aggr=[[sum(__common_expr_1) AS __common_expr_2, count(__common_expr_1) AS __common_expr_3, sum(__common_expr_1 AS hits.ResolutionWidth) AS __common_expr_4]] +03)----Projection: CAST(hits.ResolutionWidth AS Int64) AS __common_expr_1 +04)------SubqueryAlias: hits +05)--------TableScan: hits_raw projection=[ResolutionWidth] physical_plan -01)AggregateExec: mode=Single, gby=[], aggr=[sum(hits.ResolutionWidth), sum(hits.ResolutionWidth + Int64(1)), sum(hits.ResolutionWidth + Int64(2)), sum(hits.ResolutionWidth + Int64(3)), sum(hits.ResolutionWidth + Int64(4)), sum(hits.ResolutionWidth + Int64(5)), sum(hits.ResolutionWidth + Int64(6)), sum(hits.ResolutionWidth + Int64(7)), sum(hits.ResolutionWidth + Int64(8)), sum(hits.ResolutionWidth + Int64(9)), sum(hits.ResolutionWidth + Int64(10)), sum(hits.ResolutionWidth + Int64(11)), sum(hits.ResolutionWidth + Int64(12)), sum(hits.ResolutionWidth + Int64(13)), sum(hits.ResolutionWidth + Int64(14)), sum(hits.ResolutionWidth + Int64(15)), sum(hits.ResolutionWidth + Int64(16)), sum(hits.ResolutionWidth + Int64(17)), sum(hits.ResolutionWidth + Int64(18)), sum(hits.ResolutionWidth + Int64(19)), sum(hits.ResolutionWidth + Int64(20)), sum(hits.ResolutionWidth + Int64(21)), sum(hits.ResolutionWidth + Int64(22)), sum(hits.ResolutionWidth + Int64(23)), sum(hits.ResolutionWidth + Int64(24)), sum(hits.ResolutionWidth + Int64(25)), sum(hits.ResolutionWidth + Int64(26)), sum(hits.ResolutionWidth + Int64(27)), sum(hits.ResolutionWidth + Int64(28)), sum(hits.ResolutionWidth + Int64(29)), sum(hits.ResolutionWidth + Int64(30)), sum(hits.ResolutionWidth + Int64(31)), sum(hits.ResolutionWidth + Int64(32)), sum(hits.ResolutionWidth + Int64(33)), sum(hits.ResolutionWidth + Int64(34)), sum(hits.ResolutionWidth + Int64(35)), sum(hits.ResolutionWidth + Int64(36)), sum(hits.ResolutionWidth + Int64(37)), sum(hits.ResolutionWidth + Int64(38)), sum(hits.ResolutionWidth + Int64(39)), sum(hits.ResolutionWidth + Int64(40)), sum(hits.ResolutionWidth + Int64(41)), sum(hits.ResolutionWidth + Int64(42)), sum(hits.ResolutionWidth + Int64(43)), sum(hits.ResolutionWidth + Int64(44)), sum(hits.ResolutionWidth + Int64(45)), sum(hits.ResolutionWidth + Int64(46)), sum(hits.ResolutionWidth + Int64(47)), sum(hits.ResolutionWidth + Int64(48)), sum(hits.ResolutionWidth + Int64(49)), sum(hits.ResolutionWidth + Int64(50)), sum(hits.ResolutionWidth + Int64(51)), sum(hits.ResolutionWidth + Int64(52)), sum(hits.ResolutionWidth + Int64(53)), sum(hits.ResolutionWidth + Int64(54)), sum(hits.ResolutionWidth + Int64(55)), sum(hits.ResolutionWidth + Int64(56)), sum(hits.ResolutionWidth + Int64(57)), sum(hits.ResolutionWidth + Int64(58)), sum(hits.ResolutionWidth + Int64(59)), sum(hits.ResolutionWidth + Int64(60)), sum(hits.ResolutionWidth + Int64(61)), sum(hits.ResolutionWidth + Int64(62)), sum(hits.ResolutionWidth + Int64(63)), sum(hits.ResolutionWidth + Int64(64)), sum(hits.ResolutionWidth + Int64(65)), sum(hits.ResolutionWidth + Int64(66)), sum(hits.ResolutionWidth + Int64(67)), sum(hits.ResolutionWidth + Int64(68)), sum(hits.ResolutionWidth + Int64(69)), sum(hits.ResolutionWidth + Int64(70)), sum(hits.ResolutionWidth + Int64(71)), sum(hits.ResolutionWidth + Int64(72)), sum(hits.ResolutionWidth + Int64(73)), sum(hits.ResolutionWidth + Int64(74)), sum(hits.ResolutionWidth + Int64(75)), sum(hits.ResolutionWidth + Int64(76)), sum(hits.ResolutionWidth + Int64(77)), sum(hits.ResolutionWidth + Int64(78)), sum(hits.ResolutionWidth + Int64(79)), sum(hits.ResolutionWidth + Int64(80)), sum(hits.ResolutionWidth + Int64(81)), sum(hits.ResolutionWidth + Int64(82)), sum(hits.ResolutionWidth + Int64(83)), sum(hits.ResolutionWidth + Int64(84)), sum(hits.ResolutionWidth + Int64(85)), sum(hits.ResolutionWidth + Int64(86)), sum(hits.ResolutionWidth + Int64(87)), sum(hits.ResolutionWidth + Int64(88)), sum(hits.ResolutionWidth + Int64(89))] -02)--DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/clickbench_hits_10.parquet]]}, projection=[CAST(ResolutionWidth@20 AS Int64) as __common_expr_1], file_type=parquet +01)ProjectionExec: expr=[__common_expr_4@2 as sum(hits.ResolutionWidth), __common_expr_2@0 + __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(1)), __common_expr_2@0 + 2 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(2)), __common_expr_2@0 + 3 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(3)), __common_expr_2@0 + 4 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(4)), __common_expr_2@0 + 5 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(5)), __common_expr_2@0 + 6 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(6)), __common_expr_2@0 + 7 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(7)), __common_expr_2@0 + 8 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(8)), __common_expr_2@0 + 9 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(9)), __common_expr_2@0 + 10 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(10)), __common_expr_2@0 + 11 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(11)), __common_expr_2@0 + 12 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(12)), __common_expr_2@0 + 13 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(13)), __common_expr_2@0 + 14 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(14)), __common_expr_2@0 + 15 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(15)), __common_expr_2@0 + 16 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(16)), __common_expr_2@0 + 17 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(17)), __common_expr_2@0 + 18 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(18)), __common_expr_2@0 + 19 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(19)), __common_expr_2@0 + 20 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(20)), __common_expr_2@0 + 21 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(21)), __common_expr_2@0 + 22 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(22)), __common_expr_2@0 + 23 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(23)), __common_expr_2@0 + 24 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(24)), __common_expr_2@0 + 25 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(25)), __common_expr_2@0 + 26 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(26)), __common_expr_2@0 + 27 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(27)), __common_expr_2@0 + 28 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(28)), __common_expr_2@0 + 29 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(29)), __common_expr_2@0 + 30 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(30)), __common_expr_2@0 + 31 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(31)), __common_expr_2@0 + 32 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(32)), __common_expr_2@0 + 33 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(33)), __common_expr_2@0 + 34 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(34)), __common_expr_2@0 + 35 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(35)), __common_expr_2@0 + 36 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(36)), __common_expr_2@0 + 37 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(37)), __common_expr_2@0 + 38 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(38)), __common_expr_2@0 + 39 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(39)), __common_expr_2@0 + 40 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(40)), __common_expr_2@0 + 41 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(41)), __common_expr_2@0 + 42 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(42)), __common_expr_2@0 + 43 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(43)), __common_expr_2@0 + 44 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(44)), __common_expr_2@0 + 45 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(45)), __common_expr_2@0 + 46 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(46)), __common_expr_2@0 + 47 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(47)), __common_expr_2@0 + 48 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(48)), __common_expr_2@0 + 49 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(49)), __common_expr_2@0 + 50 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(50)), __common_expr_2@0 + 51 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(51)), __common_expr_2@0 + 52 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(52)), __common_expr_2@0 + 53 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(53)), __common_expr_2@0 + 54 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(54)), __common_expr_2@0 + 55 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(55)), __common_expr_2@0 + 56 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(56)), __common_expr_2@0 + 57 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(57)), __common_expr_2@0 + 58 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(58)), __common_expr_2@0 + 59 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(59)), __common_expr_2@0 + 60 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(60)), __common_expr_2@0 + 61 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(61)), __common_expr_2@0 + 62 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(62)), __common_expr_2@0 + 63 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(63)), __common_expr_2@0 + 64 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(64)), __common_expr_2@0 + 65 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(65)), __common_expr_2@0 + 66 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(66)), __common_expr_2@0 + 67 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(67)), __common_expr_2@0 + 68 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(68)), __common_expr_2@0 + 69 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(69)), __common_expr_2@0 + 70 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(70)), __common_expr_2@0 + 71 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(71)), __common_expr_2@0 + 72 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(72)), __common_expr_2@0 + 73 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(73)), __common_expr_2@0 + 74 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(74)), __common_expr_2@0 + 75 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(75)), __common_expr_2@0 + 76 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(76)), __common_expr_2@0 + 77 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(77)), __common_expr_2@0 + 78 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(78)), __common_expr_2@0 + 79 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(79)), __common_expr_2@0 + 80 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(80)), __common_expr_2@0 + 81 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(81)), __common_expr_2@0 + 82 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(82)), __common_expr_2@0 + 83 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(83)), __common_expr_2@0 + 84 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(84)), __common_expr_2@0 + 85 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(85)), __common_expr_2@0 + 86 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(86)), __common_expr_2@0 + 87 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(87)), __common_expr_2@0 + 88 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(88)), __common_expr_2@0 + 89 * __common_expr_3@1 as sum(hits.ResolutionWidth + Int64(89))] +02)--AggregateExec: mode=Single, gby=[], aggr=[__common_expr_2, __common_expr_3, __common_expr_4] +03)----DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/clickbench_hits_10.parquet]]}, projection=[CAST(ResolutionWidth@20 AS Int64) as __common_expr_1], file_type=parquet query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII SELECT SUM("ResolutionWidth"), SUM("ResolutionWidth" + 1), SUM("ResolutionWidth" + 2), SUM("ResolutionWidth" + 3), SUM("ResolutionWidth" + 4), SUM("ResolutionWidth" + 5), SUM("ResolutionWidth" + 6), SUM("ResolutionWidth" + 7), SUM("ResolutionWidth" + 8), SUM("ResolutionWidth" + 9), SUM("ResolutionWidth" + 10), SUM("ResolutionWidth" + 11), SUM("ResolutionWidth" + 12), SUM("ResolutionWidth" + 13), SUM("ResolutionWidth" + 14), SUM("ResolutionWidth" + 15), SUM("ResolutionWidth" + 16), SUM("ResolutionWidth" + 17), SUM("ResolutionWidth" + 18), SUM("ResolutionWidth" + 19), SUM("ResolutionWidth" + 20), SUM("ResolutionWidth" + 21), SUM("ResolutionWidth" + 22), SUM("ResolutionWidth" + 23), SUM("ResolutionWidth" + 24), SUM("ResolutionWidth" + 25), SUM("ResolutionWidth" + 26), SUM("ResolutionWidth" + 27), SUM("ResolutionWidth" + 28), SUM("ResolutionWidth" + 29), SUM("ResolutionWidth" + 30), SUM("ResolutionWidth" + 31), SUM("ResolutionWidth" + 32), SUM("ResolutionWidth" + 33), SUM("ResolutionWidth" + 34), SUM("ResolutionWidth" + 35), SUM("ResolutionWidth" + 36), SUM("ResolutionWidth" + 37), SUM("ResolutionWidth" + 38), SUM("ResolutionWidth" + 39), SUM("ResolutionWidth" + 40), SUM("ResolutionWidth" + 41), SUM("ResolutionWidth" + 42), SUM("ResolutionWidth" + 43), SUM("ResolutionWidth" + 44), SUM("ResolutionWidth" + 45), SUM("ResolutionWidth" + 46), SUM("ResolutionWidth" + 47), SUM("ResolutionWidth" + 48), SUM("ResolutionWidth" + 49), SUM("ResolutionWidth" + 50), SUM("ResolutionWidth" + 51), SUM("ResolutionWidth" + 52), SUM("ResolutionWidth" + 53), SUM("ResolutionWidth" + 54), SUM("ResolutionWidth" + 55), SUM("ResolutionWidth" + 56), SUM("ResolutionWidth" + 57), SUM("ResolutionWidth" + 58), SUM("ResolutionWidth" + 59), SUM("ResolutionWidth" + 60), SUM("ResolutionWidth" + 61), SUM("ResolutionWidth" + 62), SUM("ResolutionWidth" + 63), SUM("ResolutionWidth" + 64), SUM("ResolutionWidth" + 65), SUM("ResolutionWidth" + 66), SUM("ResolutionWidth" + 67), SUM("ResolutionWidth" + 68), SUM("ResolutionWidth" + 69), SUM("ResolutionWidth" + 70), SUM("ResolutionWidth" + 71), SUM("ResolutionWidth" + 72), SUM("ResolutionWidth" + 73), SUM("ResolutionWidth" + 74), SUM("ResolutionWidth" + 75), SUM("ResolutionWidth" + 76), SUM("ResolutionWidth" + 77), SUM("ResolutionWidth" + 78), SUM("ResolutionWidth" + 79), SUM("ResolutionWidth" + 80), SUM("ResolutionWidth" + 81), SUM("ResolutionWidth" + 82), SUM("ResolutionWidth" + 83), SUM("ResolutionWidth" + 84), SUM("ResolutionWidth" + 85), SUM("ResolutionWidth" + 86), SUM("ResolutionWidth" + 87), SUM("ResolutionWidth" + 88), SUM("ResolutionWidth" + 89) FROM hits;