HIVE-15300: Reuse table information in SemanticAnalyzer::getMetaData to reduce 
compilation time (Rajesh Balamohan, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b1857742
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b1857742
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b1857742

Branch: refs/heads/hive-14535
Commit: b18577426d93d9b73ad8f50dfcf428681765b57e
Parents: 696be9f
Author: Rajesh Balamohan <rbalamo...@apache.org>
Authored: Thu May 25 21:30:43 2017 +0530
Committer: Rajesh Balamohan <rbalamo...@apache.org>
Committed: Thu May 25 21:30:43 2017 +0530

----------------------------------------------------------------------
 .../hadoop/hive/ql/parse/SemanticAnalyzer.java   | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/b1857742/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index f2b0bd0..7f5051c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -1988,7 +1988,12 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
       String tabName = qb.getTabNameForAlias(alias);
       String cteName = tabName.toLowerCase();
 
-      Table tab = db.getTable(tabName, false);
+      // Get table details from tabNameToTabObject cache
+      Table tab = getTableObjectByName(tabName, false);
+      if (tab != null) {
+        // do a deep copy, in case downstream changes it.
+        tab = new Table(tab.getTTable().deepCopy());
+      }
       if (tab == null ||
               tab.getDbName().equals(SessionState.get().getCurrentDatabase())) 
{
         Table materializedTab = ctx.getMaterializedTable(cteName);
@@ -10924,16 +10929,22 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
     }
   }
 
-  private Table getTableObjectByName(String tableName) throws HiveException {
+  private Table getTableObjectByName(String tableName, boolean throwException) 
throws HiveException {
     if (!tabNameToTabObject.containsKey(tableName)) {
-      Table table = db.getTable(tableName);
-      tabNameToTabObject.put(tableName, table);
+      Table table = db.getTable(tableName, throwException);
+      if (table != null) {
+        tabNameToTabObject.put(tableName, table);
+      }
       return table;
     } else {
       return tabNameToTabObject.get(tableName);
     }
   }
 
+  private Table getTableObjectByName(String tableName) throws HiveException {
+    return getTableObjectByName(tableName, true);
+  }
+
   private void walkASTMarkTABREF(ASTNode ast, Set<String> cteAlias)
       throws SemanticException {
     Queue<Node> queue = new LinkedList<>();

Reply via email to