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;


Reply via email to