You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2016/07/06 22:18:15 UTC
hive git commit: HIVE-14138: CBO failed for select current_database()
(Peter Vary, reviewed by Jesus Camacho Rodriguez)
Repository: hive
Updated Branches:
refs/heads/master 13e702916 -> e75ede3af
HIVE-14138: CBO failed for select current_database() (Peter Vary, reviewed by Jesus Camacho Rodriguez)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/e75ede3a
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/e75ede3a
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/e75ede3a
Branch: refs/heads/master
Commit: e75ede3afebd42e4dd5b92f509cbfa5ca00aef2c
Parents: 13e7029
Author: Peter Vary <pv...@cloudera.com>
Authored: Wed Jul 6 23:13:10 2016 +0100
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Wed Jul 6 23:13:10 2016 +0100
----------------------------------------------------------------------
.../apache/hadoop/hive/ql/parse/CalcitePlanner.java | 8 +++++---
ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java | 13 +++++++++++++
.../java/org/apache/hadoop/hive/ql/parse/QBExpr.java | 13 +++++++++++++
.../results/clientpositive/tez/explainuser_1.q.out | 2 +-
4 files changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/e75ede3a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index a7ee015..6c57d3e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -387,8 +387,9 @@ public class CalcitePlanner extends SemanticAnalyzer {
boolean needToLogMessage = STATIC_LOG.isInfoEnabled();
boolean isSupportedRoot = root == HiveParser.TOK_QUERY || root == HiveParser.TOK_EXPLAIN
|| qb.isCTAS();
- boolean isSupportedType = qb.getIsQuery() || qb.isCTAS()
- || cboCtx.type == PreCboCtx.Type.INSERT;
+ // Queries without a source table currently are not supported by CBO
+ boolean isSupportedType = (qb.getIsQuery() && !qb.containsQueryWithoutSourceTable())
+ || qb.isCTAS() || cboCtx.type == PreCboCtx.Type.INSERT;
boolean noBadTokens = HiveCalciteUtil.validateASTForUnsupportedTokens(ast);
boolean result = isSupportedRoot && isSupportedType && getCreateViewDesc() == null
&& noBadTokens;
@@ -400,7 +401,8 @@ public class CalcitePlanner extends SemanticAnalyzer {
msg += "doesn't have QUERY or EXPLAIN as root and not a CTAS; ";
}
if (!isSupportedType) {
- msg += "is not a query, CTAS, or insert; ";
+ msg += "is not a query with at least one source table "
+ + " or there is a subquery without a source table, or CTAS, or insert; ";
}
if (getCreateViewDesc() != null) {
msg += "has create view; ";
http://git-wip-us.apache.org/repos/asf/hive/blob/e75ede3a/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java
index de7b151..7e732f3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java
@@ -437,4 +437,17 @@ public class QB {
return aliasInsideView;
}
+ /**
+ * returns true, if the query block contains any query, or subquery without a source table
+ * Like select current_user(), select current_database()
+ * @return true, if the query block contains any query without a source table
+ */
+ public boolean containsQueryWithoutSourceTable() {
+ for (QBExpr qbexpr : aliasToSubq.values()) {
+ if (qbexpr.containsQueryWithoutSourceTable()) {
+ return true;
+ }
+ }
+ return aliasToTabs.size()==0 && aliasToSubq.size()==0;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/e75ede3a/ql/src/java/org/apache/hadoop/hive/ql/parse/QBExpr.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/QBExpr.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/QBExpr.java
index 32aee48..cccf0f6 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/QBExpr.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/QBExpr.java
@@ -120,4 +120,17 @@ public class QBExpr {
}
return qbexpr1.isSimpleSelectQuery() && qbexpr2.isSimpleSelectQuery();
}
+
+ /**
+ * returns true, if the query block contains any query, or subquery without a source table
+ * Like select current_user(), select current_database()
+ * @return true, if the query block contains any query without a source table
+ */
+ public boolean containsQueryWithoutSourceTable() {
+ if (qb != null) {
+ return qb.containsQueryWithoutSourceTable();
+ } else {
+ return qbexpr1.containsQueryWithoutSourceTable() || qbexpr2.containsQueryWithoutSourceTable();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/e75ede3a/ql/src/test/results/clientpositive/tez/explainuser_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/explainuser_1.q.out b/ql/src/test/results/clientpositive/tez/explainuser_1.q.out
index d4b29c6..e06451d 100644
--- a/ql/src/test/results/clientpositive/tez/explainuser_1.q.out
+++ b/ql/src/test/results/clientpositive/tez/explainuser_1.q.out
@@ -5358,7 +5358,7 @@ PREHOOK: query: explain select explode(array('a', 'b'))
PREHOOK: type: QUERY
POSTHOOK: query: explain select explode(array('a', 'b'))
POSTHOOK: type: QUERY
-Plan not optimized by CBO due to missing feature [Others].
+Plan not optimized by CBO.
Stage-0
Fetch Operator