Author: knoguchi
Date: Thu Jul 13 18:28:29 2017
New Revision: 1801860
URL: http://svn.apache.org/viewvc?rev=1801860&view=rev
Log:
PIG-4767: Partition filter not pushed down when filter clause references
variable from another load path (knoguchi)
Modified:
pig/trunk/CHANGES.txt
pig/trunk/src/org/apache/pig/newplan/logical/rules/PartitionFilterOptimizer.java
pig/trunk/src/org/apache/pig/newplan/logical/rules/PredicatePushdownOptimizer.java
pig/trunk/test/org/apache/pig/test/TestNewPartitionFilterPushDown.java
Modified: pig/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1801860&r1=1801859&r2=1801860&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu Jul 13 18:28:29 2017
@@ -36,6 +36,8 @@ OPTIMIZATIONS
BUG FIXES
+PIG-4767: Partition filter not pushed down when filter clause references
variable from another load path (knoguchi)
+
PIG-5270: Typo in Pig Logging (FromAlaska49 via daijy)
PIG-5263: Using wildcard doesn't work with OrcStorage (satishsaley via rohini)
Modified:
pig/trunk/src/org/apache/pig/newplan/logical/rules/PartitionFilterOptimizer.java
URL:
http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/rules/PartitionFilterOptimizer.java?rev=1801860&r1=1801859&r2=1801860&view=diff
==============================================================================
---
pig/trunk/src/org/apache/pig/newplan/logical/rules/PartitionFilterOptimizer.java
(original)
+++
pig/trunk/src/org/apache/pig/newplan/logical/rules/PartitionFilterOptimizer.java
Thu Jul 13 18:28:29 2017
@@ -116,10 +116,6 @@ public class PartitionFilterOptimizer ex
return false;
loFilter = (LOFilter)succeds.get(0);
- // Filter has dependency other than load, skip optimization
- if (currentPlan.getSoftLinkPredecessors(loFilter)!=null)
- return false;
-
// we have to check more only if LoadFunc implements LoadMetada
loadFunc = loLoad.getLoadFunc();
if(!( loadFunc instanceof LoadMetadata ) ) {
Modified:
pig/trunk/src/org/apache/pig/newplan/logical/rules/PredicatePushdownOptimizer.java
URL:
http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/rules/PredicatePushdownOptimizer.java?rev=1801860&r1=1801859&r2=1801860&view=diff
==============================================================================
---
pig/trunk/src/org/apache/pig/newplan/logical/rules/PredicatePushdownOptimizer.java
(original)
+++
pig/trunk/src/org/apache/pig/newplan/logical/rules/PredicatePushdownOptimizer.java
Thu Jul 13 18:28:29 2017
@@ -107,10 +107,6 @@ public class PredicatePushdownOptimizer
return false;
loFilter = (LOFilter) succeds.get(0);
- // Filter has dependency other than load, skip optimization
- if (currentPlan.getSoftLinkPredecessors(loFilter) != null)
- return false;
-
// we have to check more only if LoadFunc implements
LoadPredicatePushdown
loadFunc = loLoad.getLoadFunc();
if (!(loadFunc instanceof LoadPredicatePushdown)) {
Modified: pig/trunk/test/org/apache/pig/test/TestNewPartitionFilterPushDown.java
URL:
http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNewPartitionFilterPushDown.java?rev=1801860&r1=1801859&r2=1801860&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNewPartitionFilterPushDown.java
(original)
+++ pig/trunk/test/org/apache/pig/test/TestNewPartitionFilterPushDown.java Thu
Jul 13 18:28:29 2017
@@ -61,10 +61,12 @@ import org.apache.pig.newplan.logical.ex
import org.apache.pig.newplan.logical.expression.NotExpression;
import org.apache.pig.newplan.logical.expression.OrExpression;
import org.apache.pig.newplan.logical.expression.ProjectExpression;
+import org.apache.pig.newplan.logical.expression.ScalarExpression;
import org.apache.pig.newplan.logical.optimizer.LogicalPlanOptimizer;
import org.apache.pig.newplan.logical.relational.LOFilter;
import org.apache.pig.newplan.logical.relational.LogToPhyTranslationVisitor;
import org.apache.pig.newplan.logical.relational.LogicalPlan;
+import org.apache.pig.newplan.logical.relational.LogicalRelationalOperator;
import org.apache.pig.newplan.logical.rules.LoadTypeCastInserter;
import org.apache.pig.newplan.logical.rules.PartitionFilterOptimizer;
import org.apache.pig.newplan.optimizer.PlanOptimizer;
@@ -467,10 +469,14 @@ public class TestNewPartitionFilterPushD
Operator op = newLogicalPlan.getSinks().get(0);
LOFilter filter =
(LOFilter)newLogicalPlan.getPredecessors(op).get(0);
- String actual = new PartitionFilterExtractor(null, new
ArrayList<String>())
- .getExpression((LogicalExpression)
filter.getFilterPlan().getSources().get(0)).toString();
- Assert.assertEquals("checking trimmed filter expression:",
- filterExpr, actual);
+ if (unsupportedExpr) {
+ String actual = getTestExpression((LogicalExpression)
filter.getFilterPlan().getSources().get(0));
+ Assert.assertEquals("checking trimmed filter expression:",
filterExpr, actual);
+ } else {
+ String actual = new PartitionFilterExtractor(null, new
ArrayList<String>())
+ .getExpression((LogicalExpression)
filter.getFilterPlan().getSources().get(0)).toString();
+ Assert.assertEquals("checking trimmed filter expression:",
filterExpr, actual);
+ }
} else {
Iterator<Operator> it = newLogicalPlan.getOperators();
while( it.hasNext() ) {
@@ -707,6 +713,14 @@ public class TestNewPartitionFilterPushD
"(not (browser#'type' is null))", true);
}
+ @Test
+ public void testScalarExpressions() throws Exception {
+ String q = "z = load '1line' as (z1:int); " +
+ query3 + "b = filter a by srcid != 10 and srcid == z.z1;" +
+ "store b into 'out';";
+ testFull(q, "(srcid != 10)", "(srcid == z.z1)", true);
+ }
+
//// helper methods ///////
private PartitionFilterExtractor test(String query, List<String>
partitionCols,
String expPartFilterString, String expFilterString)
@@ -917,6 +931,10 @@ public class TestNewPartitionFilterPushD
} else if (op instanceof NotExpression) {
String expr = getTestExpression(((NotExpression)
op).getExpression());
return braketize("not " + expr);
+ } else if (op instanceof ScalarExpression) {
+ ScalarExpression scalar = (ScalarExpression) op;
+ return
((LogicalRelationalOperator)scalar.getImplicitReferencedOperator()).getAlias() +
+ "." + scalar.getFieldSchema().alias;
} else {
throw new FrontendException("Unsupported conversion of
LogicalExpression to Expression: " + op.getName());
}