Author: gunther
Date: Wed Jul 16 00:41:12 2014
New Revision: 1610889
URL: http://svn.apache.org/r1610889
Log:
HIVE-7413: Fall back to Non-CBO optimizer if CBO fails (Laljo John Pullokkaran
via Gunther Hagleitner)
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified:
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL:
http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1610889&r1=1610888&r2=1610889&view=diff
==============================================================================
---
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
(original)
+++
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Wed Jul 16 00:41:12 2014
@@ -9572,6 +9572,7 @@ public class SemanticAnalyzer extends Ba
disableJoinMerge = true;
sinkOp = genPlan(qb);
+ LOG.info("CBO Succeeded; optimized logical plan.");
/*
* Use non CBO Result Set Schema so as to preserve user specified
names.
@@ -9581,8 +9582,9 @@ public class SemanticAnalyzer extends Ba
* .getRowResolver(), true);
*/
} catch (Exception e) {
- LOG.warn("CBO failed, skipping CBO. ", e);
- throw new RuntimeException(e);
+ //TODO: Distinguish between exceptions that can be retried vs user
errors
+ LOG.error("CBO failed, skipping CBO. ", e);
+ reAnalyzeAST = true;
} finally {
runCBO = false;
disableJoinMerge = false;
@@ -11752,7 +11754,6 @@ public class SemanticAnalyzer extends Ba
if ((queryProperties.getJoinCount() < HiveConf.getIntVar(conf,
HiveConf.ConfVars.HIVE_CBO_MAX_JOINS_SUPPORTED))
- && (queryProperties.getOuterJoinCount() == 0)
&& !queryProperties.hasClusterBy()
&& !queryProperties.hasDistributeBy()
&& !queryProperties.hasSortBy()
@@ -11762,6 +11763,8 @@ public class SemanticAnalyzer extends Ba
&& !queryProperties.hasMultiDestQuery()
&& !queryProperties.hasFilterWithSubQuery()) {
runOptiqPlanner = true;
+ } else {
+ LOG.info("Can not invoke CBO; query contains operators not supported for
CBO.");
}
return runOptiqPlanner;