liningpan opened a new issue, #23655:
URL: https://github.com/apache/datafusion/issues/23655

   ### Is your feature request related to a problem or challenge?
   
   Since UDF can only return a single column as output, returning a 
`StructArray` is desired in many cases. However, accessing fields of the 
returned struct results in redundant calls to the UDF.
   
   ```sql
   SELECT
       example_struct(c)['a'],
       example_struct(c)['b']
   FROM (SELECT unnest(range(1,100)) as c)
   ```
   
   Datafusion produces the following projection step for the query, resulting 
in calling the UDF with the same column twice.
   
   ```
   ProjectionExec: expr=[get_field(example_struct(c@0), a) as 
example_struct(c)[a], get_field(example_struct(c@0), b) as example_struct(c)[b]]
   ```
   
   Note that calling the UDF in a CTE or view does not change the execution 
plan.
   
   Here is a minimal example 
[https://github.com/liningpan/udf-get-field-optimization].
   
   
   ### Describe the solution you'd like
   
   @adriangb mentioned that CSE (Common Sub-expression Elimination) optimizer 
might be able to handle this.
   
   ### 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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to