This is an automated email from the ASF dual-hosted git repository.
englefly 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 acbd78c56b6 [opt](Nereids)make orToIn rule appliable to in-pred
(#29990)
acbd78c56b6 is described below
commit acbd78c56b68b0c007d79cf765647136d31a5273
Author: minghong <[email protected]>
AuthorDate: Fri Jan 19 15:09:33 2024 +0800
[opt](Nereids)make orToIn rule appliable to in-pred (#29990)
make orToIn rule appliable to in-pred
---
.../nereids/rules/expression/rules/OrToIn.java | 51 +++++++++--------
.../doris/nereids/rules/rewrite/OrToInTest.java | 15 +++++
.../shape/query13.out | 54 +++++++++---------
.../shape/query15.out | 2 +-
.../shape/query48.out | 2 +-
.../shape/query85.out | 65 +++++++++++-----------
.../noStatsRfPrune/query13.out | 2 +-
.../noStatsRfPrune/query15.out | 2 +-
.../noStatsRfPrune/query48.out | 2 +-
.../noStatsRfPrune/query85.out | 2 +-
.../no_stats_shape/query13.out | 2 +-
.../no_stats_shape/query15.out | 2 +-
.../no_stats_shape/query48.out | 2 +-
.../no_stats_shape/query85.out | 2 +-
.../rf_prune/query13.out | 2 +-
.../rf_prune/query15.out | 2 +-
.../rf_prune/query48.out | 2 +-
.../rf_prune/query85.out | 58 +++++++++----------
.../nereids_tpcds_shape_sf100_p0/shape/query13.out | 2 +-
.../nereids_tpcds_shape_sf100_p0/shape/query15.out | 2 +-
.../nereids_tpcds_shape_sf100_p0/shape/query48.out | 2 +-
.../nereids_tpcds_shape_sf100_p0/shape/query85.out | 58 +++++++++----------
22 files changed, 175 insertions(+), 158 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
index aaa077d1994..6df68e47a04 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java
@@ -29,9 +29,9 @@ import
org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionRewri
import org.apache.doris.nereids.util.ExpressionUtils;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -71,9 +71,12 @@ public class OrToIn extends
DefaultExpressionRewriter<ExpressionRewriteContext>
public Expression visitOr(Or or, ExpressionRewriteContext ctx) {
Map<NamedExpression, Set<Literal>> slotNameToLiteral = new HashMap<>();
List<Expression> expressions = ExpressionUtils.extractDisjunction(or);
+ Map<Expression, NamedExpression> disConjunctToSlot = Maps.newHashMap();
for (Expression expression : expressions) {
if (expression instanceof EqualTo) {
- addSlotToLiteralMap((EqualTo) expression, slotNameToLiteral);
+ handleEqualTo((EqualTo) expression, slotNameToLiteral,
disConjunctToSlot);
+ } else if (expression instanceof InPredicate) {
+ handleInPredicate((InPredicate) expression, slotNameToLiteral,
disConjunctToSlot);
}
}
List<Expression> rewrittenOr = new ArrayList<>();
@@ -85,42 +88,42 @@ public class OrToIn extends
DefaultExpressionRewriter<ExpressionRewriteContext>
}
}
for (Expression expression : expressions) {
- if (!ableToConvertToIn(expression, slotNameToLiteral)) {
+ if (disConjunctToSlot.get(expression) == null) {
rewrittenOr.add(expression.accept(this, null));
+ } else {
+ Set<Literal> literals =
slotNameToLiteral.get(disConjunctToSlot.get(expression));
+ if (literals.size() < REWRITE_OR_TO_IN_PREDICATE_THRESHOLD) {
+ rewrittenOr.add(expression);
+ }
}
}
return ExpressionUtils.or(rewrittenOr);
}
- private void addSlotToLiteralMap(EqualTo equal, Map<NamedExpression,
Set<Literal>> slotNameToLiteral) {
+ private void handleEqualTo(EqualTo equal, Map<NamedExpression,
Set<Literal>> slotNameToLiteral,
+ Map<Expression, NamedExpression>
disConjunctToSlot) {
Expression left = equal.left();
Expression right = equal.right();
if (left instanceof NamedExpression && right instanceof Literal) {
addSlotToLiteral((NamedExpression) left, (Literal) right,
slotNameToLiteral);
- }
- if (right instanceof NamedExpression && left instanceof Literal) {
+ disConjunctToSlot.put(equal, (NamedExpression) left);
+ } else if (right instanceof NamedExpression && left instanceof
Literal) {
addSlotToLiteral((NamedExpression) right, (Literal) left,
slotNameToLiteral);
+ disConjunctToSlot.put(equal, (NamedExpression) right);
}
}
- private boolean ableToConvertToIn(Expression expression,
Map<NamedExpression, Set<Literal>> slotNameToLiteral) {
- if (!(expression instanceof EqualTo)) {
- return false;
- }
- EqualTo equalTo = (EqualTo) expression;
- Expression left = equalTo.left();
- Expression right = equalTo.right();
- NamedExpression namedExpression = null;
- if (left instanceof NamedExpression && right instanceof Literal) {
- namedExpression = (NamedExpression) left;
- }
- if (right instanceof NamedExpression && left instanceof Literal) {
- namedExpression = (NamedExpression) right;
+ private void handleInPredicate(InPredicate inPredicate,
Map<NamedExpression, Set<Literal>> slotNameToLiteral,
+ Map<Expression, NamedExpression>
disConjunctToSlot) {
+ // TODO a+b in (1,2,3...) is not supported now
+ if (inPredicate.getCompareExpr() instanceof NamedExpression
+ && inPredicate.getOptions().stream().allMatch(opt -> opt
instanceof Literal)) {
+ for (Expression opt : inPredicate.getOptions()) {
+ addSlotToLiteral((NamedExpression)
inPredicate.getCompareExpr(), (Literal) opt, slotNameToLiteral);
+ }
+ disConjunctToSlot.put(inPredicate, (NamedExpression)
inPredicate.getCompareExpr());
}
- return namedExpression != null
- && findSizeOfLiteralThatEqualToSameSlotInOr(namedExpression,
slotNameToLiteral)
- >= REWRITE_OR_TO_IN_PREDICATE_THRESHOLD;
}
public void addSlotToLiteral(NamedExpression namedExpression, Literal
literal,
@@ -129,8 +132,4 @@ public class OrToIn extends
DefaultExpressionRewriter<ExpressionRewriteContext>
literals.add(literal);
}
- public int findSizeOfLiteralThatEqualToSameSlotInOr(NamedExpression
namedExpression,
- Map<NamedExpression, Set<Literal>> slotNameToLiteral) {
- return slotNameToLiteral.getOrDefault(namedExpression,
Collections.emptySet()).size();
- }
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/OrToInTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/OrToInTest.java
index f77a66dd886..b4cf4451cbe 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/OrToInTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/OrToInTest.java
@@ -109,4 +109,19 @@ class OrToInTest extends ExpressionRewriteTestHelper {
rewritten.toSql());
}
+ @Test
+ void test6() {
+ String expr = "col = 1 or col = 2 or col in (1, 2, 3)";
+ Expression expression = PARSER.parseExpression(expr);
+ Expression rewritten = new OrToIn().rewrite(expression, new
ExpressionRewriteContext(null));
+ Assertions.assertEquals("col IN (1, 2, 3)", rewritten.toSql());
+ }
+
+ @Test
+ void test7() {
+ String expr = "A = 1 or A = 2 or abs(A)=5 or A in (1, 2, 3) or B = 1
or B = 2 or B in (1, 2, 3) or B+1 in (4, 5, 7)";
+ Expression expression = PARSER.parseExpression(expr);
+ Expression rewritten = new OrToIn().rewrite(expression, new
ExpressionRewriteContext(null));
+ Assertions.assertEquals("(((A IN (1, 2, 3) OR B IN (1, 2, 3)) OR
(abs(A) = 5)) OR (B + 1) IN (4, 5, 7))", rewritten.toSql());
+ }
}
diff --git
a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query13.out
b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query13.out
index 07764ae74a0..92c09059cd5 100644
--- a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query13.out
+++ b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query13.out
@@ -5,35 +5,35 @@ PhysicalResultSink
----PhysicalDistribute[DistributionSpecGather]
------hashAgg[LOCAL]
--------PhysicalProject
-----------hashJoin[INNER_JOIN] hashCondition=((store.s_store_sk =
store_sales.ss_store_sk)) otherCondition=() build RFs:RF4
s_store_sk->[ss_store_sk]
+----------hashJoin[INNER_JOIN] hashCondition=((store.s_store_sk =
store_sales.ss_store_sk)) otherCondition=() build RFs:RF4
ss_store_sk->[s_store_sk]
------------PhysicalProject
---------------hashJoin[INNER_JOIN]
hashCondition=((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk))
otherCondition=(((((((customer_demographics.cd_marital_status = 'M') AND
(customer_demographics.cd_education_status = 'College')) AND
((store_sales.ss_sales_price >= 100.00) AND (store_sales.ss_sales_price <=
150.00))) AND (household_demographics.hd_dep_count = 3)) OR
((((customer_demographics.cd_marital_status = 'D') AND
(customer_demographics.cd_education_status = 'Primary')) [...]
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------PhysicalProject
---------------------filter(((((customer_demographics.cd_marital_status = 'M')
AND (customer_demographics.cd_education_status = 'College')) OR
((customer_demographics.cd_marital_status = 'D') AND
(customer_demographics.cd_education_status = 'Primary'))) OR
((customer_demographics.cd_marital_status = 'W') AND
(customer_demographics.cd_education_status = '2 yr Degree'))))
-----------------------PhysicalOlapScan[customer_demographics] apply RFs: RF3
-----------------PhysicalDistribute[DistributionSpecHash]
-------------------PhysicalProject
---------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk))
otherCondition=() build RFs:RF2 hd_demo_sk->[ss_hdemo_sk]
-----------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
-------------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk))
otherCondition=((((ca_state IN ('IL', 'TN', 'TX') AND
((store_sales.ss_net_profit >= 100.00) AND (store_sales.ss_net_profit <=
200.00))) OR (ca_state IN ('ID', 'OH', 'WY') AND ((store_sales.ss_net_profit >=
150.00) AND (store_sales.ss_net_profit <= 300.00)))) OR (ca_state IN ('IA',
'MS', 'SC') AND ((store_sales.ss_net_profit >= 50.00) AND
(store_sales.ss_net_profit <= 25 [...]
---------------------------PhysicalDistribute[DistributionSpecHash]
-----------------------------PhysicalProject
-------------------------------filter((store_sales.ss_net_profit <= 300.00) and
(store_sales.ss_net_profit >= 50.00) and (store_sales.ss_sales_price <= 200.00)
and (store_sales.ss_sales_price >= 50.00))
---------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
RF1 RF2 RF4
---------------------------PhysicalDistribute[DistributionSpecHash]
+--------------PhysicalOlapScan[store] apply RFs: RF4
+------------PhysicalDistribute[DistributionSpecHash]
+--------------PhysicalProject
+----------------hashJoin[INNER_JOIN]
hashCondition=((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk))
otherCondition=(((((((customer_demographics.cd_marital_status = 'M') AND
(customer_demographics.cd_education_status = 'College')) AND
((store_sales.ss_sales_price >= 100.00) AND (store_sales.ss_sales_price <=
150.00))) AND (household_demographics.hd_dep_count = 3)) OR
((((customer_demographics.cd_marital_status = 'D') AND
(customer_demographics.cd_education_status = 'Primary' [...]
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------PhysicalProject
+----------------------filter(((((customer_demographics.cd_marital_status =
'M') AND (customer_demographics.cd_education_status = 'College')) OR
((customer_demographics.cd_marital_status = 'D') AND
(customer_demographics.cd_education_status = 'Primary'))) OR
((customer_demographics.cd_marital_status = 'W') AND
(customer_demographics.cd_education_status = '2 yr Degree'))))
+------------------------PhysicalOlapScan[customer_demographics] apply RFs: RF3
+------------------PhysicalDistribute[DistributionSpecHash]
+--------------------PhysicalProject
+----------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk))
otherCondition=() build RFs:RF2 hd_demo_sk->[ss_hdemo_sk]
+------------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF1 d_date_sk->[ss_sold_date_sk]
+--------------------------hashJoin[INNER_JOIN]
hashCondition=((store_sales.ss_addr_sk = customer_address.ca_address_sk))
otherCondition=((((ca_state IN ('IL', 'TN', 'TX') AND
((store_sales.ss_net_profit >= 100.00) AND (store_sales.ss_net_profit <=
200.00))) OR (ca_state IN ('ID', 'OH', 'WY') AND ((store_sales.ss_net_profit >=
150.00) AND (store_sales.ss_net_profit <= 300.00)))) OR (ca_state IN ('IA',
'MS', 'SC') AND ((store_sales.ss_net_profit >= 50.00) AND
(store_sales.ss_net_profit <= [...]
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------PhysicalProject
+--------------------------------filter((store_sales.ss_net_profit <= 300.00)
and (store_sales.ss_net_profit >= 50.00) and (store_sales.ss_sales_price <=
200.00) and (store_sales.ss_sales_price >= 50.00))
+----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
RF1 RF2
+----------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------PhysicalProject
+--------------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('IA', 'ID', 'IL', 'MS', 'OH', 'SC', 'TN', 'TX', 'WY'))
+----------------------------------PhysicalOlapScan[customer_address]
+--------------------------PhysicalDistribute[DistributionSpecReplicated]
----------------------------PhysicalProject
-------------------------------filter(((ca_state IN ('IL', 'TN', 'TX') OR
ca_state IN ('ID', 'OH', 'WY')) OR ca_state IN ('IA', 'MS', 'SC')) and
(customer_address.ca_country = 'United States'))
---------------------------------PhysicalOlapScan[customer_address]
+------------------------------filter((date_dim.d_year = 2001))
+--------------------------------PhysicalOlapScan[date_dim]
------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------PhysicalProject
-----------------------------filter((date_dim.d_year = 2001))
-------------------------------PhysicalOlapScan[date_dim]
-----------------------PhysicalDistribute[DistributionSpecReplicated]
-------------------------PhysicalProject
---------------------------filter(hd_dep_count IN (1, 3))
-----------------------------PhysicalOlapScan[household_demographics]
-------------PhysicalDistribute[DistributionSpecReplicated]
---------------PhysicalProject
-----------------PhysicalOlapScan[store]
+----------------------------filter(hd_dep_count IN (1, 3))
+------------------------------PhysicalOlapScan[household_demographics]
diff --git
a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query15.out
b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query15.out
index 76dbaeb392c..6d388f54994 100644
--- a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query15.out
+++ b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query15.out
@@ -8,7 +8,7 @@ PhysicalResultSink
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
--------------PhysicalProject
-----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((substring(ca_zip, 1, 5) IN ('80348', '81792', '83405',
'85392', '85460', '85669', '86197', '86475', '88274') OR ca_state IN ('CA',
'GA', 'WA')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF2
c_customer_sk->[cs_bill_customer_sk]
+----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((ca_state IN ('CA', 'GA', 'WA') OR substring(ca_zip, 1, 5) IN
('80348', '81792', '83405', '85392', '85460', '85669', '86197', '86475',
'88274')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF2
c_customer_sk->[cs_bill_customer_sk]
------------------PhysicalDistribute[DistributionSpecHash]
--------------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
----------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query48.out
b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query48.out
index 2fcf8104b44..4069222cacb 100644
--- a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query48.out
+++ b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query48.out
@@ -21,7 +21,7 @@ PhysicalResultSink
------------------------------PhysicalOlapScan[customer_demographics]
--------------------PhysicalDistribute[DistributionSpecHash]
----------------------PhysicalProject
-------------------------filter(((ca_state IN ('ND', 'NY', 'SD') OR ca_state IN
('GA', 'KS', 'MD')) OR ca_state IN ('CO', 'MN', 'NC')) and
(customer_address.ca_country = 'United States'))
+------------------------filter((customer_address.ca_country = 'United States')
and ca_state IN ('CO', 'GA', 'KS', 'MD', 'MN', 'NC', 'ND', 'NY', 'SD'))
--------------------------PhysicalOlapScan[customer_address]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query85.out
b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query85.out
index b120d3ff5e0..547042a9a33 100644
--- a/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query85.out
+++ b/regression-test/data/nereids_tpcds_shape_sf1000_p0/shape/query85.out
@@ -9,43 +9,42 @@ PhysicalResultSink
------------PhysicalDistribute[DistributionSpecHash]
--------------hashAgg[LOCAL]
----------------PhysicalProject
-------------------hashJoin[INNER_JOIN] hashCondition=((reason.r_reason_sk =
web_returns.wr_reason_sk)) otherCondition=() build RFs:RF9
r_reason_sk->[wr_reason_sk]
+------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=() build RFs:RF9 ws_web_page_sk->[wp_web_page_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('IA', 'NC',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('GA', 'WI', 'WV') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('KY', 'OK',
'VA') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_profit <=
250.00) [...]
-------------------------PhysicalProject
---------------------------filter(((ca_state IN ('IA', 'NC', 'TX') OR ca_state
IN ('GA', 'WI', 'WV')) OR ca_state IN ('KY', 'OK', 'VA')) and
(customer_address.ca_country = 'United States'))
-----------------------------PhysicalOlapScan[customer_address] apply RFs: RF8
-------------------------PhysicalDistribute[DistributionSpecHash]
+----------------------PhysicalOlapScan[web_page] apply RFs: RF9
+--------------------PhysicalDistribute[DistributionSpecHash]
+----------------------PhysicalProject
+------------------------hashJoin[INNER_JOIN]
hashCondition=((reason.r_reason_sk = web_returns.wr_reason_sk))
otherCondition=() build RFs:RF8 r_reason_sk->[wr_reason_sk]
--------------------------PhysicalProject
-----------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=() build RFs:RF7 ws_web_page_sk->[wp_web_page_sk]
+----------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF5
cd_marital_status->[cd_marital_status];RF6
cd_education_status->[cd_education_status];RF7
wr_returning_cdemo_sk->[cd_demo_sk]
------------------------------PhysicalProject
---------------------------------PhysicalOlapScan[web_page] apply RFs: RF7
-------------------------------PhysicalDistribute[DistributionSpecHash]
---------------------------------PhysicalProject
-----------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF4
cd_marital_status->[cd_marital_status];RF5
cd_education_status->[cd_education_status];RF6
wr_returning_cdemo_sk->[cd_demo_sk]
+--------------------------------PhysicalOlapScan[customer_demographics] apply
RFs: RF5 RF6 RF7
+------------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('IA', 'NC',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('GA', 'WI', 'WV') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('KY', 'OK',
'VA') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_profit
[...]
+----------------------------------PhysicalProject
+------------------------------------filter((customer_address.ca_country =
'United States') and ca_state IN ('GA', 'IA', 'KY', 'NC', 'OK', 'TX', 'VA',
'WI', 'WV'))
+--------------------------------------PhysicalOlapScan[customer_address] apply
RFs: RF4
+----------------------------------PhysicalDistribute[DistributionSpecHash]
------------------------------------PhysicalProject
---------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF4 RF5 RF6
-------------------------------------PhysicalDistribute[DistributionSpecReplicated]
---------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'D') AND (cd1.cd_education_status
= 'Primary')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'College')) AND ((web_sales.ws_sales_price >= 50.00)
AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_marital_s [...]
-------------------------------------------PhysicalDistribute[DistributionSpecHash]
---------------------------------------------PhysicalProject
-----------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+--------------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'D') AND (cd1.cd_education_status
= 'Primary')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'College')) AND ((web_sales.ws_sales_price >= 50.00)
AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_marital_sta [...]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------PhysicalProject
+--------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+----------------------------------------------PhysicalProject
+------------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2 RF3 RF8
+----------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
------------------------------------------------PhysicalProject
---------------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2 RF3 RF9
-------------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+--------------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and
(web_sales.ws_sales_price <= 200.00) and (web_sales.ws_sales_price >= 50.00))
+----------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0
+------------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------------------------------PhysicalProject
-----------------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and
(web_sales.ws_sales_price <= 200.00) and (web_sales.ws_sales_price >= 50.00))
-------------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0
---------------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------------------------------------PhysicalProject
-------------------------------------------------------filter((date_dim.d_year
= 1998))
---------------------------------------------------------PhysicalOlapScan[date_dim]
-------------------------------------------PhysicalDistribute[DistributionSpecHash]
---------------------------------------------PhysicalProject
-----------------------------------------------filter(((((cd1.cd_marital_status
= 'D') AND (cd1.cd_education_status = 'Primary')) OR ((cd1.cd_marital_status =
'S') AND (cd1.cd_education_status = 'College'))) OR ((cd1.cd_marital_status =
'U') AND (cd1.cd_education_status = 'Advanced Degree'))))
-------------------------------------------------PhysicalOlapScan[customer_demographics]
---------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------PhysicalProject
-------------------------PhysicalOlapScan[reason]
+----------------------------------------------------filter((date_dim.d_year =
1998))
+------------------------------------------------------PhysicalOlapScan[date_dim]
+----------------------------------------PhysicalDistribute[DistributionSpecHash]
+------------------------------------------PhysicalProject
+--------------------------------------------filter(((((cd1.cd_marital_status =
'D') AND (cd1.cd_education_status = 'Primary')) OR ((cd1.cd_marital_status =
'S') AND (cd1.cd_education_status = 'College'))) OR ((cd1.cd_marital_status =
'U') AND (cd1.cd_education_status = 'Advanced Degree'))))
+----------------------------------------------PhysicalOlapScan[customer_demographics]
+--------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------PhysicalProject
+------------------------------PhysicalOlapScan[reason]
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query13.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query13.out
index 9689a105682..09eea0486ff 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query13.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query13.out
@@ -25,7 +25,7 @@ PhysicalResultSink
--------------------------PhysicalOlapScan[store]
------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------PhysicalProject
-----------------------filter(((ca_state IN ('KS', 'MI', 'SD') OR ca_state IN
('CO', 'MO', 'ND')) OR ca_state IN ('NH', 'OH', 'TX')) and
(customer_address.ca_country = 'United States'))
+----------------------filter((customer_address.ca_country = 'United States')
and ca_state IN ('CO', 'KS', 'MI', 'MO', 'ND', 'NH', 'OH', 'SD', 'TX'))
------------------------PhysicalOlapScan[customer_address]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query15.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query15.out
index d1254304e05..7ab12ff23f2 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query15.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query15.out
@@ -10,7 +10,7 @@ PhysicalResultSink
--------------PhysicalProject
----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF2 d_date_sk->[cs_sold_date_sk]
------------------PhysicalProject
---------------------hashJoin[INNER_JOIN]
hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk))
otherCondition=(((substring(ca_zip, 1, 5) IN ('80348', '81792', '83405',
'85392', '85460', '85669', '86197', '86475', '88274') OR ca_state IN ('CA',
'GA', 'WA')) OR (catalog_sales.cs_sales_price > 500.00)))
+--------------------hashJoin[INNER_JOIN]
hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk))
otherCondition=(((ca_state IN ('CA', 'GA', 'WA') OR substring(ca_zip, 1, 5) IN
('80348', '81792', '83405', '85392', '85460', '85669', '86197', '86475',
'88274')) OR (catalog_sales.cs_sales_price > 500.00)))
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------PhysicalProject
--------------------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=()
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query48.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query48.out
index 59167dad86d..25e8c3965aa 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query48.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query48.out
@@ -24,7 +24,7 @@ PhysicalResultSink
------------------------PhysicalOlapScan[store]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
---------------------filter(((ca_state IN ('IA', 'MD', 'MN') OR ca_state IN
('IL', 'TX', 'VA')) OR ca_state IN ('IN', 'MI', 'WI')) and
(customer_address.ca_country = 'United States'))
+--------------------filter((customer_address.ca_country = 'United States') and
ca_state IN ('IA', 'IL', 'IN', 'MD', 'MI', 'MN', 'TX', 'VA', 'WI'))
----------------------PhysicalOlapScan[customer_address]
------------PhysicalDistribute[DistributionSpecReplicated]
--------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query85.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query85.out
index 251ba0bd5a5..a381fb5be44 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query85.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/noStatsRfPrune/query85.out
@@ -40,7 +40,7 @@ PhysicalResultSink
------------------------------------PhysicalOlapScan[customer_demographics]
----------------------------PhysicalDistribute[DistributionSpecReplicated]
------------------------------PhysicalProject
---------------------------------filter(((ca_state IN ('DE', 'FL', 'TX') OR
ca_state IN ('ID', 'IN', 'ND')) OR ca_state IN ('IL', 'MT', 'OH')) and
(customer_address.ca_country = 'United States'))
+--------------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('DE', 'FL', 'ID', 'IL', 'IN', 'MT', 'ND', 'OH', 'TX'))
----------------------------------PhysicalOlapScan[customer_address]
------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query13.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query13.out
index bb8d755b7de..55f47793097 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query13.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query13.out
@@ -25,7 +25,7 @@ PhysicalResultSink
--------------------------PhysicalOlapScan[store]
------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------PhysicalProject
-----------------------filter(((ca_state IN ('KS', 'MI', 'SD') OR ca_state IN
('CO', 'MO', 'ND')) OR ca_state IN ('NH', 'OH', 'TX')) and
(customer_address.ca_country = 'United States'))
+----------------------filter((customer_address.ca_country = 'United States')
and ca_state IN ('CO', 'KS', 'MI', 'MO', 'ND', 'NH', 'OH', 'SD', 'TX'))
------------------------PhysicalOlapScan[customer_address]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query15.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query15.out
index 8e929d24b0c..3ab21912425 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query15.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query15.out
@@ -10,7 +10,7 @@ PhysicalResultSink
--------------PhysicalProject
----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF2 d_date_sk->[cs_sold_date_sk]
------------------PhysicalProject
---------------------hashJoin[INNER_JOIN]
hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk))
otherCondition=(((substring(ca_zip, 1, 5) IN ('80348', '81792', '83405',
'85392', '85460', '85669', '86197', '86475', '88274') OR ca_state IN ('CA',
'GA', 'WA')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF1
ca_address_sk->[c_current_addr_sk]
+--------------------hashJoin[INNER_JOIN]
hashCondition=((customer.c_current_addr_sk = customer_address.ca_address_sk))
otherCondition=(((ca_state IN ('CA', 'GA', 'WA') OR substring(ca_zip, 1, 5) IN
('80348', '81792', '83405', '85392', '85460', '85669', '86197', '86475',
'88274')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF1
ca_address_sk->[c_current_addr_sk]
----------------------PhysicalDistribute[DistributionSpecHash]
------------------------PhysicalProject
--------------------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=() build RFs:RF0 c_customer_sk->[cs_bill_customer_sk]
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query48.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query48.out
index 496160afe53..463c25b9c7d 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query48.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query48.out
@@ -24,7 +24,7 @@ PhysicalResultSink
------------------------PhysicalOlapScan[store]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
---------------------filter(((ca_state IN ('IA', 'MD', 'MN') OR ca_state IN
('IL', 'TX', 'VA')) OR ca_state IN ('IN', 'MI', 'WI')) and
(customer_address.ca_country = 'United States'))
+--------------------filter((customer_address.ca_country = 'United States') and
ca_state IN ('IA', 'IL', 'IN', 'MD', 'MI', 'MN', 'TX', 'VA', 'WI'))
----------------------PhysicalOlapScan[customer_address]
------------PhysicalDistribute[DistributionSpecReplicated]
--------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query85.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query85.out
index 29433f93b42..fdc9d754862 100644
---
a/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query85.out
+++
b/regression-test/data/nereids_tpcds_shape_sf100_p0/no_stats_shape/query85.out
@@ -40,7 +40,7 @@ PhysicalResultSink
------------------------------------PhysicalOlapScan[customer_demographics]
----------------------------PhysicalDistribute[DistributionSpecReplicated]
------------------------------PhysicalProject
---------------------------------filter(((ca_state IN ('DE', 'FL', 'TX') OR
ca_state IN ('ID', 'IN', 'ND')) OR ca_state IN ('IL', 'MT', 'OH')) and
(customer_address.ca_country = 'United States'))
+--------------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('DE', 'FL', 'ID', 'IL', 'IN', 'MT', 'ND', 'OH', 'TX'))
----------------------------------PhysicalOlapScan[customer_address]
------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query13.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query13.out
index 5e8f8d4e9b2..441b3d76382 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query13.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query13.out
@@ -25,7 +25,7 @@ PhysicalResultSink
----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
RF1 RF2
----------------------------PhysicalDistribute[DistributionSpecHash]
------------------------------PhysicalProject
---------------------------------filter(((ca_state IN ('KS', 'MI', 'SD') OR
ca_state IN ('CO', 'MO', 'ND')) OR ca_state IN ('NH', 'OH', 'TX')) and
(customer_address.ca_country = 'United States'))
+--------------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('CO', 'KS', 'MI', 'MO', 'ND', 'NH', 'OH', 'SD', 'TX'))
----------------------------------PhysicalOlapScan[customer_address]
--------------------------PhysicalDistribute[DistributionSpecReplicated]
----------------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query15.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query15.out
index 7b670f886ae..f2d4abf7f78 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query15.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query15.out
@@ -8,7 +8,7 @@ PhysicalResultSink
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
--------------PhysicalProject
-----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((substring(ca_zip, 1, 5) IN ('80348', '81792', '83405',
'85392', '85460', '85669', '86197', '86475', '88274') OR ca_state IN ('CA',
'GA', 'WA')) OR (catalog_sales.cs_sales_price > 500.00)))
+----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((ca_state IN ('CA', 'GA', 'WA') OR substring(ca_zip, 1, 5) IN
('80348', '81792', '83405', '85392', '85460', '85669', '86197', '86475',
'88274')) OR (catalog_sales.cs_sales_price > 500.00)))
------------------PhysicalDistribute[DistributionSpecHash]
--------------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
----------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query48.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query48.out
index a4f0b1a09f9..ad7e5318fda 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query48.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query48.out
@@ -21,7 +21,7 @@ PhysicalResultSink
------------------------------PhysicalOlapScan[customer_demographics]
--------------------PhysicalDistribute[DistributionSpecHash]
----------------------PhysicalProject
-------------------------filter(((ca_state IN ('IA', 'MD', 'MN') OR ca_state IN
('IL', 'TX', 'VA')) OR ca_state IN ('IN', 'MI', 'WI')) and
(customer_address.ca_country = 'United States'))
+------------------------filter((customer_address.ca_country = 'United States')
and ca_state IN ('IA', 'IL', 'IN', 'MD', 'MI', 'MN', 'TX', 'VA', 'WI'))
--------------------------PhysicalOlapScan[customer_address]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query85.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query85.out
index c6f76a0e6b4..2e35ec10486 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query85.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/rf_prune/query85.out
@@ -11,38 +11,40 @@ PhysicalResultSink
----------------PhysicalProject
------------------hashJoin[INNER_JOIN] hashCondition=((reason.r_reason_sk =
web_returns.wr_reason_sk)) otherCondition=()
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=()
+----------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('DE', 'FL',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('ID', 'IN', 'ND') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('IL', 'MT',
'OH') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_profit <=
250.00) [...]
------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF5
cd_marital_status->[cd_marital_status];RF6
cd_education_status->[cd_education_status];RF7
wr_returning_cdemo_sk->[cd_demo_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[customer_demographics] apply
RFs: RF5 RF6 RF7
-----------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('DE', 'FL', 'ID', 'IL', 'IN', 'MT', 'ND', 'OH', 'TX'))
+----------------------------PhysicalOlapScan[customer_address] apply RFs: RF8
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=() build RFs:RF7 ws_web_page_sk->[wp_web_page_sk]
------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status
= '4 yr Degree')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'Secondary')) AND ((web_sales.ws_sales_price >=
50.00) AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_marital_sta
[...]
-----------------------------------PhysicalProject
-------------------------------------filter(((((cd1.cd_marital_status = 'M')
AND (cd1.cd_education_status = '4 yr Degree')) OR ((cd1.cd_marital_status =
'S') AND (cd1.cd_education_status = 'Secondary'))) OR ((cd1.cd_marital_status =
'W') AND (cd1.cd_education_status = 'Advanced Degree'))))
---------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF4
-----------------------------------PhysicalDistribute[DistributionSpecReplicated]
-------------------------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('DE', 'FL',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('ID', 'IN', 'ND') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('IL', 'MT',
'OH') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_pro [...]
+--------------------------------PhysicalOlapScan[web_page] apply RFs: RF7
+------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF4
cd_marital_status->[cd_marital_status];RF5
cd_education_status->[cd_education_status];RF6
wr_returning_cdemo_sk->[cd_demo_sk]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF4 RF5 RF6
+------------------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
-------------------------------------------PhysicalProject
---------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2 RF3
-------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+----------------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status
= '4 yr Degree')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'Secondary')) AND ((web_sales.ws_sales_price >=
50.00) AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_mar [...]
+------------------------------------------PhysicalDistribute[DistributionSpecHash]
--------------------------------------------PhysicalProject
-----------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and (web_sales.ws_sales_price
<= 200.00) and (web_sales.ws_sales_price >= 50.00))
-------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0
---------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------------------------------PhysicalProject
-------------------------------------------------filter((date_dim.d_year =
2000))
---------------------------------------------------PhysicalOlapScan[date_dim]
---------------------------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------------------------PhysicalProject
-------------------------------------------filter(((ca_state IN ('DE', 'FL',
'TX') OR ca_state IN ('ID', 'IN', 'ND')) OR ca_state IN ('IL', 'MT', 'OH')) and
(customer_address.ca_country = 'United States'))
---------------------------------------------PhysicalOlapScan[customer_address]
-------------------------PhysicalDistribute[DistributionSpecReplicated]
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[web_page]
+----------------------------------------------filter(((((cd1.cd_marital_status
= 'M') AND (cd1.cd_education_status = '4 yr Degree')) OR
((cd1.cd_marital_status = 'S') AND (cd1.cd_education_status = 'Secondary'))) OR
((cd1.cd_marital_status = 'W') AND (cd1.cd_education_status = 'Advanced
Degree'))))
+------------------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF3
+------------------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+------------------------------------------------PhysicalProject
+--------------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2
+------------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+--------------------------------------------------PhysicalProject
+----------------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and
(web_sales.ws_sales_price <= 200.00) and (web_sales.ws_sales_price >= 50.00))
+------------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0
+--------------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_year
= 2000))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
--------------------PhysicalDistribute[DistributionSpecReplicated]
----------------------PhysicalProject
------------------------PhysicalOlapScan[reason]
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query13.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query13.out
index 5e8f8d4e9b2..441b3d76382 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query13.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query13.out
@@ -25,7 +25,7 @@ PhysicalResultSink
----------------------------------PhysicalOlapScan[store_sales] apply RFs: RF0
RF1 RF2
----------------------------PhysicalDistribute[DistributionSpecHash]
------------------------------PhysicalProject
---------------------------------filter(((ca_state IN ('KS', 'MI', 'SD') OR
ca_state IN ('CO', 'MO', 'ND')) OR ca_state IN ('NH', 'OH', 'TX')) and
(customer_address.ca_country = 'United States'))
+--------------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('CO', 'KS', 'MI', 'MO', 'ND', 'NH', 'OH', 'SD', 'TX'))
----------------------------------PhysicalOlapScan[customer_address]
--------------------------PhysicalDistribute[DistributionSpecReplicated]
----------------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query15.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query15.out
index 763ac71df87..e89101870b8 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query15.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query15.out
@@ -8,7 +8,7 @@ PhysicalResultSink
----------PhysicalDistribute[DistributionSpecHash]
------------hashAgg[LOCAL]
--------------PhysicalProject
-----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((substring(ca_zip, 1, 5) IN ('80348', '81792', '83405',
'85392', '85460', '85669', '86197', '86475', '88274') OR ca_state IN ('CA',
'GA', 'WA')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF2
c_customer_sk->[cs_bill_customer_sk]
+----------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_bill_customer_sk = customer.c_customer_sk))
otherCondition=(((ca_state IN ('CA', 'GA', 'WA') OR substring(ca_zip, 1, 5) IN
('80348', '81792', '83405', '85392', '85460', '85669', '86197', '86475',
'88274')) OR (catalog_sales.cs_sales_price > 500.00))) build RFs:RF2
c_customer_sk->[cs_bill_customer_sk]
------------------PhysicalDistribute[DistributionSpecHash]
--------------------hashJoin[INNER_JOIN]
hashCondition=((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF1 d_date_sk->[cs_sold_date_sk]
----------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query48.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query48.out
index 15f1054ab46..fc7edfee4de 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query48.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query48.out
@@ -21,7 +21,7 @@ PhysicalResultSink
------------------------------PhysicalOlapScan[customer_demographics]
--------------------PhysicalDistribute[DistributionSpecHash]
----------------------PhysicalProject
-------------------------filter(((ca_state IN ('IA', 'MD', 'MN') OR ca_state IN
('IL', 'TX', 'VA')) OR ca_state IN ('IN', 'MI', 'WI')) and
(customer_address.ca_country = 'United States'))
+------------------------filter((customer_address.ca_country = 'United States')
and ca_state IN ('IA', 'IL', 'IN', 'MD', 'MI', 'MN', 'TX', 'VA', 'WI'))
--------------------------PhysicalOlapScan[customer_address]
----------------PhysicalDistribute[DistributionSpecReplicated]
------------------PhysicalProject
diff --git
a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query85.out
b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query85.out
index dc257985c6b..77aa3c3b857 100644
--- a/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query85.out
+++ b/regression-test/data/nereids_tpcds_shape_sf100_p0/shape/query85.out
@@ -11,38 +11,40 @@ PhysicalResultSink
----------------PhysicalProject
------------------hashJoin[INNER_JOIN] hashCondition=((reason.r_reason_sk =
web_returns.wr_reason_sk)) otherCondition=() build RFs:RF9
r_reason_sk->[wr_reason_sk]
--------------------PhysicalProject
-----------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=() build RFs:RF8 wp_web_page_sk->[ws_web_page_sk]
+----------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('DE', 'FL',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('ID', 'IN', 'ND') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('IL', 'MT',
'OH') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_profit <=
250.00) [...]
------------------------PhysicalProject
---------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF5
cd_marital_status->[cd_marital_status];RF6
cd_education_status->[cd_education_status];RF7
wr_returning_cdemo_sk->[cd_demo_sk]
-----------------------------PhysicalProject
-------------------------------PhysicalOlapScan[customer_demographics] apply
RFs: RF5 RF6 RF7
-----------------------------PhysicalDistribute[DistributionSpecReplicated]
+--------------------------filter((customer_address.ca_country = 'United
States') and ca_state IN ('DE', 'FL', 'ID', 'IL', 'IN', 'MT', 'ND', 'OH', 'TX'))
+----------------------------PhysicalOlapScan[customer_address] apply RFs: RF8
+------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------PhysicalProject
+----------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_web_page_sk = web_page.wp_web_page_sk))
otherCondition=() build RFs:RF7 ws_web_page_sk->[wp_web_page_sk]
------------------------------PhysicalProject
---------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status
= '4 yr Degree')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'Secondary')) AND ((web_sales.ws_sales_price >=
50.00) AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_marital_sta
[...]
-----------------------------------PhysicalProject
-------------------------------------filter(((((cd1.cd_marital_status = 'M')
AND (cd1.cd_education_status = '4 yr Degree')) OR ((cd1.cd_marital_status =
'S') AND (cd1.cd_education_status = 'Secondary'))) OR ((cd1.cd_marital_status =
'W') AND (cd1.cd_education_status = 'Advanced Degree'))))
---------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF4
-----------------------------------PhysicalDistribute[DistributionSpecReplicated]
-------------------------------------hashJoin[INNER_JOIN]
hashCondition=((customer_address.ca_address_sk =
web_returns.wr_refunded_addr_sk)) otherCondition=((((ca_state IN ('DE', 'FL',
'TX') AND ((web_sales.ws_net_profit >= 100.00) AND (web_sales.ws_net_profit <=
200.00))) OR (ca_state IN ('ID', 'IN', 'ND') AND ((web_sales.ws_net_profit >=
150.00) AND (web_sales.ws_net_profit <= 300.00)))) OR (ca_state IN ('IL', 'MT',
'OH') AND ((web_sales.ws_net_profit >= 50.00) AND (web_sales.ws_net_pro [...]
+--------------------------------PhysicalOlapScan[web_page] apply RFs: RF7
+------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------PhysicalProject
+----------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_education_status = cd2.cd_education_status) and
(cd1.cd_marital_status = cd2.cd_marital_status) and (cd2.cd_demo_sk =
web_returns.wr_returning_cdemo_sk)) otherCondition=() build RFs:RF4
cd_marital_status->[cd_marital_status];RF5
cd_education_status->[cd_education_status];RF6
wr_returning_cdemo_sk->[cd_demo_sk]
+------------------------------------PhysicalProject
+--------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF4 RF5 RF6
+------------------------------------PhysicalDistribute[DistributionSpecReplicated]
--------------------------------------PhysicalProject
-----------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
-------------------------------------------PhysicalProject
---------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2 RF3 RF9
-------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+----------------------------------------hashJoin[INNER_JOIN]
hashCondition=((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk))
otherCondition=((((((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status
= '4 yr Degree')) AND ((web_sales.ws_sales_price >= 100.00) AND
(web_sales.ws_sales_price <= 150.00))) OR (((cd1.cd_marital_status = 'S') AND
(cd1.cd_education_status = 'Secondary')) AND ((web_sales.ws_sales_price >=
50.00) AND (web_sales.ws_sales_price <= 100.00)))) OR (((cd1.cd_mar [...]
+------------------------------------------PhysicalDistribute[DistributionSpecHash]
--------------------------------------------PhysicalProject
-----------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and (web_sales.ws_sales_price
<= 200.00) and (web_sales.ws_sales_price >= 50.00))
-------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0 RF8
---------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------------------------------PhysicalProject
-------------------------------------------------filter((date_dim.d_year =
2000))
---------------------------------------------------PhysicalOlapScan[date_dim]
---------------------------------------PhysicalDistribute[DistributionSpecReplicated]
-----------------------------------------PhysicalProject
-------------------------------------------filter(((ca_state IN ('DE', 'FL',
'TX') OR ca_state IN ('ID', 'IN', 'ND')) OR ca_state IN ('IL', 'MT', 'OH')) and
(customer_address.ca_country = 'United States'))
---------------------------------------------PhysicalOlapScan[customer_address]
-------------------------PhysicalDistribute[DistributionSpecReplicated]
---------------------------PhysicalProject
-----------------------------PhysicalOlapScan[web_page]
+----------------------------------------------filter(((((cd1.cd_marital_status
= 'M') AND (cd1.cd_education_status = '4 yr Degree')) OR
((cd1.cd_marital_status = 'S') AND (cd1.cd_education_status = 'Secondary'))) OR
((cd1.cd_marital_status = 'W') AND (cd1.cd_education_status = 'Advanced
Degree'))))
+------------------------------------------------PhysicalOlapScan[customer_demographics]
apply RFs: RF3
+------------------------------------------PhysicalDistribute[DistributionSpecHash]
+--------------------------------------------PhysicalProject
+----------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_item_sk = web_returns.wr_item_sk) and
(web_sales.ws_order_number = web_returns.wr_order_number)) otherCondition=()
build RFs:RF1 ws_item_sk->[wr_item_sk];RF2 ws_order_number->[wr_order_number]
+------------------------------------------------PhysicalProject
+--------------------------------------------------PhysicalOlapScan[web_returns]
apply RFs: RF1 RF2 RF9
+------------------------------------------------hashJoin[INNER_JOIN]
hashCondition=((web_sales.ws_sold_date_sk = date_dim.d_date_sk))
otherCondition=() build RFs:RF0 d_date_sk->[ws_sold_date_sk]
+--------------------------------------------------PhysicalProject
+----------------------------------------------------filter((web_sales.ws_net_profit
<= 300.00) and (web_sales.ws_net_profit >= 50.00) and
(web_sales.ws_sales_price <= 200.00) and (web_sales.ws_sales_price >= 50.00))
+------------------------------------------------------PhysicalOlapScan[web_sales]
apply RFs: RF0
+--------------------------------------------------PhysicalDistribute[DistributionSpecReplicated]
+----------------------------------------------------PhysicalProject
+------------------------------------------------------filter((date_dim.d_year
= 2000))
+--------------------------------------------------------PhysicalOlapScan[date_dim]
--------------------PhysicalDistribute[DistributionSpecReplicated]
----------------------PhysicalProject
------------------------PhysicalOlapScan[reason]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]