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..90bc20a 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"), + (new TableScanOperator()).getName() + "%"), + new GenMRTableScan1()); + opRules.put(new RuleRegExp(new String("R2"), + (new TableScanOperator()).getName() + "%.*" + (new ReduceSinkOperator()).getName() + "%"), + new GenMRRedSink1()); + opRules.put(new RuleRegExp(new String("R3"), + (new ReduceSinkOperator()).getName() + "%.*" + (new ReduceSinkOperator()).getName() + "%"), + new GenMRRedSink2()); + opRules.put(new RuleRegExp(new String("R4"), + (new FileSinkOperator()).getName() + "%"), + new GenMRFileSink1()); + opRules.put(new RuleRegExp(new String("R5"), + (new UnionOperator()).getName() + "%"), + new GenMRUnion1()); + opRules.put(new RuleRegExp(new String("R6"), + (new UnionOperator()).getName() + "%.*" + (new ReduceSinkOperator()).getName() + "%"), + new GenMRRedSink3()); + opRules.put(new RuleRegExp(new String("R6"), + (new MapJoinOperator()).getName() + "%.*" + (new ReduceSinkOperator()).getName() + "%"), + new GenMRRedSink4()); + opRules.put(new RuleRegExp(new String("R7"), + (new TableScanOperator()).getName() + "%.*" + (new MapJoinOperator()).getName() + "%"), + MapJoinFactory.getTableScanMapJoin()); + opRules.put(new RuleRegExp(new String("R8"), + (new ReduceSinkOperator()).getName() + "%.*" + (new MapJoinOperator()).getName() + "%"), + MapJoinFactory.getReduceSinkMapJoin()); + opRules.put(new RuleRegExp(new String("R9"), + (new UnionOperator()).getName() + "%.*" + (new MapJoinOperator()).getName() + "%"), + MapJoinFactory.getUnionMapJoin()); + opRules.put(new RuleRegExp(new String("R10"), + (new MapJoinOperator()).getName() + "%.*" + (new MapJoinOperator()).getName() + "%"), + MapJoinFactory.getMapJoinMapJoin()); + opRules.put(new RuleRegExp(new String("R11"), + (new MapJoinOperator()).getName() + "%" + (new SelectOperator()).getName() + "%"), + MapJoinFactory.getMapJoin()); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along