This is an automated email from the ASF dual-hosted git repository.
ngangam 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 5c73a847cd3 HIVE-27728: Renaming partition from legacy tables should
move the partition to the new location (#4752)
5c73a847cd3 is described below
commit 5c73a847cd385424cdc8a7804176fbae7834c90f
Author: dengzh <[email protected]>
AuthorDate: Thu Oct 5 00:33:53 2023 +0800
HIVE-27728: Renaming partition from legacy tables should move the partition
to the new location (#4752)
---
.../clientpositive/translated_external_rename5.q | 26 ++++
.../llap/translated_external_rename5.q.out | 160 +++++++++++++++++++++
.../hadoop/hive/metastore/HiveAlterHandler.java | 4 +-
3 files changed, 189 insertions(+), 1 deletion(-)
diff --git a/ql/src/test/queries/clientpositive/translated_external_rename5.q
b/ql/src/test/queries/clientpositive/translated_external_rename5.q
new file mode 100644
index 00000000000..033de9b30ab
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/translated_external_rename5.q
@@ -0,0 +1,26 @@
+--! qt:replace:/^(?!LOCATION|.*HOOK).*metadata_table_test1/### TABLE DIRECTORY
###/
+
+set
metastore.metadata.transformer.class=org.apache.hadoop.hive.metastore.MetastoreDefaultTransformer;
+set hive.create.as.external.legacy=true;
+
+CREATE TABLE metadata_test1(
+ emp_number int,
+ emp_name string,
+ city string)
+PARTITIONED BY(state string)
+LOCATION 'pfile://${system:test.tmp.dir}/metadata_table_test1';
+
+DESC FORMATTED metadata_test1;
+
+INSERT INTO metadata_test1 PARTITION(state='A') VALUES (11, 'ABC', 'AA');
+INSERT INTO metadata_test1 PARTITION(state='B') VALUES (12, 'XYZ', 'BX'), (13,
'UVW', 'BU');
+select * from default.metadata_test1;
+select "======================== list table directory
=========================";
+dfs -ls ${system:test.tmp.dir}/metadata_table_test1/;
+
+ALTER TABLE default.metadata_test1 PARTITION (state='A') RENAME TO PARTITION
(state='C');
+select * from metadata_test1;
+select "======================== list table directory
=========================";
+dfs -ls ${system:test.tmp.dir}/metadata_table_test1/;
+
+drop table metadata_test1;
diff --git
a/ql/src/test/results/clientpositive/llap/translated_external_rename5.q.out
b/ql/src/test/results/clientpositive/llap/translated_external_rename5.q.out
new file mode 100644
index 00000000000..5519b54c79a
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/translated_external_rename5.q.out
@@ -0,0 +1,160 @@
+PREHOOK: query: CREATE TABLE metadata_test1(
+ emp_number int,
+ emp_name string,
+ city string)
+PARTITIONED BY(state string)
+#### A masked pattern was here ####
+PREHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+PREHOOK: Output: database:default
+PREHOOK: Output: default@metadata_test1
+POSTHOOK: query: CREATE TABLE metadata_test1(
+ emp_number int,
+ emp_name string,
+ city string)
+PARTITIONED BY(state string)
+#### A masked pattern was here ####
+POSTHOOK: type: CREATETABLE
+#### A masked pattern was here ####
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@metadata_test1
+PREHOOK: query: DESC FORMATTED metadata_test1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@metadata_test1
+POSTHOOK: query: DESC FORMATTED metadata_test1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@metadata_test1
+# col_name data_type comment
+emp_number int
+emp_name string
+city string
+
+# Partition Information
+# col_name data_type comment
+state string
+
+# Detailed Table Information
+Database: default
+#### A masked pattern was here ####
+Retention: 0
+### TABLE DIRECTORY ###
+Table Type: EXTERNAL_TABLE
+Table Parameters:
+ COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"}
+ EXTERNAL TRUE
+ TRANSLATED_TO_EXTERNAL TRUE
+ bucketing_version 2
+ external.table.purge TRUE
+ numFiles 0
+ numPartitions 0
+ numRows 0
+ rawDataSize 0
+ totalSize 0
+#### A masked pattern was here ####
+
+# Storage Information
+SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+InputFormat: org.apache.hadoop.mapred.TextInputFormat
+OutputFormat:
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+Compressed: No
+Num Buckets: -1
+Bucket Columns: []
+Sort Columns: []
+Storage Desc Params:
+ serialization.format 1
+PREHOOK: query: INSERT INTO metadata_test1 PARTITION(state='A') VALUES (11,
'ABC', 'AA')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@metadata_test1@state=A
+POSTHOOK: query: INSERT INTO metadata_test1 PARTITION(state='A') VALUES (11,
'ABC', 'AA')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@metadata_test1@state=A
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=A).city SCRIPT []
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=A).emp_name SCRIPT []
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=A).emp_number SCRIPT []
+PREHOOK: query: INSERT INTO metadata_test1 PARTITION(state='B') VALUES (12,
'XYZ', 'BX'), (13, 'UVW', 'BU')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@metadata_test1@state=B
+POSTHOOK: query: INSERT INTO metadata_test1 PARTITION(state='B') VALUES (12,
'XYZ', 'BX'), (13, 'UVW', 'BU')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@metadata_test1@state=B
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=B).city SCRIPT []
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=B).emp_name SCRIPT []
+POSTHOOK: Lineage: metadata_test1 PARTITION(state=B).emp_number SCRIPT []
+PREHOOK: query: select * from default.metadata_test1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@metadata_test1
+PREHOOK: Input: default@metadata_test1@state=A
+PREHOOK: Input: default@metadata_test1@state=B
+#### A masked pattern was here ####
+POSTHOOK: query: select * from default.metadata_test1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@metadata_test1
+POSTHOOK: Input: default@metadata_test1@state=A
+POSTHOOK: Input: default@metadata_test1@state=B
+#### A masked pattern was here ####
+11 ABC AA A
+12 XYZ BX B
+13 UVW BU B
+PREHOOK: query: select "======================== list table directory
========================="
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select "======================== list table directory
========================="
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+======================== list table directory =========================
+Found 2 items
+### TABLE DIRECTORY ###/state=A
+### TABLE DIRECTORY ###/state=B
+PREHOOK: query: ALTER TABLE default.metadata_test1 PARTITION (state='A')
RENAME TO PARTITION (state='C')
+PREHOOK: type: ALTERTABLE_RENAMEPART
+PREHOOK: Input: default@metadata_test1
+PREHOOK: Output: default@metadata_test1@state=A
+POSTHOOK: query: ALTER TABLE default.metadata_test1 PARTITION (state='A')
RENAME TO PARTITION (state='C')
+POSTHOOK: type: ALTERTABLE_RENAMEPART
+POSTHOOK: Input: default@metadata_test1
+POSTHOOK: Input: default@metadata_test1@state=A
+POSTHOOK: Output: default@metadata_test1@state=A
+POSTHOOK: Output: default@metadata_test1@state=C
+PREHOOK: query: select * from metadata_test1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@metadata_test1
+PREHOOK: Input: default@metadata_test1@state=B
+PREHOOK: Input: default@metadata_test1@state=C
+#### A masked pattern was here ####
+POSTHOOK: query: select * from metadata_test1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@metadata_test1
+POSTHOOK: Input: default@metadata_test1@state=B
+POSTHOOK: Input: default@metadata_test1@state=C
+#### A masked pattern was here ####
+12 XYZ BX B
+13 UVW BU B
+11 ABC AA C
+PREHOOK: query: select "======================== list table directory
========================="
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select "======================== list table directory
========================="
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+======================== list table directory =========================
+Found 2 items
+### TABLE DIRECTORY ###/state=B
+### TABLE DIRECTORY ###/state=C
+PREHOOK: query: drop table metadata_test1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@metadata_test1
+PREHOOK: Output: database:default
+PREHOOK: Output: default@metadata_test1
+POSTHOOK: query: drop table metadata_test1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@metadata_test1
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@metadata_test1
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
index 571f5aae361..9bce99ad680 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
@@ -679,7 +679,9 @@ public class HiveAlterHandler implements AlterHandler {
// 1) partition SD Location
// 2) partition column stats if there are any because of part_name field
in HMS table PART_COL_STATS
// 3) rename the partition directory if it is not an external table
- if (!tbl.getTableType().equals(TableType.EXTERNAL_TABLE.toString())) {
+ boolean shouldMoveData = !(MetaStoreUtils.isExternalTable(tbl) &&
+ !MetaStoreUtils.isPropertyTrue(tbl.getParameters(),
"TRANSLATED_TO_EXTERNAL"));
+ if (shouldMoveData) {
// TODO: refactor this into a separate method after master merge, this
one is too big.
try {
db = msdb.getDatabase(catName, dbname);