Repository: hive
Updated Branches:
  refs/heads/master 637224fcc -> 1faadb074


HIVE-17063 : insert overwrite partition onto a external table fail when drop 
partition first (Wang Haihua, Deepak Jaiswal, 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/1faadb07
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1faadb07
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1faadb07

Branch: refs/heads/master
Commit: 1faadb0744975538a0ec4b2de63f05caf37b6f40
Parents: 637224f
Author: djaiswal <djais...@apache.org>
Authored: Thu Feb 8 00:10:57 2018 -0800
Committer: djaiswal <djais...@apache.org>
Committed: Thu Feb 8 00:10:57 2018 -0800

----------------------------------------------------------------------
 .../test/resources/testconfiguration.properties |  1 +
 .../apache/hadoop/hive/ql/metadata/Hive.java    | 22 ++++++++++--
 .../insert_after_drop_partition.q               |  7 ++++
 .../llap/insert_after_drop_partition.q.out      | 36 ++++++++++++++++++++
 4 files changed, 64 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/1faadb07/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties 
b/itests/src/test/resources/testconfiguration.properties
index 2a22db9..974bfac 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -555,6 +555,7 @@ minillaplocal.query.files=\
   is_distinct_from.q,\
   infer_bucket_sort_bucketed_table.q,\
   input16_cc.q,\
+  insert_after_drop_partition.q,\
   insert_dir_distcp.q,\
   insert_into_with_schema.q,\
   insert_values_orig_table.q,\

http://git-wip-us.apache.org/repos/asf/hive/blob/1faadb07/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java 
b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index 109f4c7..c8d1589 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -61,8 +61,10 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileChecksum;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Options;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.HiveStatsUtils;
 import org.apache.hadoop.hive.common.JavaUtils;
@@ -3670,7 +3672,15 @@ private void constructOneLBLocationMap(FileStatus fSta,
                   "Unable to move source " + srcStatus.getPath() + " to 
destination " + destFile;
 
               if (null == pool) {
-                if(!destFs.rename(srcStatus.getPath(), destFile)) {
+                boolean success = false;
+                if (destFs instanceof DistributedFileSystem) {
+                  ((DistributedFileSystem)destFs).rename(srcStatus.getPath(), 
destFile, Options.Rename.OVERWRITE);
+                  success = true;
+                } else {
+                  destFs.delete(destFile, false);
+                  success = destFs.rename(srcStatus.getPath(), destFile);
+                }
+                if(!success) {
                   throw new IOException("rename for src path: " + 
srcStatus.getPath() + " to dest:"
                       + destf + " returned false");
                 }
@@ -3681,7 +3691,15 @@ private void constructOneLBLocationMap(FileStatus fSta,
                     SessionState.setCurrentSessionState(parentSession);
                     final String group = srcStatus.getGroup();
                     try {
-                      if (!destFs.rename(srcStatus.getPath(), destFile)) {
+                      boolean success = false;
+                      if (destFs instanceof DistributedFileSystem) {
+                        
((DistributedFileSystem)destFs).rename(srcStatus.getPath(), destFile, 
Options.Rename.OVERWRITE);
+                        success = true;
+                      } else {
+                        destFs.delete(destFile, false);
+                        success = destFs.rename(srcStatus.getPath(), destFile);
+                      }
+                      if (!success) {
                         throw new IOException(
                             "rename for src path: " + srcStatus.getPath() + " 
to dest path:"
                                 + destFile + " returned false");

http://git-wip-us.apache.org/repos/asf/hive/blob/1faadb07/ql/src/test/queries/clientpositive/insert_after_drop_partition.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/insert_after_drop_partition.q 
b/ql/src/test/queries/clientpositive/insert_after_drop_partition.q
new file mode 100644
index 0000000..0087560
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/insert_after_drop_partition.q
@@ -0,0 +1,7 @@
+create external table insert_after_drop_partition(key string, val string) 
partitioned by (insertdate string);
+
+insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10;
+
+alter table insert_after_drop_partition drop partition 
(insertdate='2008-01-01');
+
+insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/1faadb07/ql/src/test/results/clientpositive/llap/insert_after_drop_partition.q.out
----------------------------------------------------------------------
diff --git 
a/ql/src/test/results/clientpositive/llap/insert_after_drop_partition.q.out 
b/ql/src/test/results/clientpositive/llap/insert_after_drop_partition.q.out
new file mode 100644
index 0000000..abe0f8d
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/insert_after_drop_partition.q.out
@@ -0,0 +1,36 @@
+PREHOOK: query: create external table insert_after_drop_partition(key string, 
val string) partitioned by (insertdate string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@insert_after_drop_partition
+POSTHOOK: query: create external table insert_after_drop_partition(key string, 
val string) partitioned by (insertdate string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@insert_after_drop_partition
+PREHOOK: query: insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+POSTHOOK: query: insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+POSTHOOK: Lineage: insert_after_drop_partition 
PARTITION(insertdate=2008-01-01).key SIMPLE [(src)src.FieldSchema(name:key, 
type:string, comment:default), ]
+POSTHOOK: Lineage: insert_after_drop_partition 
PARTITION(insertdate=2008-01-01).val SIMPLE [(src)src.FieldSchema(name:value, 
type:string, comment:default), ]
+PREHOOK: query: alter table insert_after_drop_partition drop partition 
(insertdate='2008-01-01')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: default@insert_after_drop_partition
+PREHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+POSTHOOK: query: alter table insert_after_drop_partition drop partition 
(insertdate='2008-01-01')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: default@insert_after_drop_partition
+POSTHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+PREHOOK: query: insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+POSTHOOK: query: insert overwrite table insert_after_drop_partition partition 
(insertdate='2008-01-01') select * from src limit 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@insert_after_drop_partition@insertdate=2008-01-01
+POSTHOOK: Lineage: insert_after_drop_partition 
PARTITION(insertdate=2008-01-01).key SIMPLE [(src)src.FieldSchema(name:key, 
type:string, comment:default), ]
+POSTHOOK: Lineage: insert_after_drop_partition 
PARTITION(insertdate=2008-01-01).val SIMPLE [(src)src.FieldSchema(name:value, 
type:string, comment:default), ]

Reply via email to