mustafasrepo opened a new issue, #6159:
URL: https://github.com/apache/arrow-datafusion/issues/6159

   ### Is your feature request related to a problem or challenge?
   
   Datafusion can detect aliased columns (exactly same columns). This enables 
us to do additional optimizations during planning. However, same thing cannot 
be done in terms of ordering. 
   Consider query below
   ```sql
   (SELECT c9,
                      ROW_NUMBER() OVER(ORDER BY c9 ASC) as rn1
                      FROM aggregate_test_100
                      ORDER BY c9 ASC)
   ```
   Output of this query would satisfy `c9 ASC`. However, it will also satisfy 
`rn1 ASC`. However, currently we cannot detect this
   query below
   ```sql
   SELECT c9, rn1 FROM (SELECT c9,
                      ROW_NUMBER() OVER(ORDER BY c9 ASC) as rn1
                      FROM aggregate_test_100
                      ORDER BY c9 ASC)
      ORDER BY rn1
   ```
   produces the following plan
   ```
   "SortExec: expr=[rn1@1 ASC NULLS LAST]",
   "  ProjectionExec: expr=[c9@0 as c9, ROW_NUMBER() ORDER BY 
[aggregate_test_100.c9 ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND 
CURRENT ROW@1 as rn1]",
   "    BoundedWindowAggExec: wdw=[ROW_NUMBER(): Ok(Field { name: 
\"ROW_NUMBER()\", data_type: UInt64, nullable: false, dict_id: 0, 
dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, 
start_bound: Preceding(UInt32(NULL)), end_bound: CurrentRow }], mode=[Sorted]",
   "      SortExec: expr=[c9@0 ASC NULLS LAST]",
   "        CsvExec: files={1 group: [[SOURCE_PATH]]}, has_header=true, 
limit=None, projection=[c9]",
   ```
   We could have produced the following if were to detect that `c9 ASC` and 
`rn1 ASC` defines same ordering.
   ```
   "ProjectionExec: expr=[c9@0 as c9, ROW_NUMBER() ORDER BY 
[aggregate_test_100.c9 ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND 
CURRENT ROW@1 as rn1]",
   "  BoundedWindowAggExec: wdw=[ROW_NUMBER(): Ok(Field { name: 
\"ROW_NUMBER()\", data_type: UInt64, nullable: false, dict_id: 0, 
dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, 
start_bound: Preceding(UInt32(NULL)), end_bound: CurrentRow }], mode=[Sorted]",
   "    SortExec: expr=[c9@0 ASC NULLS LAST]",
   "      CsvExec: files={1 group: [[SOURCE_PATH]]}, has_header=true, 
limit=None, projection=[c9]",
   ```
   
   ### Describe the solution you'd like
   
   I would like to have this support.
   
   ### Describe alternatives you've considered
   
   _No response_
   
   ### Additional context
   
   _No response_


-- 
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]

Reply via email to