This is an automated email from the ASF dual-hosted git repository.

starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new eb65cc6954 [Fix](nereids) eliminate_outer_join regression case fix 
#24262
eb65cc6954 is described below

commit eb65cc6954c2a3cae45ac93c3c6fc142fee45591
Author: minghong <[email protected]>
AuthorDate: Thu Sep 14 18:22:17 2023 +0800

    [Fix](nereids) eliminate_outer_join regression case fix #24262
---
 .../eliminate_outer_join/eliminate_outer_join.out  | 98 ++++++++++------------
 .../eliminate_outer_join.groovy                    | 75 +++++++++--------
 2 files changed, 86 insertions(+), 87 deletions(-)

diff --git 
a/regression-test/data/nereids_p0/eliminate_outer_join/eliminate_outer_join.out 
b/regression-test/data/nereids_p0/eliminate_outer_join/eliminate_outer_join.out
index 1ab1363883..69daaf93e8 100644
--- 
a/regression-test/data/nereids_p0/eliminate_outer_join/eliminate_outer_join.out
+++ 
b/regression-test/data/nereids_p0/eliminate_outer_join/eliminate_outer_join.out
@@ -5,17 +5,16 @@ PhysicalResultSink
 ----PhysicalProject
 ------hashJoin[INNER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
 --------hashJoin[INNER_JOIN](nation.n_nationkey = supplier.s_suppkey)
-----------PhysicalDistribute
-------------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
---------------PhysicalOlapScan[region]
---------------PhysicalDistribute
-----------------filter(( not n_nationkey IS NULL)(nation.n_nationkey > 1))
-------------------PhysicalOlapScan[nation]
+----------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
+------------PhysicalOlapScan[region]
+------------PhysicalDistribute
+--------------filter(( not n_nationkey IS NULL)(nation.n_nationkey > 1))
+----------------PhysicalOlapScan[nation]
 ----------PhysicalDistribute
 ------------filter((supplier.s_suppkey > 1)( not s_suppkey IS NULL))
 --------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
-----------filter((partsupp.ps_suppkey > 1)( not ps_suppkey IS NULL))
+----------filter(( not ps_suppkey IS NULL)(partsupp.ps_suppkey > 1))
 ------------PhysicalOlapScan[partsupp]
 
 -- !2 --
@@ -28,13 +27,14 @@ PhysicalResultSink
 ------------hashJoin[FULL_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
 --------------PhysicalDistribute
 ----------------hashJoin[FULL_OUTER_JOIN](region.r_regionkey = 
nation.n_regionkey)
-------------------PhysicalOlapScan[region]
+------------------PhysicalDistribute
+--------------------PhysicalOlapScan[region]
 ------------------PhysicalDistribute
 --------------------PhysicalOlapScan[nation]
 --------------PhysicalDistribute
 ----------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
-----------filter((partsupp.ps_suppkey > 1)( not ps_suppkey IS NULL))
+----------filter(( not ps_suppkey IS NULL)(partsupp.ps_suppkey > 1))
 ------------PhysicalOlapScan[partsupp]
 
 -- !3 --
@@ -45,15 +45,15 @@ PhysicalResultSink
 --------PhysicalDistribute
 ----------filter((supplier.s_suppkey > 1))
 ------------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
---------------PhysicalDistribute
-----------------hashJoin[FULL_OUTER_JOIN](region.r_regionkey = 
nation.n_regionkey)
+--------------hashJoin[FULL_OUTER_JOIN](region.r_regionkey = 
nation.n_regionkey)
+----------------PhysicalDistribute
 ------------------PhysicalOlapScan[region]
-------------------PhysicalDistribute
---------------------PhysicalOlapScan[nation]
+----------------PhysicalDistribute
+------------------PhysicalOlapScan[nation]
 --------------PhysicalDistribute
 ----------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
-----------filter((partsupp.ps_suppkey > 1)( not ps_suppkey IS NULL))
+----------filter(( not ps_suppkey IS NULL)(partsupp.ps_suppkey > 1))
 ------------PhysicalOlapScan[partsupp]
 
 -- !4 --
@@ -71,12 +71,11 @@ PhysicalResultSink
 --PhysicalDistribute
 ----PhysicalProject
 ------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
---------PhysicalDistribute
-----------hashJoin[LEFT_OUTER_JOIN](region.r_regionkey = nation.n_regionkey)
-------------filter(( not r_name IS NULL)(region.r_name = ''))
---------------PhysicalOlapScan[region]
-------------PhysicalDistribute
---------------PhysicalOlapScan[nation]
+--------hashJoin[LEFT_OUTER_JOIN](region.r_regionkey = nation.n_regionkey)
+----------filter(( not r_name IS NULL)(region.r_name = ''))
+------------PhysicalOlapScan[region]
+----------PhysicalDistribute
+------------PhysicalOlapScan[nation]
 --------PhysicalDistribute
 ----------PhysicalOlapScan[supplier]
 
@@ -85,16 +84,14 @@ PhysicalResultSink
 --PhysicalDistribute
 ----PhysicalProject
 ------hashJoin[LEFT_OUTER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
---------PhysicalDistribute
-----------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
-------------PhysicalDistribute
---------------hashJoin[LEFT_OUTER_JOIN](region.r_regionkey = 
nation.n_regionkey)
-----------------filter(( not r_name IS NULL)(region.r_name = ''))
-------------------PhysicalOlapScan[region]
-----------------PhysicalDistribute
-------------------PhysicalOlapScan[nation]
+--------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
+----------hashJoin[LEFT_OUTER_JOIN](region.r_regionkey = nation.n_regionkey)
+------------filter(( not r_name IS NULL)(region.r_name = ''))
+--------------PhysicalOlapScan[region]
 ------------PhysicalDistribute
---------------PhysicalOlapScan[supplier]
+--------------PhysicalOlapScan[nation]
+----------PhysicalDistribute
+------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
 ----------PhysicalOlapScan[partsupp]
 
@@ -105,13 +102,12 @@ PhysicalResultSink
 ------hashJoin[FULL_OUTER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
 --------PhysicalDistribute
 ----------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
-------------PhysicalDistribute
---------------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
-----------------filter(( not r_regionkey IS NULL))
-------------------PhysicalOlapScan[region]
-----------------PhysicalDistribute
-------------------filter(( not n_regionkey IS NULL))
---------------------PhysicalOlapScan[nation]
+------------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
+--------------filter(( not r_regionkey IS NULL))
+----------------PhysicalOlapScan[region]
+--------------PhysicalDistribute
+----------------filter(( not n_regionkey IS NULL))
+------------------PhysicalOlapScan[nation]
 ------------PhysicalDistribute
 --------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
@@ -122,17 +118,16 @@ PhysicalResultSink
 --PhysicalDistribute
 ----PhysicalProject
 ------hashJoin[LEFT_OUTER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
---------PhysicalDistribute
-----------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
+--------hashJoin[LEFT_OUTER_JOIN](nation.n_nationkey = supplier.s_suppkey)
+----------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
 ------------PhysicalDistribute
---------------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
-----------------filter(( not r_regionkey IS NULL)( not r_name IS 
NULL)(region.r_name = ''))
-------------------PhysicalOlapScan[region]
-----------------PhysicalDistribute
-------------------filter(( not n_regionkey IS NULL))
---------------------PhysicalOlapScan[nation]
+--------------filter(( not r_regionkey IS NULL)( not r_name IS 
NULL)(region.r_name = ''))
+----------------PhysicalOlapScan[region]
 ------------PhysicalDistribute
---------------PhysicalOlapScan[supplier]
+--------------filter(( not n_regionkey IS NULL))
+----------------PhysicalOlapScan[nation]
+----------PhysicalDistribute
+------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
 ----------PhysicalOlapScan[partsupp]
 
@@ -142,13 +137,12 @@ PhysicalResultSink
 ----PhysicalProject
 ------hashJoin[LEFT_OUTER_JOIN](partsupp.ps_suppkey = supplier.s_suppkey)
 --------hashJoin[INNER_JOIN](nation.n_nationkey = supplier.s_suppkey)
-----------PhysicalDistribute
-------------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
---------------filter(( not r_regionkey IS NULL)( not r_name IS 
NULL)(region.r_name = ''))
-----------------PhysicalOlapScan[region]
---------------PhysicalDistribute
-----------------filter(( not n_regionkey IS NULL))
-------------------PhysicalOlapScan[nation]
+----------hashJoin[INNER_JOIN](region.r_regionkey = nation.n_regionkey)
+------------filter(( not r_regionkey IS NULL)( not r_name IS 
NULL)(region.r_name = ''))
+--------------PhysicalOlapScan[region]
+------------PhysicalDistribute
+--------------filter(( not n_regionkey IS NULL))
+----------------PhysicalOlapScan[nation]
 ----------PhysicalDistribute
 ------------PhysicalOlapScan[supplier]
 --------PhysicalDistribute
diff --git 
a/regression-test/suites/nereids_p0/eliminate_outer_join/eliminate_outer_join.groovy
 
b/regression-test/suites/nereids_p0/eliminate_outer_join/eliminate_outer_join.groovy
index e226130c76..d91d506ccb 100644
--- 
a/regression-test/suites/nereids_p0/eliminate_outer_join/eliminate_outer_join.groovy
+++ 
b/regression-test/suites/nereids_p0/eliminate_outer_join/eliminate_outer_join.groovy
@@ -21,7 +21,8 @@ suite("eliminate_outer_join") {
     sql "set disable_nereids_rules='ELIMINATE_NOT_NULL'"
     sql "set disable_join_reorder=true"
     sql "set forbid_unknown_col_stats=false"
-
+    sql "set enable_bucket_shuffle_join=false"
+    
     String database = context.config.getDbNameByFile(context.file)
     sql "drop database if exists ${database}"
     sql "create database ${database}"
@@ -33,15 +34,16 @@ suite("eliminate_outer_join") {
 
     sql '''
     CREATE TABLE partsupp (
+        ps_id           int,
         ps_partkey          int NOT NULL,
         ps_suppkey     int NOT NULL,
         ps_availqty    int NOT NULL,
         ps_supplycost  decimal(15, 2)  NOT NULL,
         ps_comment     VARCHAR(199) NOT NULL
     )ENGINE=OLAP
-    DUPLICATE KEY(`ps_partkey`)
+    DUPLICATE KEY(`ps_id`)
     COMMENT "OLAP"
-    DISTRIBUTED BY HASH(`ps_partkey`) BUCKETS 24
+    DISTRIBUTED BY HASH(`ps_id`) BUCKETS 24
     PROPERTIES (
         "replication_num" = "1",
         "colocate_with" = "part_partsupp"
@@ -54,6 +56,7 @@ suite("eliminate_outer_join") {
     
     sql '''
     CREATE TABLE supplier (
+        s_id            int,
         s_suppkey       int NOT NULL,
         s_name        VARCHAR(25) NOT NULL,
         s_address     VARCHAR(40) NOT NULL,
@@ -62,9 +65,9 @@ suite("eliminate_outer_join") {
         s_acctbal     decimal(15, 2) NOT NULL,
         s_comment     VARCHAR(101) NOT NULL
     )ENGINE=OLAP
-    DUPLICATE KEY(`s_suppkey`)
+    DUPLICATE KEY(`s_id`)
     COMMENT "OLAP"
-    DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 12
+    DISTRIBUTED BY HASH(`s_id`) BUCKETS 12
     PROPERTIES (
         "replication_num" = "1"
     );
@@ -76,14 +79,15 @@ suite("eliminate_outer_join") {
 
     sql '''
     CREATE TABLE `nation` (
+    n_id           int(11),
     `n_nationkey` int(11) NOT NULL,
     `n_name`      varchar(25) NOT NULL,
     `n_regionkey` int(11) NOT NULL,
     `n_comment`   varchar(152) NULL
     ) ENGINE=OLAP
-    DUPLICATE KEY(`N_NATIONKEY`)
+    DUPLICATE KEY(`n_id`)
     COMMENT "OLAP"
-    DISTRIBUTED BY HASH(`N_NATIONKEY`) BUCKETS 1
+    DISTRIBUTED BY HASH(`n_id`) BUCKETS 1
     PROPERTIES (
         "replication_num" = "1"
     );
@@ -95,37 +99,38 @@ suite("eliminate_outer_join") {
     
     sql '''
     CREATE TABLE region  (
+        r_id            int,
         r_regionkey      int NOT NULL,
         r_name       VARCHAR(25) NOT NULL,
         r_comment    VARCHAR(152)
     )ENGINE=OLAP
-    DUPLICATE KEY(`r_regionkey`)
+    DUPLICATE KEY(`r_id`)
     COMMENT "OLAP"
-    DISTRIBUTED BY HASH(`r_regionkey`) BUCKETS 1
+    DISTRIBUTED BY HASH(`r_id`) BUCKETS 1
     PROPERTIES (
         "replication_num" = "1"
     );
     '''
     
+    // eliminate outer joins in cascading
     qt_1 '''
-    --eliminate outer joins in cascading
     explain shape plan
     select * 
     from region
-        left join nation on r_regionkey=n_regionkey -->inner
-        left join supplier on n_nationkey=s_suppkey -->inner
-        left join partsupp on ps_suppkey=s_suppkey -->inner
+        left join [broadcast]  nation on r_regionkey=n_regionkey -->inner
+        left join [broadcast]  supplier on n_nationkey=s_suppkey -->inner
+        left join [broadcast]  partsupp on ps_suppkey=s_suppkey -->inner
     where ps_suppkey > 1
     '''
 
+    // full join ps => right join ps, other outer joins are not eliminated
     qt_2 '''
-    -- full join ps => right join ps, other outer joins are not eliminated
     explain shape plan
     select * 
     from region
-        full join nation on r_regionkey=n_regionkey  -->full
-        full join supplier on n_nationkey=s_suppkey -->full
-        full join partsupp on ps_suppkey=s_suppkey -->right
+        full join [broadcast] nation on r_regionkey=n_regionkey  -->full
+        full join [broadcast] supplier on n_nationkey=s_suppkey -->full
+        full join [broadcast] partsupp on ps_suppkey=s_suppkey -->right
     where ps_suppkey > 1;
     '''
 
@@ -133,9 +138,9 @@ suite("eliminate_outer_join") {
     explain shape plan
     select * 
     from region
-        full join nation on r_regionkey=n_regionkey -- full
-        left join supplier on n_nationkey=s_suppkey -- left
-        full join partsupp on ps_suppkey=s_suppkey  -- right
+        full join [broadcast] nation on r_regionkey=n_regionkey -- full
+        left join [broadcast] supplier on n_nationkey=s_suppkey -- left
+        full join [broadcast] partsupp on ps_suppkey=s_suppkey  -- right
     where ps_suppkey > 1;
     '''
 
@@ -143,7 +148,7 @@ suite("eliminate_outer_join") {
     explain shape plan
     select * 
     from region
-        full join nation on r_regionkey=n_regionkey -- left
+        full join [broadcast] nation on r_regionkey=n_regionkey -- left
     where r_name = "";
     '''
 
@@ -151,8 +156,8 @@ suite("eliminate_outer_join") {
     explain shape plan
     select * 
     from region
-        full join nation on r_regionkey=n_regionkey -- left
-        left join supplier on n_nationkey=s_suppkey -- left
+        full join [broadcast] nation on r_regionkey=n_regionkey -- left
+        left join [broadcast] supplier on n_nationkey=s_suppkey -- left
     where r_name = "";
     '''
 
@@ -160,9 +165,9 @@ suite("eliminate_outer_join") {
     explain shape plan
     select * 
     from region
-        full join nation on r_regionkey=n_regionkey -- left
-        left join supplier on n_nationkey=s_suppkey -- left
-        full join partsupp on ps_suppkey=s_suppkey  -- left
+        full join [broadcast] nation on r_regionkey=n_regionkey -- left
+        left join [broadcast] supplier on n_nationkey=s_suppkey -- left
+        full join [broadcast] partsupp on ps_suppkey=s_suppkey  -- left
     where r_name = "";
     '''
 
@@ -170,18 +175,18 @@ suite("eliminate_outer_join") {
     explain shape plan
         select * 
         from region
-            join nation on r_regionkey=n_regionkey      -- inner
-            left join supplier on n_nationkey=s_suppkey  -- left
-            full join partsupp on ps_suppkey=s_suppkey;  -- full
+            join [broadcast]  nation on r_regionkey=n_regionkey      -- inner
+            left join [broadcast]  supplier on n_nationkey=s_suppkey  -- left
+            full join [broadcast]  partsupp on ps_suppkey=s_suppkey;  -- full
     '''
 
     qt_8'''
     explain shape plan
         select * 
         from region
-            join nation on r_regionkey=n_regionkey      --inner
-            left join supplier on n_nationkey=s_suppkey --left
-            full join partsupp on ps_suppkey=s_suppkey  --left
+            join nation [broadcast]  on r_regionkey=n_regionkey      --inner
+            left join [broadcast]  supplier on n_nationkey=s_suppkey --left
+            full join [broadcast]  partsupp on ps_suppkey=s_suppkey  --left
         where r_name = "";
     '''
 
@@ -189,9 +194,9 @@ suite("eliminate_outer_join") {
     explain shape plan
         select * 
         from region
-            join nation on r_regionkey=n_regionkey      --inner
-            right join supplier on n_nationkey=s_suppkey --inner
-            full join partsupp on ps_suppkey=s_suppkey  --left
+            join [broadcast]  nation on r_regionkey=n_regionkey      --inner
+            right join [broadcast]  supplier on n_nationkey=s_suppkey --inner
+            full join [broadcast]  partsupp on ps_suppkey=s_suppkey  --left
         where r_name = "";
         '''
 }


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

Reply via email to