jackwener commented on issue #3864:
URL: 
https://github.com/apache/arrow-datafusion/issues/3864#issuecomment-1312516923

   Datafusion only can propagate `EmptyRelation` just 
`optimizer_config.max_passes` times. Because we depend on multi-passes 
optimization to multiply elimination.
   
   In other words, we currently don't  have really `EmptyRelationPropagation`.
   
   We can reproduce it. 
   
    After 3 optimizations, the plan can continue to be eliminated.
   
   ```sql
    CREATE TABLE IF NOT EXISTS t1 AS VALUES(1,'HELLO'),(12,'DATAFUSION');
    CREATE TABLE IF NOT EXISTS t2 AS VALUES(1,'HELLO'),(12,'DATAFUSION');
    CREATE TABLE IF NOT EXISTS t3 AS VALUES(1,'HELLO'),(12,'DATAFUSION');
   
   explain verbose  select column1 from t1 join ( select column1 from t2 join 
(select column1 from t3 where false ) as ta2 on t2.column1 = ta2.column1 ) as 
ta1 on t1.column1 = ta1.column1;
   ```
   
   The `root` cause is currently optimization is incomplete. We just have 
top-down optimize, we don't have bottom-up optimize.
   
   If we have bottom-up optimize, we can do `EmptyRelationPropagation` in once 
optimization.
   
   


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