You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pv...@apache.org on 2018/03/20 09:27:29 UTC
hive git commit: HIVE-18699: Check for duplicate partitions in
HiveMetastore.exchange_partitions (Marta Kuczora, reviewed by Adam Szita,
Peter Vary)
Repository: hive
Updated Branches:
refs/heads/master 0870ab9ca -> dec3625b9
HIVE-18699: Check for duplicate partitions in HiveMetastore.exchange_partitions (Marta Kuczora, reviewed by Adam Szita, Peter Vary)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/dec3625b
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/dec3625b
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/dec3625b
Branch: refs/heads/master
Commit: dec3625b94d164c66087e115942a875a83590149
Parents: 0870ab9
Author: Peter Vary <pv...@cloudera.com>
Authored: Tue Mar 20 10:26:00 2018 +0100
Committer: Peter Vary <pv...@cloudera.com>
Committed: Tue Mar 20 10:26:00 2018 +0100
----------------------------------------------------------------------
.../apache/hadoop/hive/metastore/HiveMetaStore.java | 14 ++++++++++++++
.../hive/metastore/client/TestExchangePartitions.java | 6 ------
2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/dec3625b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 6838dd7..3a0e760 100644
--- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -3445,6 +3445,20 @@ public class HiveMetaStore extends ThriftHiveMetastore {
List<Map<String, String>> transactionalListenerResponsesForDropPartition =
Lists.newArrayListWithCapacity(partitionsToExchange.size());
+ // Check if any of the partitions already exists in destTable.
+ List<String> destPartitionNames =
+ ms.listPartitionNames(destDbName, destTableName, (short) -1);
+ if (destPartitionNames != null && !destPartitionNames.isEmpty()) {
+ for (Partition partition : partitionsToExchange) {
+ String partToExchangeName =
+ Warehouse.makePartName(destinationTable.getPartitionKeys(), partition.getValues());
+ if (destPartitionNames.contains(partToExchangeName)) {
+ throw new MetaException("The partition " + partToExchangeName
+ + " already exists in the table " + destTableName);
+ }
+ }
+ }
+
try {
for (Partition partition: partitionsToExchange) {
Partition destPartition = new Partition(partition);
http://git-wip-us.apache.org/repos/asf/hive/blob/dec3625b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
index c9b9e9b..5a7c71c 100644
--- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
+++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
@@ -409,9 +409,6 @@ public class TestExchangePartitions extends MetaStoreClientTest {
Map<String, String> partitionSpecs = getPartitionSpec(partitions[1]);
client.exchange_partitions(partitionSpecs, DB_NAME, sourceTable.getTableName(), DB_NAME,
destTable.getTableName());
- // TODO: In this case we get an exception, because the insert statement fails due to duplicated
- // primary key. Maybe this use case could be handled better by checking if the partition already
- // exists.
}
@Test
@@ -936,9 +933,6 @@ public class TestExchangePartitions extends MetaStoreClientTest {
Map<String, String> partitionSpecs = getPartitionSpec(partitions[1]);
client.exchange_partition(partitionSpecs, DB_NAME, sourceTable.getTableName(), DB_NAME,
destTable.getTableName());
- // TODO: In this case we get an exception, because the insert statement fails due to duplicated
- // primary key. Maybe this use case could be handled better by checking if the partition already
- // exists.
}
@Test