Michael Smith has uploaded a new patch set (#11) to the change originally created by Qifan Chen. ( http://gerrit.cloudera.org:8080/18458 )
Change subject: IMPALA-11274: CNF Rewrite causes a regress in join node performance ...................................................................... IMPALA-11274: CNF Rewrite causes a regress in join node performance This patch defines a subset of all predicates that are common and relatively inexpensive to compute. Such predicates must involve columns, constants, simple math or cast functions only. Examples of the subset of the predicates allowed: 1. (a = 1 AND cast(b as int) = 2) OR (c = d AND e = f) 2. a in ('1', '2', '3') OR ((b = 'abc') AND (c = d)) 3. (a between 1 and 100) OR ((b is null) AND (c = d)) Examples of the predicates not allowed: 1. (upper(a) != 'Y') AND b = 2) OR (c = d AND e = f) 2. (coalesce(CAST(a AS string), '') = '') AND b = 2) OR (c = d AND e = f) This patch further restricts the predicates to be converted to conjunctive normal form (CNF) to be such a subset, with the aim to reduce the run-time evaluation overhead of CNFs in which some of the predicates can be duplicated. Uses a cache in Predicates to avoid visiting the entire subtree on each call to applyRuleBottomUp. Skips cache complexity on casts as they don't branch and are unlikely to be deeply nested. Testing: 1. Added a new test TestFeasibleToConvertToCNF() in ExprRewriterTest.java 3. perf-AB-test Change-Id: I326406c6b004fe31ec0e2a2f390a3845b8925aa9 --- M fe/src/main/java/org/apache/impala/analysis/CastExpr.java M fe/src/main/java/org/apache/impala/analysis/ExistsPredicate.java M fe/src/main/java/org/apache/impala/analysis/Expr.java M fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java M fe/src/main/java/org/apache/impala/analysis/IsNotEmptyPredicate.java M fe/src/main/java/org/apache/impala/analysis/LikePredicate.java M fe/src/main/java/org/apache/impala/analysis/Predicate.java M fe/src/main/java/org/apache/impala/analysis/SlotRef.java M fe/src/main/java/org/apache/impala/analysis/TupleIsNullPredicate.java M fe/src/main/java/org/apache/impala/rewrite/ConvertToCNFRule.java M fe/src/test/java/org/apache/impala/analysis/ExprRewriterTest.java M testdata/workloads/functional-planner/queries/PlannerTest/constant-folding.test M testdata/workloads/functional-planner/queries/PlannerTest/convert-to-cnf.test 13 files changed, 204 insertions(+), 9 deletions(-) git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/58/18458/11 -- To view, visit http://gerrit.cloudera.org:8080/18458 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-MessageType: newpatchset Gerrit-Change-Id: I326406c6b004fe31ec0e2a2f390a3845b8925aa9 Gerrit-Change-Number: 18458 Gerrit-PatchSet: 11 Gerrit-Owner: Qifan Chen <qc...@cloudera.com> Gerrit-Reviewer: Aman Sinha <amsi...@cloudera.com> Gerrit-Reviewer: Impala Public Jenkins <impala-public-jenk...@cloudera.com> Gerrit-Reviewer: Kurt Deschler <kdesc...@cloudera.com> Gerrit-Reviewer: Michael Smith <michael.sm...@cloudera.com> Gerrit-Reviewer: Qifan Chen <qc...@cloudera.com> Gerrit-Reviewer: Quanlong Huang <huangquanl...@gmail.com>