diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java index 9e84e85..727afdc 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java @@ -907,6 +907,10 @@ transient boolean newGroupStarted = false; @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "JOIN"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java index eb0a409..c5f2a23 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java @@ -736,6 +736,10 @@ public class FileSinkOperator extends TerminalOperator implements */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "FS"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java index 3658ef2..0268cfe 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FilterOperator.java @@ -149,6 +149,10 @@ public class FilterOperator extends Operator implements */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "FIL"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java index c9cecbc..8669051 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java @@ -1081,6 +1081,10 @@ public class GroupByOperator extends Operator implements */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "GBY"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableDummyOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableDummyOperator.java index 57ae5fc..70cbff8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableDummyOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableDummyOperator.java @@ -54,6 +54,10 @@ public class HashTableDummyOperator extends Operator impleme @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "HASHTABLEDUMMY"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java index 13884cd..bd6931c 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java @@ -435,6 +435,10 @@ public class HashTableSinkOperator extends TerminalOperator i */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "HASHTABLESINK"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewForwardOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewForwardOperator.java index 5bfb805..4e430f2 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewForwardOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewForwardOperator.java @@ -39,6 +39,10 @@ public class LateralViewForwardOperator extends Operator @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "LVF"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewJoinOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewJoinOperator.java index bba06b6..2fbb81b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewJoinOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/LateralViewJoinOperator.java @@ -139,6 +139,10 @@ public class LateralViewJoinOperator extends Operator { @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "LVJ"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/LimitOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/LimitOperator.java index c82d2d5..276902a 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/LimitOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/LimitOperator.java @@ -57,6 +57,10 @@ public class LimitOperator extends Operator implements Serializable { @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "LIM"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java index 0069872..2a0a58b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java @@ -300,6 +300,10 @@ public class MapJoinOperator extends AbstractMapJoinOperator implem */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "MAPJOIN"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java index b6dbf3d..67aea5d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java @@ -629,6 +629,10 @@ public class MapOperator extends Operator implements Serializable, C @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "MAP"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java index 8fa0591..f0c35e7 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java @@ -816,6 +816,10 @@ public abstract class Operator implements Serializable,C * @return the name of the operator */ public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "OP"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/ReduceSinkOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/ReduceSinkOperator.java index 732a5aa..a2caeed 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/ReduceSinkOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ReduceSinkOperator.java @@ -310,6 +310,10 @@ public class ReduceSinkOperator extends TerminalOperator */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "RS"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java index 76c5545..1a40630 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/SMBMapJoinOperator.java @@ -594,6 +594,10 @@ public class SMBMapJoinOperator extends AbstractMapJoinOperator imp */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "MAPJOIN"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/ScriptOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/ScriptOperator.java index cbd0784..809695e 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/ScriptOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ScriptOperator.java @@ -699,6 +699,10 @@ public class ScriptOperator extends Operator implements @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "SCR"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java index 88c3a8b..5bf5b21 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java @@ -89,6 +89,10 @@ public class SelectOperator extends Operator implements */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "SEL"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java index 63af384..dffdd7b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java @@ -207,6 +207,10 @@ public class TableScanOperator extends Operator implements **/ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "TS"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/UDTFOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/UDTFOperator.java index 919656c..312774a 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/UDTFOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/UDTFOperator.java @@ -114,6 +114,10 @@ public class UDTFOperator extends Operator implements Serializable { @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "UDTF"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java index f1ad15e..ee1c7f2 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java @@ -137,6 +137,10 @@ public class UnionOperator extends Operator implements Serializable { */ @Override public String getName() { + return getOperatorName(); + } + + static public String getOperatorName() { return "UNION"; } diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapJoinOptimizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapJoinOptimizer.java index 640ccfa..d9354f3 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapJoinOptimizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapJoinOptimizer.java @@ -40,6 +40,8 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.UnionOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; @@ -83,12 +85,18 @@ public class BucketMapJoinOptimizer implements Transform { new BucketMapjoinOptProcCtx(pctx.getConf()); // process map joins with no reducers pattern - opRules.put(new RuleRegExp("R1", "MAPJOIN%"), getBucketMapjoinProc(pctx)); - opRules.put(new RuleRegExp("R2", "RS%.*MAPJOIN"), getBucketMapjoinRejectProc(pctx)); - opRules.put(new RuleRegExp(new String("R3"), "UNION%.*MAPJOIN%"), - getBucketMapjoinRejectProc(pctx)); - opRules.put(new RuleRegExp(new String("R4"), "MAPJOIN%.*MAPJOIN%"), - getBucketMapjoinRejectProc(pctx)); + opRules.put(new RuleRegExp("R1", + MapJoinOperator.getOperatorName() + "%"), + getBucketMapjoinProc(pctx)); + opRules.put(new RuleRegExp("R2", + ReduceSinkOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName()), + getBucketMapjoinRejectProc(pctx)); + opRules.put(new RuleRegExp(new String("R3"), + UnionOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + getBucketMapjoinRejectProc(pctx)); + opRules.put(new RuleRegExp(new String("R4"), + MapJoinOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + getBucketMapjoinRejectProc(pctx)); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java index b469dcd..582ef14 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPruner.java @@ -23,10 +23,19 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.Operator; -import org.apache.hadoop.hive.ql.exec.ScriptOperator; +import org.apache.hadoop.hive.ql.exec.FilterOperator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.SelectOperator; +import org.apache.hadoop.hive.ql.exec.ScriptOperator; +import org.apache.hadoop.hive.ql.exec.GroupByOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.UnionOperator; +import org.apache.hadoop.hive.ql.exec.CommonJoinOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.LateralViewJoinOperator; +import org.apache.hadoop.hive.ql.exec.LateralViewForwardOperator; +import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -78,24 +87,33 @@ public class ColumnPruner implements Transform { // the operator stack. The dispatcher // generates the plan from the operator tree Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "FIL%"), ColumnPrunerProcFactory - .getFilterProc()); - opRules.put(new RuleRegExp("R2", "GBY%"), ColumnPrunerProcFactory - .getGroupByProc()); - opRules.put(new RuleRegExp("R3", "RS%"), ColumnPrunerProcFactory - .getReduceSinkProc()); - opRules.put(new RuleRegExp("R4", "SEL%"), ColumnPrunerProcFactory - .getSelectProc()); - opRules.put(new RuleRegExp("R5", "JOIN%"), ColumnPrunerProcFactory - .getJoinProc()); - opRules.put(new RuleRegExp("R6", "MAPJOIN%"), ColumnPrunerProcFactory - .getMapJoinProc()); - opRules.put(new RuleRegExp("R7", "TS%"), ColumnPrunerProcFactory - .getTableScanProc()); - opRules.put(new RuleRegExp("R8", "LVJ%"), ColumnPrunerProcFactory - .getLateralViewJoinProc()); - opRules.put(new RuleRegExp("R9", "LVF%"), ColumnPrunerProcFactory - .getLateralViewForwardProc()); + opRules.put(new RuleRegExp("R1", + FilterOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getFilterProc()); + opRules.put(new RuleRegExp("R2", + GroupByOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getGroupByProc()); + opRules.put(new RuleRegExp("R3", + ReduceSinkOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getReduceSinkProc()); + opRules.put(new RuleRegExp("R4", + SelectOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getSelectProc()); + opRules.put(new RuleRegExp("R5", + CommonJoinOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getJoinProc()); + opRules.put(new RuleRegExp("R6", + MapJoinOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getMapJoinProc()); + opRules.put(new RuleRegExp("R7", + TableScanOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getTableScanProc()); + opRules.put(new RuleRegExp("R8", + LateralViewJoinOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getLateralViewJoinProc()); + opRules.put(new RuleRegExp("R9", + LateralViewForwardOperator.getOperatorName() + "%"), + ColumnPrunerProcFactory.getLateralViewForwardProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(ColumnPrunerProcFactory diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/GroupByOptimizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/GroupByOptimizer.java index 29edcbe..55f0971 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/GroupByOptimizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/GroupByOptimizer.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; @@ -77,8 +78,11 @@ public class GroupByOptimizer implements Transform { GroupByOptProcCtx groupByOptimizeCtx = new GroupByOptProcCtx(); // process group-by pattern - opRules.put(new RuleRegExp("R1", "GBY%RS%GBY%"), - getMapAggreSortedGroupbyProc(pctx)); + opRules.put(new RuleRegExp("R1", + GroupByOperator.getOperatorName() + "%" + + ReduceSinkOperator.getOperatorName() + "%" + + GroupByOperator.getOperatorName() + "%"), + getMapAggreSortedGroupbyProc(pctx)); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java index bb3c9ae..f498efe 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java @@ -34,6 +34,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.exec.AbstractMapJoinOperator; import org.apache.hadoop.hive.ql.exec.ColumnInfo; +import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; import org.apache.hadoop.hive.ql.exec.LateralViewJoinOperator; @@ -714,10 +715,18 @@ public class MapJoinProcessor implements Transform { // the operator stack. // The dispatcher generates the plan from the operator tree Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R0", "MAPJOIN%"), getCurrentMapJoin()); - opRules.put(new RuleRegExp("R1", "MAPJOIN%.*FS%"), getMapJoinFS()); - opRules.put(new RuleRegExp("R2", "MAPJOIN%.*RS%"), getMapJoinDefault()); - opRules.put(new RuleRegExp("R4", "MAPJOIN%.*UNION%"), getMapJoinDefault()); + opRules.put(new RuleRegExp("R0", + MapJoinOperator.getOperatorName() + "%"), + getCurrentMapJoin()); + opRules.put(new RuleRegExp("R1", + MapJoinOperator.getOperatorName() + "%.*" + FileSinkOperator.getOperatorName() + "%"), + getMapJoinFS()); + opRules.put(new RuleRegExp("R2", + MapJoinOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + getMapJoinDefault()); + opRules.put(new RuleRegExp("R4", + MapJoinOperator.getOperatorName() + "%.*" + UnionOperator.getOperatorName() + "%"), + getMapJoinDefault()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkDeDuplication.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkDeDuplication.java index ef2e34e..77c50b0 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkDeDuplication.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ReduceSinkDeDuplication.java @@ -75,8 +75,9 @@ public class ReduceSinkDeDuplication implements Transform{ ReduceSinkDeduplicateProcCtx cppCtx = new ReduceSinkDeduplicateProcCtx(pGraphContext); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "RS%.*RS%"), ReduceSinkDeduplicateProcFactory - .getReducerReducerProc()); + opRules.put(new RuleRegExp("R1", + ReduceSinkOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + ReduceSinkDeduplicateProcFactory.getReducerReducerProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java index bc6b6c1..ab2ed81 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/SamplePruner.java @@ -104,7 +104,12 @@ public class SamplePruner implements Transform { .getOpToSamplePruner()); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "(TS%FIL%FIL%|TS%FIL%)"), getFilterProc()); + opRules.put(new RuleRegExp("R1", + "(" + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%|" + + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%)"), getFilterProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapJoinOptimizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapJoinOptimizer.java index 31a0ecb..65a4937 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapJoinOptimizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapJoinOptimizer.java @@ -74,7 +74,7 @@ public class SortedMergeBucketMapJoinOptimizer implements Transform { Map opRules = new LinkedHashMap(); // go through all map joins and find out all which have enabled bucket map // join. - opRules.put(new RuleRegExp("R1", "MAPJOIN%"), + opRules.put(new RuleRegExp("R1", MapJoinOperator.getOperatorName() + "%"), getSortedMergeBucketMapjoinProc(pctx)); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteCanApplyCtx.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteCanApplyCtx.java index 3de04b1..cc94254 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteCanApplyCtx.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteCanApplyCtx.java @@ -31,6 +31,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.metastore.api.Index; import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.FilterOperator; +import org.apache.hadoop.hive.ql.exec.GroupByOperator; +import org.apache.hadoop.hive.ql.exec.SelectOperator; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; import org.apache.hadoop.hive.ql.lib.GraphWalker; @@ -255,11 +258,11 @@ public final class RewriteCanApplyCtx implements NodeProcessorCtx { void populateRewriteVars(Operator topOp) throws SemanticException{ Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "FIL%"), + opRules.put(new RuleRegExp("R1", FilterOperator.getOperatorName() + "%"), RewriteCanApplyProcFactory.canApplyOnFilterOperator()); - opRules.put(new RuleRegExp("R2", "GBY%"), + opRules.put(new RuleRegExp("R2", GroupByOperator.getOperatorName() + "%"), RewriteCanApplyProcFactory.canApplyOnGroupByOperator()); - opRules.put(new RuleRegExp("R3", "SEL%"), + opRules.put(new RuleRegExp("R3", SelectOperator.getOperatorName() + "%"), RewriteCanApplyProcFactory.canApplyOnSelectOperator()); // The dispatcher fires the processor corresponding to the closest matching diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java index 7fe3777..b5873a4 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteQueryUsingAggregateIndexCtx.java @@ -25,6 +25,9 @@ import java.util.Map; import java.util.Stack; import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.SelectOperator; +import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -123,14 +126,14 @@ public final class RewriteQueryUsingAggregateIndexCtx implements NodeProcessorC Map opRules = new LinkedHashMap(); // replace scan operator containing original table with index table - opRules.put(new RuleRegExp("R1", "TS%"), + opRules.put(new RuleRegExp("R1", TableScanOperator.getOperatorName() + "%"), RewriteQueryUsingAggregateIndex.getReplaceTableScanProc()); //rule that replaces index key selection with //sum(`_count_of_indexed_column`) function in original query - opRules.put(new RuleRegExp("R2", "SEL%"), + opRules.put(new RuleRegExp("R2", SelectOperator.getOperatorName() + "%"), RewriteQueryUsingAggregateIndex.getNewQuerySelectSchemaProc()); //Manipulates the ExprNodeDesc from GroupByOperator aggregation list - opRules.put(new RuleRegExp("R3", "GBY%"), + opRules.put(new RuleRegExp("R3", GroupByOperator.getOperatorName() + "%"), RewriteQueryUsingAggregateIndex.getNewQueryGroupbySchemaProc()); // The dispatcher fires the processor corresponding to the closest matching diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/lineage/Generator.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/lineage/Generator.java index aeae8e1..4fb72aa 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/lineage/Generator.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/lineage/Generator.java @@ -22,6 +22,17 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.SelectOperator; +import org.apache.hadoop.hive.ql.exec.ScriptOperator; +import org.apache.hadoop.hive.ql.exec.GroupByOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.UDTFOperator; +import org.apache.hadoop.hive.ql.exec.UnionOperator; +import org.apache.hadoop.hive.ql.exec.CommonJoinOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.LateralViewJoinOperator; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; import org.apache.hadoop.hive.ql.lib.GraphWalker; @@ -52,15 +63,24 @@ public class Generator implements Transform { LineageCtx lCtx = new LineageCtx(pctx); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "TS%"), OpProcFactory.getTSProc()); - opRules.put(new RuleRegExp("R2", "SCR%"), OpProcFactory.getTransformProc()); - opRules.put(new RuleRegExp("R3", "UDTF%"), OpProcFactory.getTransformProc()); - opRules.put(new RuleRegExp("R4", "SEL%"), OpProcFactory.getSelProc()); - opRules.put(new RuleRegExp("R5", "GBY%"), OpProcFactory.getGroupByProc()); - opRules.put(new RuleRegExp("R6", "UNION%"), OpProcFactory.getUnionProc()); - opRules.put(new RuleRegExp("R7", "JOIN%|MAPJOIN%"), OpProcFactory.getJoinProc()); - opRules.put(new RuleRegExp("R8", "RS%"), OpProcFactory.getReduceSinkProc()); - opRules.put(new RuleRegExp("R9", "LVJ%"), OpProcFactory.getLateralViewJoinProc()); + opRules.put(new RuleRegExp("R1", TableScanOperator.getOperatorName() + "%"), + OpProcFactory.getTSProc()); + opRules.put(new RuleRegExp("R2", ScriptOperator.getOperatorName() + "%"), + OpProcFactory.getTransformProc()); + opRules.put(new RuleRegExp("R3", UDTFOperator.getOperatorName() + "%"), + OpProcFactory.getTransformProc()); + opRules.put(new RuleRegExp("R4", SelectOperator.getOperatorName() + "%"), + OpProcFactory.getSelProc()); + opRules.put(new RuleRegExp("R5", GroupByOperator.getOperatorName() + "%"), + OpProcFactory.getGroupByProc()); + opRules.put(new RuleRegExp("R6", UnionOperator.getOperatorName() + "%"), + OpProcFactory.getUnionProc()); + opRules.put(new RuleRegExp("R7", CommonJoinOperator.getOperatorName() + "%|" + MapJoinOperator.getOperatorName() + "%"), + OpProcFactory.getJoinProc()); + opRules.put(new RuleRegExp("R8", ReduceSinkOperator.getOperatorName() + "%"), + OpProcFactory.getReduceSinkProc()); + opRules.put(new RuleRegExp("R9", LateralViewJoinOperator.getOperatorName() + "%"), + OpProcFactory.getLateralViewJoinProc()); // The dispatcher fires the processor corresponding to the closest matching rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(OpProcFactory.getDefaultProc(), opRules, lCtx); diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PartitionConditionRemover.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PartitionConditionRemover.java index 031ba0e..cbed375 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PartitionConditionRemover.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PartitionConditionRemover.java @@ -25,6 +25,9 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.FilterOperator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -63,8 +66,13 @@ public class PartitionConditionRemover implements Transform { PcrOpWalkerCtx opWalkerCtx = new PcrOpWalkerCtx(pctx, opToRemove); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "(TS%FIL%)|(TS%FIL%FIL%)"), PcrOpProcFactory - .getFilterProc()); + opRules.put(new RuleRegExp("R1", + "(" + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%)|(" + + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%)"), + PcrOpProcFactory.getFilterProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/LocalMapJoinProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/LocalMapJoinProcFactory.java index ce8a6ae..b05cded 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/LocalMapJoinProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/LocalMapJoinProcFactory.java @@ -191,7 +191,8 @@ public final class LocalMapJoinProcFactory { LocalMapJoinProcCtx localMapJoinProcCtx) throws Exception { List> childOps = mapJoinOp.getChildOperators(); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "GBY%"), LocalMapJoinProcFactory.getGroupByProc()); + opRules.put(new RuleRegExp("R1", GroupByOperator.getOperatorName() + "%"), + LocalMapJoinProcFactory.getGroupByProc()); // The dispatcher fires the processor corresponding to the closest // matching rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(LocalMapJoinProcFactory.getDefaultProc(), diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MapJoinResolver.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MapJoinResolver.java index 754bb56..a279c41 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MapJoinResolver.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MapJoinResolver.java @@ -29,6 +29,7 @@ import java.util.Stack; import org.apache.hadoop.hive.ql.Context; import org.apache.hadoop.hive.ql.exec.ConditionalTask; import org.apache.hadoop.hive.ql.exec.MapredLocalTask; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; @@ -239,7 +240,8 @@ public class MapJoinResolver implements PhysicalPlanResolver { LocalMapJoinProcCtx localMapJoinProcCtx = new LocalMapJoinProcCtx(task, physicalContext .getParseContext()); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "MAPJOIN%"), LocalMapJoinProcFactory.getJoinProc()); + opRules.put(new RuleRegExp("R1", MapJoinOperator.getOperatorName() + "%"), + LocalMapJoinProcFactory.getJoinProc()); // The dispatcher fires the processor corresponding to the closest // matching rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(LocalMapJoinProcFactory.getDefaultProc(), diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MetadataOnlyOptimizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MetadataOnlyOptimizer.java index 3e7d979..7de3cb5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MetadataOnlyOptimizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/MetadataOnlyOptimizer.java @@ -30,6 +30,7 @@ import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hive.ql.exec.FileSinkOperator; import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; @@ -264,8 +265,12 @@ public class MetadataOnlyOptimizer implements PhysicalPlanResolver { WalkerCtx walkerCtx = new WalkerCtx(); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "TS%"), new TableScanProcessor()); - opRules.put(new RuleRegExp("R2", "GBY%.*FS%"), new FileSinkProcessor()); + opRules.put(new RuleRegExp("R1", + TableScanOperator.getOperatorName() + "%"), + new TableScanProcessor()); + opRules.put(new RuleRegExp("R2", + GroupByOperator.getOperatorName() + "%.*" + FileSinkOperator.getOperatorName() + "%"), + new FileSinkProcessor()); // The dispatcher fires the processor corresponding to the closest // matching rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SkewJoinResolver.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SkewJoinResolver.java index ef8f313..f4a3cb7 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SkewJoinResolver.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/SkewJoinResolver.java @@ -24,6 +24,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Stack; +import org.apache.hadoop.hive.ql.exec.CommonJoinOperator; import org.apache.hadoop.hive.ql.exec.ConditionalTask; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; @@ -81,7 +82,7 @@ public class SkewJoinResolver implements PhysicalPlanResolver { physicalContext.getParseContext()); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "JOIN%"), SkewJoinProcFactory + opRules.put(new RuleRegExp("R1", CommonJoinOperator.getOperatorName() + "%"), SkewJoinProcFactory .getJoinProc()); // The dispatcher fires the processor corresponding to the closest diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/index/IndexWhereTaskDispatcher.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/index/IndexWhereTaskDispatcher.java index f77cb9c..61c1be7 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/index/IndexWhereTaskDispatcher.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/index/IndexWhereTaskDispatcher.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Stack; import org.apache.hadoop.hive.metastore.api.Index; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.index.bitmap.BitmapIndexHandler; import org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler; @@ -131,7 +132,8 @@ public class IndexWhereTaskDispatcher implements Dispatcher { // We set the pushed predicate from the WHERE clause as the filter expr on // all table scan operators, so we look for table scan operators(TS%) - operatorRules.put(new RuleRegExp("RULEWhere", "TS%"), new IndexWhereProcessor(indexes)); + operatorRules.put(new RuleRegExp("RULEWhere", TableScanOperator.getOperatorName() + "%"), + new IndexWhereProcessor(indexes)); return operatorRules; } diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java index 049e389..b9bdc93 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java @@ -37,6 +37,9 @@ import org.apache.hadoop.hive.ql.ErrorMsg; import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.Utilities; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.FilterOperator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -89,8 +92,13 @@ public class PartitionPruner implements Transform { OpWalkerCtx opWalkerCtx = new OpWalkerCtx(pctx.getOpToPartPruner()); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "(TS%FIL%)|(TS%FIL%FIL%)"), OpProcFactory - .getFilterProc()); + opRules.put(new RuleRegExp("R1", + "(" + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%)|(" + + TableScanOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%" + + FilterOperator.getOperatorName() + "%)"), + OpProcFactory.getFilterProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcessor.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcessor.java index f6b3853..c658c3f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcessor.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/unionproc/UnionProcessor.java @@ -22,6 +22,11 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.UnionOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; import org.apache.hadoop.hive.ql.lib.GraphWalker; @@ -63,14 +68,18 @@ public class UnionProcessor implements Transform { // create a walker which walks the tree in a DFS manner while maintaining // the operator stack. Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "RS%.*UNION%"), - UnionProcFactory.getMapRedUnion()); - opRules.put(new RuleRegExp("R2", "UNION%.*UNION%"), - UnionProcFactory.getUnknownUnion()); - opRules.put(new RuleRegExp("R3", "TS%.*UNION%"), - UnionProcFactory.getMapUnion()); - opRules.put(new RuleRegExp("R3", "MAPJOIN%.*UNION%"), - UnionProcFactory.getMapJoinUnion()); + opRules.put(new RuleRegExp("R1", + ReduceSinkOperator.getOperatorName() + "%.*" + UnionOperator.getOperatorName() + "%"), + UnionProcFactory.getMapRedUnion()); + opRules.put(new RuleRegExp("R2", + UnionOperator.getOperatorName() + "%.*" + UnionOperator.getOperatorName() + "%"), + UnionProcFactory.getUnknownUnion()); + opRules.put(new RuleRegExp("R3", + TableScanOperator.getOperatorName() + "%.*" + UnionOperator.getOperatorName() + "%"), + UnionProcFactory.getMapUnion()); + opRules.put(new RuleRegExp("R3", + MapJoinOperator.getOperatorName() + "%.*" + UnionOperator.getOperatorName() + "%"), + UnionProcFactory.getMapJoinUnion()); // The dispatcher fires the processor for the matching rule and passes the // context along diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 577bfb0..73a62ea 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -62,6 +62,7 @@ import org.apache.hadoop.hive.ql.exec.FunctionInfo; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.GroupByOperator; import org.apache.hadoop.hive.ql.exec.JoinOperator; +import org.apache.hadoop.hive.ql.exec.MapJoinOperator; import org.apache.hadoop.hive.ql.exec.MapRedTask; import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.OperatorFactory; @@ -70,6 +71,7 @@ import org.apache.hadoop.hive.ql.exec.RecordWriter; import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; import org.apache.hadoop.hive.ql.exec.RowSchema; import org.apache.hadoop.hive.ql.exec.StatsTask; +import org.apache.hadoop.hive.ql.exec.SelectOperator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; @@ -7141,27 +7143,42 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { // the operator stack. // The dispatcher generates the plan from the operator tree Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp(new String("R1"), "TS%"), new GenMRTableScan1()); - opRules.put(new RuleRegExp(new String("R2"), "TS%.*RS%"), - new GenMRRedSink1()); - opRules.put(new RuleRegExp(new String("R3"), "RS%.*RS%"), - new GenMRRedSink2()); - opRules.put(new RuleRegExp(new String("R4"), "FS%"), new GenMRFileSink1()); - opRules.put(new RuleRegExp(new String("R5"), "UNION%"), new GenMRUnion1()); - opRules.put(new RuleRegExp(new String("R6"), "UNION%.*RS%"), - new GenMRRedSink3()); - opRules.put(new RuleRegExp(new String("R6"), "MAPJOIN%.*RS%"), - new GenMRRedSink4()); - opRules.put(new RuleRegExp(new String("R7"), "TS%.*MAPJOIN%"), - MapJoinFactory.getTableScanMapJoin()); - opRules.put(new RuleRegExp(new String("R8"), "RS%.*MAPJOIN%"), - MapJoinFactory.getReduceSinkMapJoin()); - opRules.put(new RuleRegExp(new String("R9"), "UNION%.*MAPJOIN%"), - MapJoinFactory.getUnionMapJoin()); - opRules.put(new RuleRegExp(new String("R10"), "MAPJOIN%.*MAPJOIN%"), - MapJoinFactory.getMapJoinMapJoin()); - opRules.put(new RuleRegExp(new String("R11"), "MAPJOIN%SEL%"), - MapJoinFactory.getMapJoin()); + opRules.put(new RuleRegExp(new String("R1"), + TableScanOperator.getOperatorName() + "%"), + new GenMRTableScan1()); + opRules.put(new RuleRegExp(new String("R2"), + TableScanOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + new GenMRRedSink1()); + opRules.put(new RuleRegExp(new String("R3"), + ReduceSinkOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + new GenMRRedSink2()); + opRules.put(new RuleRegExp(new String("R4"), + FileSinkOperator.getOperatorName() + "%"), + new GenMRFileSink1()); + opRules.put(new RuleRegExp(new String("R5"), + UnionOperator.getOperatorName() + "%"), + new GenMRUnion1()); + opRules.put(new RuleRegExp(new String("R6"), + UnionOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + new GenMRRedSink3()); + opRules.put(new RuleRegExp(new String("R6"), + MapJoinOperator.getOperatorName() + "%.*" + ReduceSinkOperator.getOperatorName() + "%"), + new GenMRRedSink4()); + opRules.put(new RuleRegExp(new String("R7"), + TableScanOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + MapJoinFactory.getTableScanMapJoin()); + opRules.put(new RuleRegExp(new String("R8"), + ReduceSinkOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + MapJoinFactory.getReduceSinkMapJoin()); + opRules.put(new RuleRegExp(new String("R9"), + UnionOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + MapJoinFactory.getUnionMapJoin()); + opRules.put(new RuleRegExp(new String("R10"), + MapJoinOperator.getOperatorName() + "%.*" + MapJoinOperator.getOperatorName() + "%"), + MapJoinFactory.getMapJoinMapJoin()); + opRules.put(new RuleRegExp(new String("R11"), + MapJoinOperator.getOperatorName() + "%" + SelectOperator.getOperatorName() + "%"), + MapJoinFactory.getMapJoin()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along diff --git ql/src/java/org/apache/hadoop/hive/ql/ppd/PredicatePushDown.java ql/src/java/org/apache/hadoop/hive/ql/ppd/PredicatePushDown.java index 7b23b7b..6be3d10 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ppd/PredicatePushDown.java +++ ql/src/java/org/apache/hadoop/hive/ql/ppd/PredicatePushDown.java @@ -21,6 +21,15 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.hadoop.hive.ql.exec.Operator; +import org.apache.hadoop.hive.ql.exec.FilterOperator; +import org.apache.hadoop.hive.ql.exec.TableScanOperator; +import org.apache.hadoop.hive.ql.exec.ScriptOperator; +import org.apache.hadoop.hive.ql.exec.LimitOperator; +import org.apache.hadoop.hive.ql.exec.UDTFOperator; +import org.apache.hadoop.hive.ql.exec.CommonJoinOperator; +import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator; +import org.apache.hadoop.hive.ql.exec.LateralViewForwardOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -78,14 +87,30 @@ public class PredicatePushDown implements Transform { OpWalkerInfo opWalkerInfo = new OpWalkerInfo(pGraphContext); Map opRules = new LinkedHashMap(); - opRules.put(new RuleRegExp("R1", "FIL%"), OpProcFactory.getFilterProc()); - opRules.put(new RuleRegExp("R3", "JOIN%"), OpProcFactory.getJoinProc()); - opRules.put(new RuleRegExp("R4", "RS%"), OpProcFactory.getRSProc()); - opRules.put(new RuleRegExp("R5", "TS%"), OpProcFactory.getTSProc()); - opRules.put(new RuleRegExp("R6", "SCR%"), OpProcFactory.getSCRProc()); - opRules.put(new RuleRegExp("R6", "LIM%"), OpProcFactory.getLIMProc()); - opRules.put(new RuleRegExp("R7", "UDTF%"), OpProcFactory.getUDTFProc()); - opRules.put(new RuleRegExp("R8", "LVF%"), OpProcFactory.getLVFProc()); + opRules.put(new RuleRegExp("R1", + FilterOperator.getOperatorName() + "%"), + OpProcFactory.getFilterProc()); + opRules.put(new RuleRegExp("R3", + CommonJoinOperator.getOperatorName() + "%"), + OpProcFactory.getJoinProc()); + opRules.put(new RuleRegExp("R4", + ReduceSinkOperator.getOperatorName() + "%"), + OpProcFactory.getRSProc()); + opRules.put(new RuleRegExp("R5", + TableScanOperator.getOperatorName() + "%"), + OpProcFactory.getTSProc()); + opRules.put(new RuleRegExp("R6", + ScriptOperator.getOperatorName() + "%"), + OpProcFactory.getSCRProc()); + opRules.put(new RuleRegExp("R6", + LimitOperator.getOperatorName() + "%"), + OpProcFactory.getLIMProc()); + opRules.put(new RuleRegExp("R7", + UDTFOperator.getOperatorName() + "%"), + OpProcFactory.getUDTFProc()); + opRules.put(new RuleRegExp("R8", + LateralViewForwardOperator.getOperatorName() + "%"), + OpProcFactory.getLVFProc()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along