diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/correlation/CorrelationUtilities.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/correlation/CorrelationUtilities.java index d2cf78bee5..2c6aa6fdbd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/correlation/CorrelationUtilities.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/correlation/CorrelationUtilities.java @@ -234,17 +234,24 @@ protected static int indexOf(ExprNodeDesc cexpr, ExprNodeDesc[] pexprs, Operator if (cursor instanceof JoinOperator) { return findParents((JoinOperator) cursor, target); } - if (cursor instanceof ScriptOperator && !trustScript) { - return null; + if (cursor instanceof ScriptOperator && trustScript) { + continue; } - if (!(cursor instanceof SelectOperator + if (cursor instanceof SelectOperator || cursor instanceof FilterOperator || cursor instanceof ForwardOperator - || cursor instanceof ScriptOperator - || cursor instanceof GroupByOperator - || cursor instanceof ReduceSinkOperator)) { - return null; + || cursor instanceof ReduceSinkOperator) { + continue; + } + if (cursor instanceof GroupByOperator) { + GroupByOperator groupByOperator = (GroupByOperator) cursor; + Mode mode = groupByOperator.getConf().getMode(); + if (mode == Mode.COMPLETE || mode == Mode.FINAL) { + continue; + } } + // default to break + return null; } return null; }