[fix](colocate) fix colocate join while multi tables (#37729) (#37859)

cherry-pick #37729 to branch-2.1
This commit is contained in:
camby
2024-07-16 19:02:36 +08:00
committed by GitHub
parent 8440303b91
commit faa425bee5
2 changed files with 32 additions and 6 deletions

View File

@ -310,12 +310,9 @@ public class JoinUtils {
SlotReference leftSlot = (SlotReference) leftChild;
SlotReference rightSlot = (SlotReference) rightChild;
Integer leftIndex = null;
Integer rightIndex = null;
if (leftSlot.getTable().isPresent() && leftSlot.getTable().get().getId() == leftHashSpec.getTableId()) {
leftIndex = leftHashSpec.getExprIdToEquivalenceSet().get(leftSlot.getExprId());
rightIndex = rightHashSpec.getExprIdToEquivalenceSet().get(rightSlot.getExprId());
} else {
Integer leftIndex = leftHashSpec.getExprIdToEquivalenceSet().get(leftSlot.getExprId());
Integer rightIndex = rightHashSpec.getExprIdToEquivalenceSet().get(rightSlot.getExprId());
if (leftIndex == null) {
leftIndex = rightHashSpec.getExprIdToEquivalenceSet().get(leftSlot.getExprId());
rightIndex = leftHashSpec.getExprIdToEquivalenceSet().get(rightSlot.getExprId());
}

View File

@ -79,4 +79,33 @@ suite("test_colocate_join_of_column_order") {
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_t1`; """
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_t2`; """
// multi tables
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_ta`; """
sql """
CREATE TABLE IF NOT EXISTS `test_colocate_join_of_column_order_ta` ( `c1` bigint NULL, `c2` bigint NULL)
DISTRIBUTED BY HASH(c1) PROPERTIES ( "replication_num" = "1", "colocate_with" = "group_column_order3");
"""
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_tb`; """
sql """
CREATE TABLE IF NOT EXISTS `test_colocate_join_of_column_order_tb` ( `c1` bigint NULL, `c2` bigint NULL)
DISTRIBUTED BY HASH(c1) PROPERTIES ( "replication_num" = "1", "colocate_with" = "group_column_order3");
"""
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_tc`; """
sql """
CREATE TABLE IF NOT EXISTS `test_colocate_join_of_column_order_tc` ( `c1` bigint NULL, `c2` bigint NULL)
DISTRIBUTED BY HASH(c1) PROPERTIES ( "replication_num" = "1", "colocate_with" = "group_column_order3");
"""
sql """insert into test_colocate_join_of_column_order_ta values(1,1);"""
sql """insert into test_colocate_join_of_column_order_tb values(1,1);"""
sql """insert into test_colocate_join_of_column_order_tc values(1,1);"""
explain {
sql("""select /*+ set_var(disable_join_reorder=true) */ * from test_colocate_join_of_column_order_ta join [shuffle] (select cast((c2 + 1) as bigint) c2 from test_colocate_join_of_column_order_tb) test_colocate_join_of_column_order_tb on test_colocate_join_of_column_order_ta.c1 = test_colocate_join_of_column_order_tb.c2 join [shuffle] test_colocate_join_of_column_order_tc on test_colocate_join_of_column_order_tb.c2 = test_colocate_join_of_column_order_tc.c1;""");
contains "COLOCATE"
}
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_ta`; """
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_tb`; """
sql """ DROP TABLE IF EXISTS `test_colocate_join_of_column_order_tc`; """
}