This is an automated email from the ASF dual-hosted git repository.

mahesh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 10554ae  HIVE-22009 : CTLV with user specified location is not 
honoured. ( Naresh P R reviewed by Mahesh Kumar Behera)
10554ae is described below

commit 10554ae8fa3d44b611a716e05a9e9fdda26a44f2
Author: Naresh P R <[email protected]>
AuthorDate: Wed Jul 24 10:44:29 2019 +0530

    HIVE-22009 : CTLV with user specified location is not honoured. ( Naresh P 
R reviewed by Mahesh Kumar Behera)
    
    Signed-off-by: Mahesh Kumar Behera <[email protected]>
---
 .../org/apache/hive/jdbc/TestJdbcWithMiniHS2.java   | 21 +++++++++++++++++++++
 .../table/creation/CreateTableLikeOperation.java    | 16 +++++++++++-----
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git 
a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniHS2.java 
b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniHS2.java
index 2e151ec..03a1926 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniHS2.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniHS2.java
@@ -1676,4 +1676,25 @@ public class TestJdbcWithMiniHS2 {
     }
     return extendedDescription;
   }
+
+  @Test
+  public void testCustomPathsForCTLV() throws Exception {
+    try (Statement stmt = conTestDb.createStatement()) {
+      // Initialize
+      stmt.execute("CREATE TABLE emp_table (id int, name string, salary int)");
+      stmt.execute("insert into emp_table values(1,'aaaaa',20000)");
+      stmt.execute("CREATE VIEW emp_view AS SELECT * FROM emp_table WHERE 
salary>10000");
+      String customPath = System.getProperty("test.tmp.dir") + "/custom";
+
+      //Test External CTLV
+      String extPath = customPath + "/emp_ext_table";
+      stmt.execute("CREATE EXTERNAL TABLE emp_ext_table like emp_view STORED 
AS PARQUET LOCATION '" + extPath + "'");
+      assertTrue(getDetailedTableDescription(stmt, 
"emp_ext_table").contains(extPath));
+
+      //Test Managed CTLV
+      String mndPath = customPath + "/emp_mm_table";
+      stmt.execute("CREATE TABLE emp_mm_table like emp_view STORED AS ORC 
LOCATION '" + mndPath + "'");
+      assertTrue(getDetailedTableDescription(stmt, 
"emp_mm_table").contains(mndPath));
+    }
+  }
 }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java
index 4837d44..8a11261 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java
@@ -94,6 +94,8 @@ public class CreateTableLikeOperation extends 
DDLOperation<CreateTableLikeDesc>
       setExternalProperties(table);
     }
 
+    setUserSpecifiedLocation(table);
+
     table.setFields(oldTable.getCols());
     table.setPartCols(oldTable.getPartCols());
 
@@ -114,11 +116,7 @@ public class CreateTableLikeOperation extends 
DDLOperation<CreateTableLikeDesc>
     table.setTableName(names[1]);
     table.setOwner(SessionState.getUserFromAuthenticator());
 
-    if (desc.getLocation() != null) {
-      table.setDataLocation(new Path(desc.getLocation()));
-    } else {
-      table.unsetDataLocation();
-    }
+    setUserSpecifiedLocation(table);
 
     setTableParameters(table);
 
@@ -138,6 +136,14 @@ public class CreateTableLikeOperation extends 
DDLOperation<CreateTableLikeDesc>
     return table;
   }
 
+  private void setUserSpecifiedLocation(Table table) {
+    if (desc.getLocation() != null) {
+      table.setDataLocation(new Path(desc.getLocation()));
+    } else {
+      table.unsetDataLocation();
+    }
+  }
+
   private void setTableParameters(Table tbl) throws HiveException {
     Set<String> retainer = new HashSet<String>();
 

Reply via email to