You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2016/10/28 02:33:14 UTC

[06/11] hive git commit: Preserve the location of table created with the location clause in table rename (Chaoyu Tang, reviewed by Aihua Xu)

Preserve the location of table created with the location clause in table rename (Chaoyu Tang, reviewed by Aihua Xu)


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

Branch: refs/heads/hive-14535
Commit: 130617443bb05d79c18420c0c4e903a76da3651c
Parents: e49170a
Author: ctang <ct...@cloudera.com>
Authored: Thu Oct 27 09:52:23 2016 -0400
Committer: ctang <ct...@cloudera.com>
Committed: Thu Oct 27 09:52:23 2016 -0400

----------------------------------------------------------------------
 .../hive/hcatalog/cli/TestSemanticAnalysis.java |   9 +-
 .../hadoop/hive/metastore/HiveAlterHandler.java | 128 +++++++++--------
 .../clientpositive/encryption_move_tbl.q        |  43 +++++-
 .../encrypted/encryption_move_tbl.q.out         | 140 ++++++++++++++++++-
 4 files changed, 248 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/13061744/hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestSemanticAnalysis.java
----------------------------------------------------------------------
diff --git a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestSemanticAnalysis.java b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestSemanticAnalysis.java
index ce4ef75..e41b1f1 100644
--- a/hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestSemanticAnalysis.java
+++ b/hcatalog/core/src/test/java/org/apache/hive/hcatalog/cli/TestSemanticAnalysis.java
@@ -248,11 +248,16 @@ public class TestSemanticAnalysis extends HCatBaseTest {
     hcatDriver.run("drop table newname");
     hcatDriver.run("create table oldname (a int)");
     Table tbl = client.getTable(MetaStoreUtils.DEFAULT_DATABASE_NAME, "oldname");
-    assertTrue(tbl.getSd().getLocation().contains("oldname"));
+    assertTrue("The old table location is: " + tbl.getSd().getLocation(), tbl.getSd().getLocation().contains("oldname"));
 
     hcatDriver.run("alter table oldname rename to newNAME");
     tbl = client.getTable(MetaStoreUtils.DEFAULT_DATABASE_NAME, "newname");
-    assertTrue(tbl.getSd().getLocation().contains("newname"));
+    // since the oldname table is not under its database (See HIVE-15059), the renamed oldname table will keep
+    // its location after HIVE-14909. I changed to check the existence of the newname table and its name instead
+    // of verifying its location
+    // assertTrue(tbl.getSd().getLocation().contains("newname"));
+    assertTrue(tbl != null);
+    assertTrue(tbl.getTableName().equalsIgnoreCase("newname"));
 
     hcatDriver.run("drop table newname");
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/13061744/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
index 7b84595..ede9b52 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
@@ -163,72 +163,84 @@ public class HiveAlterHandler implements AlterHandler {
         }
       }
 
-      // if this alter is a rename, the table is not a virtual view, the user
-      // didn't change the default location (or new location is empty), and
-      // table is not an external table, that means user is asking metastore to
-      // move data to the new location corresponding to the new name
+      // rename needs change the data location and move the data to the new location corresponding
+      // to the new name if:
+      // 1) the table is not a virtual view, and
+      // 2) the table is not an external table, and
+      // 3) the user didn't change the default location (or new location is empty), and
+      // 4) the table was not initially created with a specified location
       if (rename
           && !oldt.getTableType().equals(TableType.VIRTUAL_VIEW.toString())
           && (oldt.getSd().getLocation().compareTo(newt.getSd().getLocation()) == 0
             || StringUtils.isEmpty(newt.getSd().getLocation()))
           && !MetaStoreUtils.isExternalTable(oldt)) {
-
+        Database olddb = msdb.getDatabase(dbname);
+        // if a table was created in a user specified location using the DDL like
+        // create table tbl ... location ...., it should be treated like an external table
+        // in the table rename, its data location should not be changed. We can check
+        // if the table directory was created directly under its database directory to tell
+        // if it is such a table
         srcPath = new Path(oldt.getSd().getLocation());
-        srcFs = wh.getFs(srcPath);
-
-        // that means user is asking metastore to move data to new location
-        // corresponding to the new name
-        // get new location
-        Database db = msdb.getDatabase(newt.getDbName());
-        Path databasePath = constructRenamedPath(wh.getDatabasePath(db), srcPath);
-        destPath = new Path(databasePath, newt.getTableName().toLowerCase());
-        destFs = wh.getFs(destPath);
-
-        newt.getSd().setLocation(destPath.toString());
-        moveData = true;
-
-        // check that destination does not exist otherwise we will be
-        // overwriting data
-        // check that src and dest are on the same file system
-        if (!FileUtils.equalsFileSystem(srcFs, destFs)) {
-          throw new InvalidOperationException("table new location " + destPath
-              + " is on a different file system than the old location "
-              + srcPath + ". This operation is not supported");
-        }
-        try {
-          srcFs.exists(srcPath); // check that src exists and also checks
-                                 // permissions necessary
-          if (destFs.exists(destPath)) {
-            throw new InvalidOperationException("New location for this table "
-                + newt.getDbName() + "." + newt.getTableName()
-                + " already exists : " + destPath);
+        String oldtRelativePath = (new Path(olddb.getLocationUri()).toUri())
+            .relativize(srcPath.toUri()).toString();
+        boolean tableInSpecifiedLoc = !oldtRelativePath.equalsIgnoreCase(name)
+            && !oldtRelativePath.equalsIgnoreCase(name + Path.SEPARATOR);
+
+        if (!tableInSpecifiedLoc) {
+          srcFs = wh.getFs(srcPath);
+
+          // get new location
+          Database db = msdb.getDatabase(newt.getDbName());
+          Path databasePath = constructRenamedPath(wh.getDatabasePath(db), srcPath);
+          destPath = new Path(databasePath, newt.getTableName().toLowerCase());
+          destFs = wh.getFs(destPath);
+
+          newt.getSd().setLocation(destPath.toString());
+          moveData = true;
+
+          // check that destination does not exist otherwise we will be
+          // overwriting data
+          // check that src and dest are on the same file system
+          if (!FileUtils.equalsFileSystem(srcFs, destFs)) {
+            throw new InvalidOperationException("table new location " + destPath
+                + " is on a different file system than the old location "
+                + srcPath + ". This operation is not supported");
           }
-        } catch (IOException e) {
-          throw new InvalidOperationException("Unable to access new location "
-              + destPath + " for table " + newt.getDbName() + "."
-              + newt.getTableName());
-        }
-        String oldTblLocPath = srcPath.toUri().getPath();
-        String newTblLocPath = destPath.toUri().getPath();
-
-        // also the location field in partition
-        List<Partition> parts = msdb.getPartitions(dbname, name, -1);
-        for (Partition part : parts) {
-          String oldPartLoc = part.getSd().getLocation();
-          if (oldPartLoc.contains(oldTblLocPath)) {
-            URI oldUri = new Path(oldPartLoc).toUri();
-            String newPath = oldUri.getPath().replace(oldTblLocPath, newTblLocPath);
-            Path newPartLocPath = new Path(oldUri.getScheme(), oldUri.getAuthority(), newPath);
-            altps.add(ObjectPair.create(part, part.getSd().getLocation()));
-            part.getSd().setLocation(newPartLocPath.toString());
-            String oldPartName = Warehouse.makePartName(oldt.getPartitionKeys(), part.getValues());
-            try {
-              //existing partition column stats is no longer valid, remove them
-              msdb.deletePartitionColumnStatistics(dbname, name, oldPartName, part.getValues(), null);
-            } catch (InvalidInputException iie) {
-              throw new InvalidOperationException("Unable to update partition stats in table rename." + iie);
+          try {
+            srcFs.exists(srcPath); // check that src exists and also checks
+                                   // permissions necessary
+            if (destFs.exists(destPath)) {
+              throw new InvalidOperationException("New location for this table "
+                  + newt.getDbName() + "." + newt.getTableName()
+                  + " already exists : " + destPath);
+            }
+          } catch (IOException e) {
+            throw new InvalidOperationException("Unable to access new location "
+                + destPath + " for table " + newt.getDbName() + "."
+                + newt.getTableName());
+          }
+          String oldTblLocPath = srcPath.toUri().getPath();
+          String newTblLocPath = destPath.toUri().getPath();
+
+          // also the location field in partition
+          List<Partition> parts = msdb.getPartitions(dbname, name, -1);
+          for (Partition part : parts) {
+            String oldPartLoc = part.getSd().getLocation();
+            if (oldPartLoc.contains(oldTblLocPath)) {
+              URI oldUri = new Path(oldPartLoc).toUri();
+              String newPath = oldUri.getPath().replace(oldTblLocPath, newTblLocPath);
+              Path newPartLocPath = new Path(oldUri.getScheme(), oldUri.getAuthority(), newPath);
+              altps.add(ObjectPair.create(part, part.getSd().getLocation()));
+              part.getSd().setLocation(newPartLocPath.toString());
+              String oldPartName = Warehouse.makePartName(oldt.getPartitionKeys(), part.getValues());
+              try {
+                //existing partition column stats is no longer valid, remove them
+                msdb.deletePartitionColumnStatistics(dbname, name, oldPartName, part.getValues(), null);
+              } catch (InvalidInputException iie) {
+                throw new InvalidOperationException("Unable to update partition stats in table rename." + iie);
+              }
+              msdb.alterPartition(dbname, name, part.getValues(), part);
             }
-            msdb.alterPartition(dbname, name, part.getValues(), part);
           }
         }
       } else if (MetaStoreUtils.requireCalStats(hiveConf, null, null, newt, environmentContext) &&

http://git-wip-us.apache.org/repos/asf/hive/blob/13061744/ql/src/test/queries/clientpositive/encryption_move_tbl.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/encryption_move_tbl.q b/ql/src/test/queries/clientpositive/encryption_move_tbl.q
index a25d955..7a5de7b 100644
--- a/ql/src/test/queries/clientpositive/encryption_move_tbl.q
+++ b/ql/src/test/queries/clientpositive/encryption_move_tbl.q
@@ -6,26 +6,57 @@ set hive.cli.errors.ignore=true;
 
 DROP TABLE IF EXISTS encrypted_table PURGE;
 DROP DATABASE IF EXISTS encrypted_db;
-CREATE TABLE encrypted_table (key INT, value STRING) LOCATION '${hiveconf:hive.metastore.warehouse.dir}/default/encrypted_table';
+
+-- create table default.encrypted_table in its default warehouse location ${hiveconf:hive.metastore.warehouse.dir}/encrypted_table
+CREATE TABLE encrypted_table (key INT, value STRING) LOCATION '${hiveconf:hive.metastore.warehouse.dir}/encrypted_table';
 CRYPTO CREATE_KEY --keyName key_128 --bitLength 128;
-CRYPTO CREATE_ZONE --keyName key_128 --path ${hiveconf:hive.metastore.warehouse.dir}/default/encrypted_table;
+CRYPTO CREATE_ZONE --keyName key_128 --path ${hiveconf:hive.metastore.warehouse.dir}/encrypted_table;
 
-CREATE DATABASE encrypted_db LOCATION '${hiveconf:hive.metastore.warehouse.dir}/encrypted_db';
+-- create database encrypted_db in its default warehouse location {hiveconf:hive.metastore.warehouse.dir}/encrypted_db.db
+CREATE DATABASE encrypted_db LOCATION '${hiveconf:hive.metastore.warehouse.dir}/encrypted_db.db';
 CRYPTO CREATE_KEY --keyName key_128_2 --bitLength 128;
-CRYPTO CREATE_ZONE --keyName key_128_2 --path ${hiveconf:hive.metastore.warehouse.dir}/encrypted_db;
+CRYPTO CREATE_ZONE --keyName key_128_2 --path ${hiveconf:hive.metastore.warehouse.dir}/encrypted_db.db;
 
 INSERT OVERWRITE TABLE encrypted_table SELECT * FROM src;
 SHOW TABLES;
--- should fail
+-- should fail, since they are in different encryption zones
 ALTER TABLE default.encrypted_table RENAME TO encrypted_db.encrypted_table_2;
 SHOW TABLES;
+
 -- should succeed in Hadoop 2.7 but fail in 2.6  (HDFS-7530)
 ALTER TABLE default.encrypted_table RENAME TO default.plain_table;
 SHOW TABLES;
 
+-- create table encrypted_table_outloc under default database but in a specified location other than the default db location in the warehouse
+-- rename should succeed since it does not need to move data (HIVE-14909), otherwise, it would fail.
+CREATE TABLE encrypted_table_outloc (key INT, value STRING) LOCATION '${hiveconf:hive.metastore.warehouse.dir}/../specified_table_location';
+CRYPTO CREATE_KEY --keyName key_128_3 --bitLength 128;
+CRYPTO CREATE_ZONE --keyName key_128_3 --path ${hiveconf:hive.metastore.warehouse.dir}/../specified_table_location;
+ALTER TABLE encrypted_table_outloc RENAME TO renamed_encrypted_table_outloc;
+SHOW TABLES;
+
+-- create database encrypted_db_outloc in a specified location other than its default in warehouse
+CREATE DATABASE encrypted_db_outloc LOCATION '${hiveconf:hive.metastore.warehouse.dir}/../specified_db_location';
+CRYPTO CREATE_KEY --keyName key_128_4 --bitLength 128;
+CRYPTO CREATE_ZONE --keyName key_128_4 --path ${hiveconf:hive.metastore.warehouse.dir}/../specified_db_location;
+
+USE encrypted_db_outloc;
+CREATE TABLE encrypted_table (key INT, value STRING);
+INSERT OVERWRITE TABLE encrypted_table SELECT * FROM default.src;
+ALTER TABLE encrypted_table RENAME TO renamed_encrypted_table;
+-- should succeed since data moves within specified_db_location
+SHOW TABLES;
+-- should fail, since they are in different encryption zones
+ALTER TABLE encrypted_db_outloc.renamed_encrypted_table RENAME TO default.plain_table_2;
+SHOW TABLES;
 
-DROP TABLE encrypted_table PURGE;
+DROP TABLE default.encrypted_table PURGE;
 DROP TABLE default.plain_table PURGE;
+DROP TABLE default.renamed_encrypted_table_outloc PURGE;
 DROP DATABASE encrypted_db;
+DROP TABLE encrypted_db_outloc.renamed_encrypted_table PURGE;
+DROP DATABASE encrypted_db_outloc;
 CRYPTO DELETE_KEY --keyName key_128;
 CRYPTO DELETE_KEY --keyName key_128_2;
+CRYPTO DELETE_KEY --keyName key_128_3;
+CRYPTO DELETE_KEY --keyName key_128_4;

http://git-wip-us.apache.org/repos/asf/hive/blob/13061744/ql/src/test/results/clientpositive/encrypted/encryption_move_tbl.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/encrypted/encryption_move_tbl.q.out b/ql/src/test/results/clientpositive/encrypted/encryption_move_tbl.q.out
index 910ce25..26396b2 100644
--- a/ql/src/test/results/clientpositive/encrypted/encryption_move_tbl.q.out
+++ b/ql/src/test/results/clientpositive/encrypted/encryption_move_tbl.q.out
@@ -17,16 +17,19 @@ POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@encrypted_table
 Encryption key created: 'key_128'
-Encryption zone created: '/build/ql/test/data/warehouse/default/encrypted_table' using key: 'key_128'
+Encryption zone created: '/build/ql/test/data/warehouse/encrypted_table' using key: 'key_128'
+PREHOOK: query: -- create database encrypted_db in its default warehouse location {hiveconf:hive.metastore.warehouse.dir}/encrypted_db.db
 #### A masked pattern was here ####
 PREHOOK: type: CREATEDATABASE
 PREHOOK: Output: database:encrypted_db
 #### A masked pattern was here ####
+POSTHOOK: query: -- create database encrypted_db in its default warehouse location {hiveconf:hive.metastore.warehouse.dir}/encrypted_db.db
+#### A masked pattern was here ####
 POSTHOOK: type: CREATEDATABASE
 POSTHOOK: Output: database:encrypted_db
 #### A masked pattern was here ####
 Encryption key created: 'key_128_2'
-Encryption zone created: '/build/ql/test/data/warehouse/encrypted_db' using key: 'key_128_2'
+Encryption zone created: '/build/ql/test/data/warehouse/encrypted_db.db' using key: 'key_128_2'
 PREHOOK: query: INSERT OVERWRITE TABLE encrypted_table SELECT * FROM src
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
@@ -45,12 +48,12 @@ POSTHOOK: type: SHOWTABLES
 POSTHOOK: Input: database:default
 encrypted_table
 src
-PREHOOK: query: -- should fail
+PREHOOK: query: -- should fail, since they are in different encryption zones
 ALTER TABLE default.encrypted_table RENAME TO encrypted_db.encrypted_table_2
 PREHOOK: type: ALTERTABLE_RENAME
 PREHOOK: Input: default@encrypted_table
 PREHOOK: Output: default@encrypted_table
-FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Alter Table operation for default.encrypted_table failed to move data due to: '/build/ql/test/data/warehouse/default/encrypted_table can't be moved from encryption zone /build/ql/test/data/warehouse/default/encrypted_table to encryption zone /build/ql/test/data/warehouse/encrypted_db.' See hive log file for details.
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Alter Table operation for default.encrypted_table failed to move data due to: '/build/ql/test/data/warehouse/encrypted_table can't be moved from encryption zone /build/ql/test/data/warehouse/encrypted_table to encryption zone /build/ql/test/data/warehouse/encrypted_db.db.' See hive log file for details.
 PREHOOK: query: SHOW TABLES
 PREHOOK: type: SHOWTABLES
 PREHOOK: Input: database:default
@@ -78,9 +81,110 @@ POSTHOOK: type: SHOWTABLES
 POSTHOOK: Input: database:default
 plain_table
 src
-PREHOOK: query: DROP TABLE encrypted_table PURGE
+PREHOOK: query: -- create table encrypted_table_outloc under default database but in a specified location other than the default db location in the warehouse
+-- rename should succeed since it does not need to move data (HIVE-14909), otherwise, it would fail.
+#### A masked pattern was here ####
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@encrypted_table_outloc
+POSTHOOK: query: -- create table encrypted_table_outloc under default database but in a specified location other than the default db location in the warehouse
+-- rename should succeed since it does not need to move data (HIVE-14909), otherwise, it would fail.
+#### A masked pattern was here ####
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@encrypted_table_outloc
+Encryption key created: 'key_128_3'
+Encryption zone created: '/build/ql/test/data/specified_table_location' using key: 'key_128_3'
+PREHOOK: query: ALTER TABLE encrypted_table_outloc RENAME TO renamed_encrypted_table_outloc
+PREHOOK: type: ALTERTABLE_RENAME
+PREHOOK: Input: default@encrypted_table_outloc
+PREHOOK: Output: default@encrypted_table_outloc
+POSTHOOK: query: ALTER TABLE encrypted_table_outloc RENAME TO renamed_encrypted_table_outloc
+POSTHOOK: type: ALTERTABLE_RENAME
+POSTHOOK: Input: default@encrypted_table_outloc
+POSTHOOK: Output: default@encrypted_table_outloc
+POSTHOOK: Output: default@renamed_encrypted_table_outloc
+PREHOOK: query: SHOW TABLES
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:default
+POSTHOOK: query: SHOW TABLES
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:default
+plain_table
+renamed_encrypted_table_outloc
+src
+PREHOOK: query: -- create database encrypted_db_outloc in a specified location other than its default in warehouse
+#### A masked pattern was here ####
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:encrypted_db_outloc
+#### A masked pattern was here ####
+POSTHOOK: query: -- create database encrypted_db_outloc in a specified location other than its default in warehouse
+#### A masked pattern was here ####
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:encrypted_db_outloc
+#### A masked pattern was here ####
+Encryption key created: 'key_128_4'
+Encryption zone created: '/build/ql/test/data/specified_db_location' using key: 'key_128_4'
+PREHOOK: query: USE encrypted_db_outloc
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:encrypted_db_outloc
+POSTHOOK: query: USE encrypted_db_outloc
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:encrypted_db_outloc
+PREHOOK: query: CREATE TABLE encrypted_table (key INT, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:encrypted_db_outloc
+PREHOOK: Output: encrypted_db_outloc@encrypted_table
+POSTHOOK: query: CREATE TABLE encrypted_table (key INT, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:encrypted_db_outloc
+POSTHOOK: Output: encrypted_db_outloc@encrypted_table
+PREHOOK: query: INSERT OVERWRITE TABLE encrypted_table SELECT * FROM default.src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: encrypted_db_outloc@encrypted_table
+POSTHOOK: query: INSERT OVERWRITE TABLE encrypted_table SELECT * FROM default.src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: encrypted_db_outloc@encrypted_table
+POSTHOOK: Lineage: encrypted_table.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: encrypted_table.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: ALTER TABLE encrypted_table RENAME TO renamed_encrypted_table
+PREHOOK: type: ALTERTABLE_RENAME
+PREHOOK: Input: encrypted_db_outloc@encrypted_table
+PREHOOK: Output: encrypted_db_outloc@encrypted_table
+POSTHOOK: query: ALTER TABLE encrypted_table RENAME TO renamed_encrypted_table
+POSTHOOK: type: ALTERTABLE_RENAME
+POSTHOOK: Input: encrypted_db_outloc@encrypted_table
+POSTHOOK: Output: encrypted_db_outloc@encrypted_table
+POSTHOOK: Output: encrypted_db_outloc@renamed_encrypted_table
+PREHOOK: query: -- should succeed since data moves within specified_db_location
+SHOW TABLES
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:encrypted_db_outloc
+POSTHOOK: query: -- should succeed since data moves within specified_db_location
+SHOW TABLES
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:encrypted_db_outloc
+renamed_encrypted_table
+PREHOOK: query: -- should fail, since they are in different encryption zones
+ALTER TABLE encrypted_db_outloc.renamed_encrypted_table RENAME TO default.plain_table_2
+PREHOOK: type: ALTERTABLE_RENAME
+PREHOOK: Input: encrypted_db_outloc@renamed_encrypted_table
+PREHOOK: Output: encrypted_db_outloc@renamed_encrypted_table
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Alter Table operation for encrypted_db_outloc.renamed_encrypted_table failed to move data due to: '/build/ql/test/data/specified_db_location/renamed_encrypted_table can't be moved from an encryption zone.' See hive log file for details.
+PREHOOK: query: SHOW TABLES
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:encrypted_db_outloc
+POSTHOOK: query: SHOW TABLES
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:encrypted_db_outloc
+renamed_encrypted_table
+PREHOOK: query: DROP TABLE default.encrypted_table PURGE
 PREHOOK: type: DROPTABLE
-POSTHOOK: query: DROP TABLE encrypted_table PURGE
+POSTHOOK: query: DROP TABLE default.encrypted_table PURGE
 POSTHOOK: type: DROPTABLE
 PREHOOK: query: DROP TABLE default.plain_table PURGE
 PREHOOK: type: DROPTABLE
@@ -90,6 +194,14 @@ POSTHOOK: query: DROP TABLE default.plain_table PURGE
 POSTHOOK: type: DROPTABLE
 POSTHOOK: Input: default@plain_table
 POSTHOOK: Output: default@plain_table
+PREHOOK: query: DROP TABLE default.renamed_encrypted_table_outloc PURGE
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@renamed_encrypted_table_outloc
+PREHOOK: Output: default@renamed_encrypted_table_outloc
+POSTHOOK: query: DROP TABLE default.renamed_encrypted_table_outloc PURGE
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@renamed_encrypted_table_outloc
+POSTHOOK: Output: default@renamed_encrypted_table_outloc
 PREHOOK: query: DROP DATABASE encrypted_db
 PREHOOK: type: DROPDATABASE
 PREHOOK: Input: database:encrypted_db
@@ -98,3 +210,19 @@ POSTHOOK: query: DROP DATABASE encrypted_db
 POSTHOOK: type: DROPDATABASE
 POSTHOOK: Input: database:encrypted_db
 POSTHOOK: Output: database:encrypted_db
+PREHOOK: query: DROP TABLE encrypted_db_outloc.renamed_encrypted_table PURGE
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: encrypted_db_outloc@renamed_encrypted_table
+PREHOOK: Output: encrypted_db_outloc@renamed_encrypted_table
+POSTHOOK: query: DROP TABLE encrypted_db_outloc.renamed_encrypted_table PURGE
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: encrypted_db_outloc@renamed_encrypted_table
+POSTHOOK: Output: encrypted_db_outloc@renamed_encrypted_table
+PREHOOK: query: DROP DATABASE encrypted_db_outloc
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:encrypted_db_outloc
+PREHOOK: Output: database:encrypted_db_outloc
+POSTHOOK: query: DROP DATABASE encrypted_db_outloc
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:encrypted_db_outloc
+POSTHOOK: Output: database:encrypted_db_outloc