Author: rohini Date: Wed Dec 27 22:02:21 2017 New Revision: 1819369 URL: http://svn.apache.org/viewvc?rev=1819369&view=rev Log: PIG-5322: ConstantCalculator optimizer is not applied for split (rohini)
Modified: pig/trunk/CHANGES.txt pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6-OPTOFF.gld pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6.gld Modified: pig/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1819369&r1=1819368&r2=1819369&view=diff ============================================================================== --- pig/trunk/CHANGES.txt (original) +++ pig/trunk/CHANGES.txt Wed Dec 27 22:02:21 2017 @@ -26,6 +26,8 @@ PIG-5282: Upgade to Java 8 (satishsaley IMPROVEMENTS +PIG-5322: ConstantCalculator optimizer is not applied for split (rohini) + PIG-5316: Initialize mapred.task.id property for PoS jobs (nkollar via szita) PIG-5302: Remove HttpClient dependency (nkollar via szita) Modified: pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java?rev=1819369&r1=1819368&r2=1819369&view=diff ============================================================================== --- pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java (original) +++ pig/trunk/src/org/apache/pig/newplan/logical/optimizer/LogicalPlanOptimizer.java Wed Dec 27 22:02:21 2017 @@ -22,10 +22,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import com.google.common.base.Preconditions; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.TreeMultimap; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.pig.impl.PigContext; @@ -45,11 +41,16 @@ import org.apache.pig.newplan.logical.ru import org.apache.pig.newplan.logical.rules.PredicatePushdownOptimizer; import org.apache.pig.newplan.logical.rules.PushDownForEachFlatten; import org.apache.pig.newplan.logical.rules.PushUpFilter; +import org.apache.pig.newplan.logical.rules.SplitConstantCalculator; import org.apache.pig.newplan.logical.rules.SplitFilter; import org.apache.pig.newplan.logical.rules.StreamTypeCastInserter; import org.apache.pig.newplan.optimizer.PlanOptimizer; import org.apache.pig.newplan.optimizer.Rule; +import com.google.common.base.Preconditions; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.TreeMultimap; + public class LogicalPlanOptimizer extends PlanOptimizer { private static final Log LOG = LogFactory.getLog(LogicalPlanOptimizer.class); private static enum RulesReportKey { RULES_ENABLED, RULES_DISABLED } @@ -89,10 +90,13 @@ public class LogicalPlanOptimizer extend // Logical expression simplifier Set <Rule> s = new HashSet<Rule>(); // add constant calculator rule - Rule r = new FilterConstantCalculator("ConstantCalculator", pc); + Rule r = new FilterConstantCalculator("FilterConstantCalculator", pc); + checkAndAddRule(s, r); + ls.add(s); + r = new ForEachConstantCalculator("ForEachConstantCalculator", pc); checkAndAddRule(s, r); ls.add(s); - r = new ForEachConstantCalculator("ConstantCalculator", pc); + r = new SplitConstantCalculator("SplitConstantCalculator", pc); checkAndAddRule(s, r); ls.add(s); Modified: pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java?rev=1819369&r1=1819368&r2=1819369&view=diff ============================================================================== --- pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java (original) +++ pig/trunk/test/org/apache/pig/test/TestConstantCalculator.java Wed Dec 27 22:02:21 2017 @@ -22,6 +22,7 @@ import static org.junit.Assert.assertTru import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Set; @@ -33,13 +34,20 @@ import org.apache.pig.backend.hadoop.dat import org.apache.pig.data.SchemaTupleBackend; import org.apache.pig.data.Tuple; import org.apache.pig.impl.PigContext; +import org.apache.pig.impl.logicalLayer.FrontendException; +import org.apache.pig.newplan.Operator; import org.apache.pig.newplan.OperatorPlan; +import org.apache.pig.newplan.logical.expression.ConstantExpression; +import org.apache.pig.newplan.logical.expression.NegativeExpression; import org.apache.pig.newplan.logical.optimizer.LogicalPlanOptimizer; +import org.apache.pig.newplan.logical.relational.LOSplitOutput; import org.apache.pig.newplan.logical.relational.LogicalPlan; import org.apache.pig.newplan.logical.rules.FilterConstantCalculator; import org.apache.pig.newplan.logical.rules.ForEachConstantCalculator; +import org.apache.pig.newplan.logical.rules.SplitConstantCalculator; import org.apache.pig.newplan.optimizer.PlanOptimizer; import org.apache.pig.newplan.optimizer.Rule; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -54,6 +62,7 @@ public class TestConstantCalculator { SchemaTupleBackend.initialize(ConfigurationUtil.toConfiguration(pc.getProperties(), true), pc); } + @Test public void test() throws Exception { // pure simple constant @@ -105,6 +114,36 @@ public class TestConstantCalculator { "store b into 'empty';"); } + @Test + public void testSplit() throws Exception { + // calculation inside split + LogicalPlan plan = getOptimizedLogicalPlan("a = load 'd.txt' as (x:long);" + + "split a into b if x == -2L, c otherwise;" + + "store b into 'empty';" + + "store c into 'empty1';"); + + List<ConstantExpression> constantOps = new ArrayList<>(); + Iterator<Operator> operators = plan.getOperators(); + while (operators.hasNext()) { + Operator splitOp = operators.next(); + if (splitOp instanceof LOSplitOutput) { + Iterator<Operator> splitOperators = ((LOSplitOutput)splitOp).getFilterPlan().getOperators(); + while (splitOperators.hasNext()) { + Operator op = splitOperators.next(); + if (op instanceof ConstantExpression) { + constantOps.add((ConstantExpression)op); + } else if (op instanceof NegativeExpression) { + Assert.fail("Found NegativeExpression which should have been optimized"); + } + } + } + + } + Assert.assertEquals(2, constantOps.size()); + Assert.assertEquals(new Long(-2L), constantOps.get(0).getValue()); + Assert.assertEquals(new Long(-2L), constantOps.get(1).getValue()); + } + public static class NoCalc extends EvalFunc<String> { @Override public String exec(Tuple input) throws IOException { @@ -124,17 +163,23 @@ public class TestConstantCalculator { } private void assertQuerySame(String origQuery, String optimizedQuery) throws Exception { + LogicalPlan newLogicalPlan = getOptimizedLogicalPlan(origQuery); + + LogicalPlan expected = Util.buildLp(pigServer, optimizedQuery); + + assertTrue(expected.isEqual(newLogicalPlan)); + + } + + private LogicalPlan getOptimizedLogicalPlan(String origQuery) + throws Exception, IOException, FrontendException { LogicalPlan newLogicalPlan = Util.buildLp(pigServer, origQuery); SchemaTupleBackend.initialize(ConfigurationUtil.toConfiguration(pc.getProperties(), true), pc); PlanOptimizer optimizer = new MyPlanOptimizer(newLogicalPlan, 10); optimizer.optimize(); - - LogicalPlan expected = Util.buildLp(pigServer, optimizedQuery); - - assertTrue(expected.isEqual(newLogicalPlan)); - + return newLogicalPlan; } public class MyPlanOptimizer extends LogicalPlanOptimizer { @@ -143,6 +188,7 @@ public class TestConstantCalculator { super(p, iterations, null); } + @Override protected List<Set<Rule>> buildRuleSets() { List<Set<Rule>> ls = new ArrayList<Set<Rule>>(); @@ -154,6 +200,9 @@ public class TestConstantCalculator { r = new ForEachConstantCalculator("ForEachConstantCalculator", pc); s.add(r); ls.add(s); + r = new SplitConstantCalculator("SplitConstantCalculator", pc); + s.add(r); + ls.add(s); return ls; } Modified: pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6-OPTOFF.gld URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6-OPTOFF.gld?rev=1819369&r1=1819368&r2=1819369&view=diff ============================================================================== --- pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6-OPTOFF.gld (original) +++ pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6-OPTOFF.gld Wed Dec 27 22:02:21 2017 @@ -4,122 +4,118 @@ #-------------------------------------------------- # TEZ DAG plan: pig-0_scope-0 #-------------------------------------------------- -Tez vertex scope-48 -> Tez vertex scope-50,Tez vertex scope-53, -Tez vertex scope-53 -> Tez vertex scope-56,Tez vertex scope-58, -Tez vertex scope-50 -> Tez vertex scope-52, -Tez vertex scope-52 -> Tez vertex scope-56,Tez vertex scope-58, -Tez vertex scope-56 +Tez vertex scope-50 -> Tez vertex scope-52,Tez vertex scope-55, +Tez vertex scope-55 -> Tez vertex scope-58,Tez vertex scope-60, +Tez vertex scope-52 -> Tez vertex scope-54, +Tez vertex scope-54 -> Tez vertex scope-58,Tez vertex scope-60, Tez vertex scope-58 +Tez vertex scope-60 -Tez vertex scope-48 +Tez vertex scope-50 # Plan on vertex -POValueOutputTez - scope-49 -> [scope-50, scope-53] +POValueOutputTez - scope-51 -> [scope-52, scope-55] | -|---a: New For Each(false,false)[bag] - scope-7 +|---a: New For Each(false,false)[bag] - scope-11 | | - | Cast[int] - scope-2 + | Cast[int] - scope-6 | | - | |---Project[bytearray][0] - scope-1 + | |---Project[bytearray][0] - scope-5 | | - | Cast[int] - scope-5 + | Cast[int] - scope-9 | | - | |---Project[bytearray][1] - scope-4 + | |---Project[bytearray][1] - scope-8 | - |---a: Load(file:///tmp/input:org.apache.pig.builtin.PigStorage) - scope-0 -Tez vertex scope-53 + |---a: Load(file:///tmp/input:org.apache.pig.builtin.PigStorage) - scope-4 +Tez vertex scope-55 # Plan on vertex -POValueOutputTez - scope-55 -> [scope-56, scope-58] +POValueOutputTez - scope-57 -> [scope-58, scope-60] | -|---POValueInputTez - scope-54 <- scope-48 -Tez vertex scope-50 +|---POValueInputTez - scope-56 <- scope-50 +Tez vertex scope-52 # Plan on vertex -b: Local Rearrange[tuple]{int}(false) - scope-72 -> scope-52 +b: Local Rearrange[tuple]{int}(false) - scope-74 -> scope-54 | | -| Project[int][0] - scope-74 +| Project[int][0] - scope-76 | -|---c: New For Each(false,false)[bag] - scope-61 +|---c: New For Each(false,false)[bag] - scope-63 | | - | Project[int][0] - scope-62 + | Project[int][0] - scope-64 | | - | POUserFunc(org.apache.pig.builtin.COUNT$Initial)[tuple] - scope-63 + | POUserFunc(org.apache.pig.builtin.COUNT$Initial)[tuple] - scope-65 | | - | |---Project[bag][1] - scope-64 + | |---Project[bag][1] - scope-66 | - |---Pre Combiner Local Rearrange[tuple]{Unknown} - scope-75 + |---Pre Combiner Local Rearrange[tuple]{Unknown} - scope-77 | - |---POValueInputTez - scope-51 <- scope-48 -Tez vertex scope-52 -# Combine plan on edge <scope-50> -b: Local Rearrange[tuple]{int}(false) - scope-76 -> scope-52 + |---POValueInputTez - scope-53 <- scope-50 +Tez vertex scope-54 +# Combine plan on edge <scope-52> +b: Local Rearrange[tuple]{int}(false) - scope-78 -> scope-54 | | -| Project[int][0] - scope-78 +| Project[int][0] - scope-80 | -|---c: New For Each(false,false)[bag] - scope-65 +|---c: New For Each(false,false)[bag] - scope-67 | | - | Project[int][0] - scope-66 + | Project[int][0] - scope-68 | | - | POUserFunc(org.apache.pig.builtin.COUNT$Intermediate)[tuple] - scope-67 + | POUserFunc(org.apache.pig.builtin.COUNT$Intermediate)[tuple] - scope-69 | | - | |---Project[bag][1] - scope-68 + | |---Project[bag][1] - scope-70 | - |---b: Package(CombinerPackager)[tuple]{int} - scope-71 + |---b: Package(CombinerPackager)[tuple]{int} - scope-73 # Plan on vertex -POValueOutputTez - scope-60 -> [scope-56, scope-58] +POValueOutputTez - scope-62 -> [scope-58, scope-60] | -|---c: New For Each(false,false)[bag] - scope-23 +|---c: New For Each(false,false)[bag] - scope-27 | | - | Project[int][0] - scope-18 + | Project[int][0] - scope-22 | | - | POUserFunc(org.apache.pig.builtin.COUNT$Final)[long] - scope-21 + | POUserFunc(org.apache.pig.builtin.COUNT$Final)[long] - scope-25 | | - | |---Project[bag][1] - scope-69 + | |---Project[bag][1] - scope-71 | - |---b: Package(CombinerPackager)[tuple]{int} - scope-15 -Tez vertex scope-56 + |---b: Package(CombinerPackager)[tuple]{int} - scope-19 +Tez vertex scope-58 # Plan on vertex -d: Store(file:///tmp/pigoutput1:org.apache.pig.builtin.PigStorage) - scope-35 +d: Store(file:///tmp/pigoutput1:org.apache.pig.builtin.PigStorage) - scope-38 | -|---d: Filter[bag] - scope-25 +|---d: Filter[bag] - scope-29 | | - | Less Than[boolean] - scope-34 + | Less Than[boolean] - scope-37 | | - | |---Multiply[long] - scope-31 + | |---Multiply[long] - scope-34 | | | - | | |---Cast[long] - scope-27 - | | | | - | | | |---Constant(2) - scope-26 + | | |---Constant(2) - scope-30 | | | - | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-30 + | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-33 | | | - | | |---Constant(1) - scope-28 + | | |---Constant(1) - scope-31 | | - | |---Cast[long] - scope-33 + | |---Cast[long] - scope-36 | | - | |---Project[int][1] - scope-32 + | |---Project[int][1] - scope-35 | - |---POValueInputTez - scope-57 <- scope-53 -Tez vertex scope-58 + |---POValueInputTez - scope-59 <- scope-55 +Tez vertex scope-60 # Plan on vertex -e: Store(file:///tmp/pigoutput2:org.apache.pig.builtin.PigStorage) - scope-47 +e: Store(file:///tmp/pigoutput2:org.apache.pig.builtin.PigStorage) - scope-49 | -|---e: Filter[bag] - scope-36 +|---e: Filter[bag] - scope-39 | | - | Not[boolean] - scope-46 + | Not[boolean] - scope-48 | | - | |---Less Than[boolean] - scope-45 + | |---Less Than[boolean] - scope-47 | | - | |---Multiply[long] - scope-42 + | |---Multiply[long] - scope-44 | | | - | | |---Cast[long] - scope-38 - | | | | - | | | |---Constant(2) - scope-37 + | | |---Constant(2) - scope-40 | | | - | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-41 + | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-43 | | | - | | |---Constant(1) - scope-39 + | | |---Constant(1) - scope-41 | | - | |---Cast[long] - scope-44 + | |---Cast[long] - scope-46 | | - | |---Project[int][1] - scope-43 + | |---Project[int][1] - scope-45 | - |---POValueInputTez - scope-59 <- scope-53 + |---POValueInputTez - scope-61 <- scope-55 Modified: pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6.gld URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6.gld?rev=1819369&r1=1819368&r2=1819369&view=diff ============================================================================== --- pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6.gld (original) +++ pig/trunk/test/org/apache/pig/test/data/GoldenFiles/tez/TEZC-MQ-6.gld Wed Dec 27 22:02:21 2017 @@ -4,118 +4,114 @@ #-------------------------------------------------- # TEZ DAG plan: pig-0_scope-0 #-------------------------------------------------- -Tez vertex scope-48 -> Tez vertex scope-52,Tez vertex scope-53, -Tez vertex scope-52 -> Tez vertex scope-53,Tez vertex scope-58, -Tez vertex scope-53 -> Tez vertex scope-58, -Tez vertex scope-58 +Tez vertex scope-50 -> Tez vertex scope-54,Tez vertex scope-55, +Tez vertex scope-54 -> Tez vertex scope-55,Tez vertex scope-60, +Tez vertex scope-55 -> Tez vertex scope-60, +Tez vertex scope-60 -Tez vertex scope-48 +Tez vertex scope-50 # Plan on vertex -a: Split - scope-80 +a: Split - scope-82 | | -| b: Local Rearrange[tuple]{int}(false) - scope-72 -> scope-52 +| b: Local Rearrange[tuple]{int}(false) - scope-74 -> scope-54 | | | -| | Project[int][0] - scope-74 +| | Project[int][0] - scope-76 | | -| |---c: New For Each(false,false)[bag] - scope-61 +| |---c: New For Each(false,false)[bag] - scope-63 | | | -| | Project[int][0] - scope-62 +| | Project[int][0] - scope-64 | | | -| | POUserFunc(org.apache.pig.builtin.COUNT$Initial)[tuple] - scope-63 +| | POUserFunc(org.apache.pig.builtin.COUNT$Initial)[tuple] - scope-65 | | | -| | |---Project[bag][1] - scope-64 +| | |---Project[bag][1] - scope-66 | | -| |---Pre Combiner Local Rearrange[tuple]{Unknown} - scope-75 +| |---Pre Combiner Local Rearrange[tuple]{Unknown} - scope-77 | | -| POValueOutputTez - scope-49 -> [scope-53] +| POValueOutputTez - scope-51 -> [scope-55] | -|---a: New For Each(false,false)[bag] - scope-7 +|---a: New For Each(false,false)[bag] - scope-11 | | - | Cast[int] - scope-2 + | Cast[int] - scope-6 | | - | |---Project[bytearray][0] - scope-1 + | |---Project[bytearray][0] - scope-5 | | - | Cast[int] - scope-5 + | Cast[int] - scope-9 | | - | |---Project[bytearray][1] - scope-4 + | |---Project[bytearray][1] - scope-8 | - |---a: Load(file:///tmp/input:org.apache.pig.builtin.PigStorage) - scope-0 -Tez vertex scope-52 -# Combine plan on edge <scope-48> -b: Local Rearrange[tuple]{int}(false) - scope-76 -> scope-52 + |---a: Load(file:///tmp/input:org.apache.pig.builtin.PigStorage) - scope-4 +Tez vertex scope-54 +# Combine plan on edge <scope-50> +b: Local Rearrange[tuple]{int}(false) - scope-78 -> scope-54 | | -| Project[int][0] - scope-78 +| Project[int][0] - scope-80 | -|---c: New For Each(false,false)[bag] - scope-65 +|---c: New For Each(false,false)[bag] - scope-67 | | - | Project[int][0] - scope-66 + | Project[int][0] - scope-68 | | - | POUserFunc(org.apache.pig.builtin.COUNT$Intermediate)[tuple] - scope-67 + | POUserFunc(org.apache.pig.builtin.COUNT$Intermediate)[tuple] - scope-69 | | - | |---Project[bag][1] - scope-68 + | |---Project[bag][1] - scope-70 | - |---b: Package(CombinerPackager)[tuple]{int} - scope-71 + |---b: Package(CombinerPackager)[tuple]{int} - scope-73 # Plan on vertex -POValueOutputTez - scope-60 -> [scope-53, scope-58] +POValueOutputTez - scope-62 -> [scope-55, scope-60] | -|---c: New For Each(false,false)[bag] - scope-23 +|---c: New For Each(false,false)[bag] - scope-27 | | - | Project[int][0] - scope-18 + | Project[int][0] - scope-22 | | - | POUserFunc(org.apache.pig.builtin.COUNT$Final)[long] - scope-21 + | POUserFunc(org.apache.pig.builtin.COUNT$Final)[long] - scope-25 | | - | |---Project[bag][1] - scope-69 + | |---Project[bag][1] - scope-71 | - |---b: Package(CombinerPackager)[tuple]{int} - scope-15 -Tez vertex scope-53 + |---b: Package(CombinerPackager)[tuple]{int} - scope-19 +Tez vertex scope-55 # Plan on vertex -1-1: Split - scope-79 +1-1: Split - scope-81 | | -| d: Store(file:///tmp/pigoutput1:org.apache.pig.builtin.PigStorage) - scope-35 +| d: Store(file:///tmp/pigoutput1:org.apache.pig.builtin.PigStorage) - scope-38 | | -| |---d: Filter[bag] - scope-25 +| |---d: Filter[bag] - scope-29 | | | -| | Less Than[boolean] - scope-34 +| | Less Than[boolean] - scope-37 | | | -| | |---Multiply[long] - scope-31 +| | |---Multiply[long] - scope-34 | | | | -| | | |---Cast[long] - scope-27 -| | | | | -| | | | |---Constant(2) - scope-26 +| | | |---Constant(2) - scope-30 | | | | -| | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-30 +| | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-33 | | | | -| | | |---Constant(1) - scope-28 +| | | |---Constant(1) - scope-31 | | | -| | |---Cast[long] - scope-33 +| | |---Cast[long] - scope-36 | | | -| | |---Project[int][1] - scope-32 +| | |---Project[int][1] - scope-35 | | -| POValueOutputTez - scope-55 -> [scope-58] +| POValueOutputTez - scope-57 -> [scope-60] | -|---POValueInputTez - scope-54 <- scope-48 -Tez vertex scope-58 +|---POValueInputTez - scope-56 <- scope-50 +Tez vertex scope-60 # Plan on vertex -e: Store(file:///tmp/pigoutput2:org.apache.pig.builtin.PigStorage) - scope-47 +e: Store(file:///tmp/pigoutput2:org.apache.pig.builtin.PigStorage) - scope-49 | -|---e: Filter[bag] - scope-36 +|---e: Filter[bag] - scope-39 | | - | Not[boolean] - scope-46 + | Not[boolean] - scope-48 | | - | |---Less Than[boolean] - scope-45 + | |---Less Than[boolean] - scope-47 | | - | |---Multiply[long] - scope-42 + | |---Multiply[long] - scope-44 | | | - | | |---Cast[long] - scope-38 - | | | | - | | | |---Constant(2) - scope-37 + | | |---Constant(2) - scope-40 | | | - | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-41 + | | |---POUserFunc(org.apache.pig.backend.hadoop.executionengine.tez.plan.udf.ReadScalarsTez)[long] - scope-43 | | | - | | |---Constant(1) - scope-39 + | | |---Constant(1) - scope-41 | | - | |---Cast[long] - scope-44 + | |---Cast[long] - scope-46 | | - | |---Project[int][1] - scope-43 + | |---Project[int][1] - scope-45 | - |---POValueInputTez - scope-59 <- scope-53 + |---POValueInputTez - scope-61 <- scope-55