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

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

commit 5b546e795d6e805ab8171c59aad9b6e8a5f8af8c
Author: Gustavo de Morais <[email protected]>
AuthorDate: Tue Sep 30 09:25:17 2025 +0200

    [FLINK-38211][table] Skip pos 0 for joinTypes and joinConditions
---
 .../physical/stream/StreamPhysicalMultiJoin.java   | 18 +++---
 .../planner/plan/stream/sql/MultiJoinTest.xml      | 68 +++++++++++-----------
 2 files changed, 45 insertions(+), 41 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/physical/stream/StreamPhysicalMultiJoin.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/physical/stream/StreamPhysicalMultiJoin.java
index 1107f9e6b36..4d7aa3a519f 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/physical/stream/StreamPhysicalMultiJoin.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/physical/stream/StreamPhysicalMultiJoin.java
@@ -166,20 +166,16 @@ public class StreamPhysicalMultiJoin extends 
AbstractRelNode implements StreamPh
         }
 
         return pw.item("commonJoinKey", getCommonJoinKeyFieldNames())
-                .item(
-                        "joinTypes",
-                        joinTypes.stream()
-                                .map(JoinRelType::toString)
-                                .collect(Collectors.joining(", ")))
+                .item("joinTypes", formatJoinTypes())
                 .item("inputUniqueKeys", formatInputUniqueKeysWithFieldNames())
+                .itemIf("stateTtlHints", RelExplainUtil.hintsToString(hints), 
!hints.isEmpty())
                 .item("joinConditions", formatJoinConditionsWithFieldNames(pw))
                 .itemIf(
                         "postJoinFilter",
                         formatExpressionWithFieldNames(postJoinFilter, pw),
                         postJoinFilter != null)
                 .item("select", String.join(",", getRowType().getFieldNames()))
-                .item("rowType", getRowType())
-                .itemIf("stateTtlHints", RelExplainUtil.hintsToString(hints), 
!hints.isEmpty());
+                .item("rowType", getRowType());
     }
 
     @Override
@@ -338,11 +334,19 @@ public class StreamPhysicalMultiJoin extends 
AbstractRelNode implements StreamPh
      */
     private String formatJoinConditionsWithFieldNames(final RelWriter pw) {
         return joinConditions.stream()
+                .skip(1)
                 .filter(Objects::nonNull)
                 .map(condition -> formatExpressionWithFieldNames(condition, 
pw))
                 .collect(Collectors.joining(", "));
     }
 
+    private String formatJoinTypes() {
+        return joinTypes.stream()
+                .skip(1)
+                .map(JoinRelType::toString)
+                .collect(Collectors.joining(", "));
+    }
+
     private String formatInputUniqueKeysWithFieldNames() {
         final List<String> inputUniqueKeyStrings = new ArrayList<>();
         for (final RelNode input : inputs) {
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/MultiJoinTest.xml
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/MultiJoinTest.xml
index e5dd4456502..f9568b3b6e5 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/MultiJoinTest.xml
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/stream/sql/MultiJoinTest.xml
@@ -35,7 +35,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6], locati
     <Resource name="optimized exec plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[true, (user_id_0 = user_id_1), ((user_id_0 = user_id_2) AND 
((cash >= price) OR (price < 0))), (user_id_2 = user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) o [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[(user_id_0 = user_id_1), ((user_id_0 = user_id_2) AND ((cash >= 
price) OR (price < 0))), (user_id_2 = user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARC [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- ChangelogNormalize(key=[user_id_0])
    :     +- Exchange(distribution=[hash[user_id_0]])
@@ -63,7 +63,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6], locati
 
 == Optimized Physical Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[true, =(user_id_0, user_id_1), AND(=(user_id_0, user_id_2), 
OR(>=(cash, price), <(price, 0))), =(user_id_2, user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) o [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[=(user_id_0, user_id_1), AND(=(user_id_0, user_id_2), 
OR(>=(cash, price), <(price, 0))), =(user_id_2, user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARC [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- ChangelogNormalize(key=[user_id_0])
    :     +- Exchange(distribution=[hash[user_id_0]])
@@ -77,7 +77,7 @@ Calc(select=[user_id_0, name, order_id, payment_id, location])
 
 == Optimized Execution Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[true, (user_id_0 = user_id_1), ((user_id_0 = user_id_2) AND 
((cash >= price) OR (price < 0))), (user_id_2 = user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) o [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[(user_id_0 = user_id_1), ((user_id_0 = user_id_2) AND ((cash >= 
price) OR (price < 0))), (user_id_2 = user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARC [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- ChangelogNormalize(key=[user_id_0])
    :     +- Exchange(distribution=[hash[user_id_0]])
@@ -110,7 +110,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6], locati
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[true, =(user_id_0, user_id_1), AND(=(user_id_0, user_id_2), 
OR(>=(cash, price), <(price, 0))), =(user_id_2, user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) o [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[=(user_id_0, user_id_1), AND(=(user_id_0, user_id_2), 
OR(>=(cash, price), <(price, 0))), =(user_id_2, user_id_3)], 
select=[user_id_0,name,cash,order_id,user_id_1,payment_id,price,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARC [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- ChangelogNormalize(key=[user_id_0])
    :     +- Exchange(distribution=[hash[user_id_0]])
@@ -143,10 +143,10 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6], locati
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[payment_id], joinTypes=[INNER, LEFT], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[true, =(payment_id, 
user_id_3)], select=[user_id_0,name,order_id,payment_id,location,user_id_3], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) location, VARCHAR(2147483647) user_id_3)])
++- MultiJoin(commonJoinKey=[payment_id], joinTypes=[LEFT], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[=(payment_id, 
user_id_3)], select=[user_id_0,name,order_id,payment_id,location,user_id_3], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) location, VARCHAR(2147483647) user_id_3)])
    :- Exchange(distribution=[hash[payment_id]])
    :  +- Calc(select=[user_id_0, name, order_id, payment_id])
-   :     +- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, 
INNER], inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[true, =(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
+   :     +- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :        :- Exchange(distribution=[hash[user_id_0]])
    :        :  +- ChangelogNormalize(key=[user_id_0])
    :        :     +- Exchange(distribution=[hash[user_id_0]])
@@ -179,7 +179,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6], locati
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id, location])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[true, =(user_id_0, user_id_1), =(user_id_1, user_id_2), 
=(user_id_2, user_id_3)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payme [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id), noUniqueKey], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_1, user_id_2), =(user_id_2, 
user_id_3)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2,location,user_id_3],
 rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHA [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- ChangelogNormalize(key=[user_id_0])
    :     +- Exchange(distribution=[hash[user_id_0]])
@@ -258,7 +258,7 @@ Sink(table=[default_catalog.default_database.sink1], 
fields=[a, day, EXPR$2, EXP
 +- GroupAggregate(advice=[1], groupBy=[a, day], select=[a, day, SUM_RETRACT(b) 
AS EXPR$2, COUNT_RETRACT(DISTINCT c) AS EXPR$3])
    +- Exchange(distribution=[hash[a, day]])
       +- Calc(select=[a, day, b0 AS b, c])
-         +- MultiJoin(commonJoinKey=[a], joinTypes=[INNER, INNER], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[true, =(a, d)], 
select=[a,day,b0,c,d], rowType=[RecordType(INTEGER a, VARCHAR(2147483647) day, 
BIGINT b0, VARCHAR(2147483647) c, INTEGER d)])
+         +- MultiJoin(commonJoinKey=[a], joinTypes=[INNER], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[=(a, d)], 
select=[a,day,b0,c,d], rowType=[RecordType(INTEGER a, VARCHAR(2147483647) day, 
BIGINT b0, VARCHAR(2147483647) c, INTEGER d)])
             :- Exchange(distribution=[hash[a]])
             :  +- Calc(select=[a, DATE_FORMAT(CURRENT_TIMESTAMP(), 'yyMMdd') 
AS day])
             :     +- TableSourceScan(table=[[default_catalog, 
default_database, src1, project=[a], metadata=[]]], fields=[a])
@@ -267,7 +267,7 @@ Sink(table=[default_catalog.default_database.sink1], 
fields=[a, day, EXPR$2, EXP
 
 Sink(table=[default_catalog.default_database.sink2], fields=[a, day, b, c])
 +- Calc(select=[a, day, b0 AS b, c])
-   +- MultiJoin(commonJoinKey=[a], joinTypes=[INNER, INNER], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[true, =(a, d)], 
select=[a,day,b0,c,d], rowType=[RecordType(INTEGER a, VARCHAR(2147483647) day, 
BIGINT b0, VARCHAR(2147483647) c, INTEGER d)])
+   +- MultiJoin(commonJoinKey=[a], joinTypes=[INNER], 
inputUniqueKeys=[noUniqueKey, noUniqueKey], joinConditions=[=(a, d)], 
select=[a,day,b0,c,d], rowType=[RecordType(INTEGER a, VARCHAR(2147483647) day, 
BIGINT b0, VARCHAR(2147483647) c, INTEGER d)])
       :- Exchange(distribution=[hash[a]])
       :  +- Calc(select=[a, DATE_FORMAT(CURRENT_TIMESTAMP(), 'yyMMdd') AS day])
       :     +- TableSourceScan(table=[[default_catalog, default_database, 
src1, project=[a], metadata=[]]], fields=[a])
@@ -307,7 +307,7 @@ 
LogicalSink(table=[default_catalog.default_database.sink_four_way], fields=[user
       <![CDATA[
 Sink(table=[default_catalog.default_database.sink_four_way], fields=[user_id, 
order_id, user_id0, payment_id, user_id1, name, location])
 +- Calc(select=[user_id, order_id, user_id0, payment_id, user_id1, name, 
location])
-   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER, INNER, 
INNER], inputUniqueKeys=[(user_id), (order_id, user_id), (payment_id, user_id), 
(user_id)], joinConditions=[true, =(user_id, user_id0), =(user_id, user_id1), 
=(user_id, user_id2)], 
select=[user_id,name,order_id,user_id0,payment_id,user_id1,user_id2,location], 
rowType=[RecordType(VARCHAR(2147483647) user_id, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
paym [...]
+   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id), (order_id, user_id), (payment_id, user_id), 
(user_id)], joinConditions=[=(user_id, user_id0), =(user_id, user_id1), 
=(user_id, user_id2)], 
select=[user_id,name,order_id,user_id0,payment_id,user_id1,user_id2,location], 
rowType=[RecordType(VARCHAR(2147483647) user_id, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
payment_id, VARCH [...]
       :- Exchange(distribution=[hash[user_id]])
       :  +- TableSourceScan(table=[[default_catalog, default_database, 
UsersPK, project=[user_id, name], metadata=[]]], fields=[user_id, name])
       :- Exchange(distribution=[hash[user_id]])
@@ -346,7 +346,7 @@ 
LogicalSink(table=[default_catalog.default_database.sink_three_way], fields=[use
       <![CDATA[
 Sink(table=[default_catalog.default_database.sink_three_way], fields=[user_id, 
order_id, user_id0, payment_id, user_id1, description])
 +- Calc(select=[user_id0 AS user_id, order_id, user_id1 AS user_id0, 
payment_id, user_id AS user_id1, description])
-   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id), (order_id, user_id), (payment_id, user_id)], 
joinConditions=[true, =(user_id0, user_id), =(user_id0, user_id1)], 
select=[user_id,description,order_id,user_id0,payment_id,user_id1], 
rowType=[RecordType(VARCHAR(2147483647) user_id, VARCHAR(2147483647) 
description, VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id1)])
+   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id), (order_id, user_id), (payment_id, user_id)], 
joinConditions=[=(user_id0, user_id), =(user_id0, user_id1)], 
select=[user_id,description,order_id,user_id0,payment_id,user_id1], 
rowType=[RecordType(VARCHAR(2147483647) user_id, VARCHAR(2147483647) 
description, VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id1)])
       :- Exchange(distribution=[hash[user_id]])
       :  +- TableSourceScan(table=[[default_catalog, default_database, 
UsersPK, project=[user_id, description], metadata=[]]], fields=[user_id, 
description])
       :- Exchange(distribution=[hash[user_id]])
@@ -373,7 +373,7 @@ 
LogicalSink(table=[default_catalog.default_database.sink_two_way], fields=[user_
       <![CDATA[
 Sink(table=[default_catalog.default_database.sink_two_way], fields=[user_id, 
order_id, product, region_id])
 +- Calc(select=[user_id0 AS user_id, order_id, product, region_id])
-   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id), (order_id, user_id)], joinConditions=[true, 
=(user_id, user_id0)], select=[user_id,region_id,order_id,user_id0,product], 
rowType=[RecordType(VARCHAR(2147483647) user_id, INTEGER region_id, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
product)])
+   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER], 
inputUniqueKeys=[(user_id), (order_id, user_id)], joinConditions=[=(user_id, 
user_id0)], select=[user_id,region_id,order_id,user_id0,product], 
rowType=[RecordType(VARCHAR(2147483647) user_id, INTEGER region_id, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
product)])
       :- Exchange(distribution=[hash[user_id]])
       :  +- TableSourceScan(table=[[default_catalog, default_database, 
UsersPK, project=[user_id, region_id], metadata=[]]], fields=[user_id, 
region_id])
       +- Exchange(distribution=[hash[user_id]])
@@ -398,7 +398,7 @@ 
LogicalSink(table=[default_catalog.default_database.sink_two_way], fields=[user_
       <![CDATA[
 Sink(table=[default_catalog.default_database.sink_two_way], fields=[user_id, 
order_id, product, region_id], upsertMaterialize=[true])
 +- Calc(select=[user_id0 AS user_id, order_id, product, region_id])
-   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id), (order_id)], joinConditions=[true, =(user_id, 
user_id0)], select=[user_id,region_id,order_id,user_id0,product], 
rowType=[RecordType(VARCHAR(2147483647) user_id, INTEGER region_id, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
product)])
+   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER], 
inputUniqueKeys=[(user_id), (order_id)], joinConditions=[=(user_id, user_id0)], 
select=[user_id,region_id,order_id,user_id0,product], 
rowType=[RecordType(VARCHAR(2147483647) user_id, INTEGER region_id, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id0, VARCHAR(2147483647) 
product)])
       :- Exchange(distribution=[hash[user_id]])
       :  +- ChangelogNormalize(key=[user_id])
       :     +- Exchange(distribution=[hash[user_id]])
@@ -427,7 +427,7 @@ 
LogicalSink(table=[default_catalog.default_database.sink_two_way], fields=[user_
       <![CDATA[
 Sink(table=[default_catalog.default_database.sink_two_way], fields=[user_id, 
order_id, product, region_id])
 +- Calc(select=[user_id, order_id, product, region_id])
-   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[INNER, LEFT], 
inputUniqueKeys=[(order_id, user_id), (user_id)], joinConditions=[true, 
=(user_id0, user_id)], select=[order_id,user_id,product,user_id0,region_id], 
rowType=[RecordType(VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id, 
VARCHAR(2147483647) product, VARCHAR(2147483647) user_id0, INTEGER region_id)])
+   +- MultiJoin(commonJoinKey=[user_id], joinTypes=[LEFT], 
inputUniqueKeys=[(order_id, user_id), (user_id)], joinConditions=[=(user_id0, 
user_id)], select=[order_id,user_id,product,user_id0,region_id], 
rowType=[RecordType(VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id, 
VARCHAR(2147483647) product, VARCHAR(2147483647) user_id0, INTEGER region_id)])
       :- Exchange(distribution=[hash[user_id]])
       :  +- TableSourceScan(table=[[default_catalog, default_database, 
OrdersPK]], fields=[order_id, user_id, product])
       +- Exchange(distribution=[hash[user_id]])
@@ -458,7 +458,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
age=[$7])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, age])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), noUniqueKey], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id)], 
select=[user_id_0,name,order_id,user_id_1,user_id,age], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) user_id, INTEGER age)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), noUniqueKey], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id)], 
select=[user_id_0,name,order_id,user_id_1,user_id,age], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) user_id, INTEGER age)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -541,7 +541,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized exec plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -563,7 +563,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
 
 == Optimized Physical Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -573,7 +573,7 @@ Calc(select=[user_id_0, name, order_id, payment_id])
 
 == Optimized Execution Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -600,10 +600,10 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[cash], joinTypes=[INNER, INNER], 
inputUniqueKeys=[noUniqueKey, (payment_id)], joinConditions=[true, =(cash, 
price)], select=[user_id_0,name,cash,order_id,payment_id,price], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id, 
INTEGER price)])
++- MultiJoin(commonJoinKey=[cash], joinTypes=[INNER], 
inputUniqueKeys=[noUniqueKey, (payment_id)], joinConditions=[=(cash, price)], 
select=[user_id_0,name,cash,order_id,payment_id,price], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id, 
INTEGER price)])
    :- Exchange(distribution=[hash[cash]])
    :  +- Calc(select=[user_id_0, name, cash, order_id])
-   :     +- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id)], joinConditions=[true, =(user_id_0, 
user_id_1)], select=[user_id_0,name,cash,order_id,user_id_1], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1)])
+   :     +- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER], 
inputUniqueKeys=[(user_id_0), (order_id)], joinConditions=[=(user_id_0, 
user_id_1)], select=[user_id_0,name,cash,order_id,user_id_1], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
INTEGER cash, VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1)])
    :        :- Exchange(distribution=[hash[user_id_0]])
    :        :  +- ChangelogNormalize(key=[user_id_0])
    :        :     +- Exchange(distribution=[hash[user_id_0]])
@@ -632,7 +632,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -654,7 +654,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
 
 == Optimized Physical Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -664,7 +664,7 @@ Calc(select=[user_id_0, name, order_id, payment_id])
 
 == Optimized Execution Plan ==
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -691,7 +691,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)], 
stateTtlHints=[[[STAT [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
stateTtlHints=[[[STATE_TTL options:[0s, 2d, 0s]]]], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483 [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -718,7 +718,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)], 
stateTtlHints=[[[STAT [...]
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
stateTtlHints=[[[STATE_TTL options:[1d, 2d, 1h]]]], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483 [...]
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -744,9 +744,9 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     </Resource>
     <Resource name="optimized exec plan">
       <![CDATA[
-MultiJoin(commonJoinKey=[noCommonJoinKey], joinTypes=[INNER, INNER], 
inputUniqueKeys=[noUniqueKey, (payment_id)], joinConditions=[true, true], 
select=[user_id_0,name,order_id,payment_id], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id)])
+MultiJoin(commonJoinKey=[noCommonJoinKey], joinTypes=[INNER], 
inputUniqueKeys=[noUniqueKey, (payment_id)], joinConditions=[true], 
select=[user_id_0,name,order_id,payment_id], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) payment_id)])
 :- Exchange(distribution=[single])
-:  +- MultiJoin(commonJoinKey=[noCommonJoinKey], joinTypes=[INNER, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id)], joinConditions=[true, true], 
select=[user_id_0,name,order_id], rowType=[RecordType(VARCHAR(2147483647) 
user_id_0, VARCHAR(2147483647) name, VARCHAR(2147483647) order_id)])
+:  +- MultiJoin(commonJoinKey=[noCommonJoinKey], joinTypes=[LEFT], 
inputUniqueKeys=[(user_id_0), (order_id)], joinConditions=[true], 
select=[user_id_0,name,order_id], rowType=[RecordType(VARCHAR(2147483647) 
user_id_0, VARCHAR(2147483647) name, VARCHAR(2147483647) order_id)])
 :     :- Exchange(distribution=[single])
 :     :  +- ChangelogNormalize(key=[user_id_0])
 :     :     +- Exchange(distribution=[hash[user_id_0]])
@@ -777,7 +777,7 @@ LogicalProject(name=[$1], proctime=[$2], rowtime=[$5], 
price=[$7])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[name, proctime, rowtime, price])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER, INNER], 
inputUniqueKeys=[(user_id_0), noUniqueKey, noUniqueKey], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,proctime,user_id_1,rowtime,price,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
TIMESTAMP_WITH_LOCAL_TIME_ZONE(3) proctime, VARCHAR(2147483647) user_id_1, 
TIMESTAMP(3) rowtime, INTEGER price, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, INNER], 
inputUniqueKeys=[(user_id_0), noUniqueKey, noUniqueKey], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,proctime,user_id_1,rowtime,price,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
TIMESTAMP_WITH_LOCAL_TIME_ZONE(3) proctime, VARCHAR(2147483647) user_id_1, 
TIMESTAMP(3) rowtime, INTEGER price, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- Calc(select=[user_id_0, name, PROCTIME_MATERIALIZE(PROCTIME()) AS 
proctime])
    :     +- TableSourceScan(table=[[default_catalog, default_database, 
UsersWithProctime]], fields=[user_id_0, name])
@@ -808,7 +808,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, CAST('Gus' AS VARCHAR(2147483647)) AS name, order_id, 
CAST(payment_id AS VARCHAR(2147483647)) AS payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- Calc(select=[user_id_0])
    :     +- ChangelogNormalize(key=[user_id_0], condition=[=(name, 'Gus')])
@@ -839,7 +839,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized exec plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -866,7 +866,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized rel plan">
       <![CDATA[
 Calc(select=[user_id_0, name, order_id, payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, LEFT], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,name,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) name, 
VARCHAR(2147483647) order_id, VARCHAR(2147483647) user_id_1, 
VARCHAR(2147483647) payment_id, VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- TableSourceScan(table=[[default_catalog, default_database, Users, 
project=[user_id_0, name], metadata=[]]], fields=[user_id_0, name])
    :- Exchange(distribution=[hash[user_id_1]])
@@ -889,7 +889,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
 
 == Optimized Physical Plan ==
 Calc(select=[user_id_0, CAST(_UTF-16LE'Gus':VARCHAR(2147483647) CHARACTER SET 
"UTF-16LE" AS VARCHAR(2147483647) CHARACTER SET "UTF-16LE") AS name, order_id, 
CAST(payment_id AS VARCHAR(2147483647) CHARACTER SET "UTF-16LE") AS payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[=(user_id_0, user_id_1), =(user_id_0, user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- Calc(select=[user_id_0])
    :     +- ChangelogNormalize(key=[user_id_0], condition=[=(name, 
_UTF-16LE'Gus':VARCHAR(2147483647) CHARACTER SET "UTF-16LE")])
@@ -903,7 +903,7 @@ Calc(select=[user_id_0, 
CAST(_UTF-16LE'Gus':VARCHAR(2147483647) CHARACTER SET "U
 
 == Optimized Execution Plan ==
 Calc(select=[user_id_0, CAST('Gus' AS VARCHAR(2147483647)) AS name, order_id, 
CAST(payment_id AS VARCHAR(2147483647)) AS payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- Calc(select=[user_id_0])
    :     +- ChangelogNormalize(key=[user_id_0], condition=[(name = 'Gus')])
@@ -935,7 +935,7 @@ LogicalProject(user_id_0=[$0], name=[$1], order_id=[$3], 
payment_id=[$6])
     <Resource name="optimized exec plan">
       <![CDATA[
 Calc(select=[user_id_0, CAST('Gus' AS VARCHAR(2147483647)) AS name, order_id, 
CAST(payment_id AS VARCHAR(2147483647)) AS payment_id])
-+- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[INNER, LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], joinConditions=[true, 
(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
++- MultiJoin(commonJoinKey=[user_id_0], joinTypes=[LEFT, INNER], 
inputUniqueKeys=[(user_id_0), (order_id), (payment_id)], 
joinConditions=[(user_id_0 = user_id_1), (user_id_0 = user_id_2)], 
select=[user_id_0,order_id,user_id_1,payment_id,user_id_2], 
rowType=[RecordType(VARCHAR(2147483647) user_id_0, VARCHAR(2147483647) 
order_id, VARCHAR(2147483647) user_id_1, VARCHAR(2147483647) payment_id, 
VARCHAR(2147483647) user_id_2)])
    :- Exchange(distribution=[hash[user_id_0]])
    :  +- Calc(select=[user_id_0])
    :     +- ChangelogNormalize(key=[user_id_0], condition=[(name = 'Gus')])


Reply via email to