alpass163 opened a new pull request, #16760: URL: https://github.com/apache/iotdb/pull/16760
This PR implements the EXCEPT DISTINCT and EXCEPT ALL operators. This is achieved by introducing two new optimizer rules that translate the ExceptNode into a more fundamental execution plan: (1)ImplementExceptDistinctAsUnion (EXCEPT DISTINCT) This rule translates EXCEPT DISTINCT into a Union + Aggregation + Filter plan. It utilizes SetOperationNodeTranslator to append marker columns, then uses Aggregation (GROUP BY) to count the occurrences of each row in each sub-relation. Finally, a FilterNode selects rows that appear in the first relation (count1 >= 1) but not in any of the subsequent relations (count2...n == 0). (2)ImplementExceptAllAsUnion (EXCEPT ALL) This rule translates EXCEPT ALL into a Union + Window + Filter plan. It uses a Window function to compute the exact occurrence count for each row from each sub-relation (count1, count2...) along with a ROW_NUMBER(). A FilterNode then applies the expression row_number <= greatest(greatest(count1 - count2, 0) - count3...) to precisely implement the bag semantics subtraction required by EXCEPT ALL. The SetOperationNodeTranslator class contains the core, shared logic used by both translation rules. -- 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: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
