cshuo opened a new pull request #1835: [CALCITE-3830] The ‘approximate’ field should be considered when computing the digest of AggregateCall URL: https://github.com/apache/calcite/pull/1835 In planner optimization, the digest of Aggregate node contains digest of its AggregateCall, i.e. Aggregate.toString, but currently 'approximate' filed of AggregateCall is not considered in toString() method, which may lead to the situation two different relNodes are considered as identical in planner optimizing phase. Here is an example: ```sql select * from ( select a, count(distinct b) from T group by a union all select a, approx_count_distinct(b) from T group by a ) ``` After applying a rule, the plan is: ```sql LogicalSink(name=[_DataStreamTable_1], fields=[a, EXPR$1], __id__=[96]) +- LogicalProject(a=[$0], EXPR$1=[$1], __id__=[94]) +- LogicalUnion(all=[true], __id__=[92]) :- LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], __id__=[89]) : +- LogicalTableScan(table=[[default, _DataStreamTable_2]], __id__=[100]) +- LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], __id__=[89]) +- LogicalTableScan(table=[[default, _DataStreamTable_2]], __id__=[100]) ``` As showing in the example, after optimizing, these two Aggregates are considered as identical (both with 89 as relNode ID).
---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
