This is an automated email from the ASF dual-hosted git repository. zabetak 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 260924050b HIVE-26127: INSERT OVERWRITE throws FileNotFound when destination partition is deleted (Yu-Wen Lai, reviewed by Stamatis Zampetakis) 260924050b is described below commit 260924050b11d3342b44091797d88b6f489dcaef Author: Yu-Wen Lai <yu-wen....@cloudera.com> AuthorDate: Fri Apr 8 17:56:32 2022 -0700 HIVE-26127: INSERT OVERWRITE throws FileNotFound when destination partition is deleted (Yu-Wen Lai, reviewed by Stamatis Zampetakis) Closes #3198 --- ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java | 2 +- ql/src/test/queries/clientpositive/insert_overwrite.q | 4 ++++ .../test/results/clientpositive/llap/insert_overwrite.q.out | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) 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 4ed822aa7b..ac21ecd95a 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 @@ -5377,7 +5377,7 @@ private void constructOneLBLocationMap(FileStatus fSta, // But not sure why we changed not to delete the oldPath in HIVE-8750 if it is // not the destf or its subdir? isOldPathUnderDestf = isSubDir(oldPath, destPath, oldFs, destFs, false); - if (isOldPathUnderDestf) { + if (isOldPathUnderDestf && oldFs.exists(oldPath)) { cleanUpOneDirectoryForReplace(oldPath, oldFs, pathFilter, conf, purge, isNeedRecycle); } } catch (IOException e) { diff --git a/ql/src/test/queries/clientpositive/insert_overwrite.q b/ql/src/test/queries/clientpositive/insert_overwrite.q index 357227e4af..43f0bb29af 100644 --- a/ql/src/test/queries/clientpositive/insert_overwrite.q +++ b/ql/src/test/queries/clientpositive/insert_overwrite.q @@ -77,6 +77,10 @@ SELECT count(*) FROM ext_part; SELECT * FROM ext_part ORDER BY par, col; +-- removing a partition manually should not fail the next insert overwrite operation +dfs -rm -r ${hiveconf:hive.metastore.warehouse.dir}/ext_part/par=1; +INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b; + drop table ext_part; drop table b; diff --git a/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out b/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out index 626a8e2c9f..f92c6c6254 100644 --- a/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out +++ b/ql/src/test/results/clientpositive/llap/insert_overwrite.q.out @@ -308,6 +308,17 @@ POSTHOOK: Input: default@ext_part@par=2 third 1 first 2 second 2 +#### A masked pattern was here #### +PREHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b +PREHOOK: type: QUERY +PREHOOK: Input: default@b +PREHOOK: Output: default@ext_part +POSTHOOK: query: INSERT OVERWRITE TABLE ext_part PARTITION (par) SELECT * FROM b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@b +POSTHOOK: Output: default@ext_part +POSTHOOK: Output: default@ext_part@par=1 +POSTHOOK: Lineage: ext_part PARTITION(par=1).col SIMPLE [(b)b.FieldSchema(name:par, type:string, comment:null), ] PREHOOK: query: drop table ext_part PREHOOK: type: DROPTABLE PREHOOK: Input: default@ext_part