diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptMaterializationValidator.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptMaterializationValidator.java index 110136ddcd..1aa17314d0 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptMaterializationValidator.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/HiveRelOptMaterializationValidator.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveJoin; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveProject; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSemiJoin; +import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortExchange; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveSortLimit; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveTableScan; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveUnion; @@ -123,7 +124,6 @@ public RelNode visit(HiveAggregate aggregate) { @Override public RelNode visit(RelNode node) { - setAutomaticRewritingInvalidReason(node); // There are several Hive RelNode types which do not have their own visit() method // defined in the HiveRelShuttle interface, which need to be handled appropriately here. // Per jcamachorodriguez we should not encounter HiveMultiJoin/HiveSortExchange @@ -132,6 +132,8 @@ public RelNode visit(RelNode node) { return visit((HiveUnion) node); } else if (node instanceof HiveSortLimit) { return visit((HiveSortLimit) node); + } else if (node instanceof HiveSortExchange) { + return visit((HiveSortExchange) node); } else if (node instanceof HiveSemiJoin) { return visit((HiveSemiJoin) node); } else if (node instanceof HiveExcept) { @@ -225,18 +227,27 @@ public RelNode visit(LogicalExchange exchange) { // Note: Not currently part of the HiveRelNode interface private RelNode visit(HiveUnion union) { + setAutomaticRewritingInvalidReason("Statement has unsupported operator: union."); return visitChildren(union); } // Note: Not currently part of the HiveRelNode interface private RelNode visit(HiveSortLimit sort) { + setAutomaticRewritingInvalidReason("Statement has unsupported clause: order by."); checkExpr(sort.getFetchExpr()); checkExpr(sort.getOffsetExpr()); return visitChildren(sort); } + // Note: Not currently part of the HiveRelNode interface + private RelNode visit(HiveSortExchange sort) { + setAutomaticRewritingInvalidReason("Statement has unsupported clause: sort by."); + return visitChildren(sort); + } + // Note: Not currently part of the HiveRelNode interface private RelNode visit(HiveSemiJoin semiJoin) { + setAutomaticRewritingInvalidReason("Statement has unsupported join type: semi join."); checkExpr(semiJoin.getCondition()); checkExpr(semiJoin.getJoinFilter()); return visitChildren(semiJoin); @@ -244,11 +255,13 @@ private RelNode visit(HiveSemiJoin semiJoin) { // Note: Not currently part of the HiveRelNode interface private RelNode visit(HiveExcept except) { + setAutomaticRewritingInvalidReason("Statement has unsupported operator: except."); return visitChildren(except); } // Note: Not currently part of the HiveRelNode interface private RelNode visit(HiveIntersect intersect) { + setAutomaticRewritingInvalidReason("Statement has unsupported operator: intersect."); return visitChildren(intersect); } diff --git ql/src/test/results/clientnegative/materialized_view_no_cbo_rewrite.q.out ql/src/test/results/clientnegative/materialized_view_no_cbo_rewrite.q.out index 8e55c2c55a..159e2dc767 100644 --- ql/src/test/results/clientnegative/materialized_view_no_cbo_rewrite.q.out +++ ql/src/test/results/clientnegative/materialized_view_no_cbo_rewrite.q.out @@ -19,4 +19,4 @@ POSTHOOK: Output: default@cmv_basetable POSTHOOK: Lineage: cmv_basetable.a SCRIPT [] POSTHOOK: Lineage: cmv_basetable.b SCRIPT [] POSTHOOK: Lineage: cmv_basetable.c SCRIPT [] -FAILED: SemanticException Cannot enable automatic rewriting for materialized view. Unsupported RelNode type HiveSortExchange encountered in the query plan +FAILED: SemanticException Cannot enable automatic rewriting for materialized view. Statement has unsupported clause: sort by.