You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kg...@apache.org on 2020/07/29 08:02:40 UTC
[hive] branch master updated: HIVE-23806: Avoid clearing column
stat states in all partition in case schema is extended (#1215) (Zoltan
Haindrich reviewed by Peter Vary)
This is an automated email from the ASF dual-hosted git repository.
kgyrtkirk 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 11cbf17 HIVE-23806: Avoid clearing column stat states in all partition in case schema is extended (#1215) (Zoltan Haindrich reviewed by Peter Vary)
11cbf17 is described below
commit 11cbf17e57dc13b800aa9ef4f987582b9219e3dd
Author: Zoltan Haindrich <ki...@rxd.hu>
AuthorDate: Wed Jul 29 10:02:26 2020 +0200
HIVE-23806: Avoid clearing column stat states in all partition in case schema is extended (#1215) (Zoltan Haindrich reviewed by Peter Vary)
---
.../org/apache/hadoop/hive/metastore/HiveAlterHandler.java | 8 ++++++--
.../hadoop/hive/metastore/utils/MetaStoreServerUtils.java | 14 ++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
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 2beeab4..0cfb329 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
@@ -59,7 +59,6 @@ import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -362,7 +361,12 @@ public class HiveAlterHandler implements AlterHandler {
if (isPartitionedTable) {
//Currently only column related changes can be cascaded in alter table
- if(!MetaStoreServerUtils.areSameColumns(oldt.getSd().getCols(), newt.getSd().getCols())) {
+ boolean runPartitionMetadataUpdate =
+ (cascade && !MetaStoreServerUtils.areSameColumns(oldt.getSd().getCols(), newt.getSd().getCols()));
+ // we may skip the update entirely if there are only new columns added
+ runPartitionMetadataUpdate |=
+ !cascade && !MetaStoreServerUtils.arePrefixColumns(oldt.getSd().getCols(), newt.getSd().getCols());
+ if (runPartitionMetadataUpdate) {
parts = msdb.getPartitions(catName, dbname, name, -1);
for (Partition part : parts) {
Partition oldPart = new Partition(part);
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreServerUtils.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreServerUtils.java
index d6cf43c..1969ddd 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreServerUtils.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreServerUtils.java
@@ -32,6 +32,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -501,6 +502,19 @@ public class MetaStoreServerUtils {
return ListUtils.isEqualList(oldCols, newCols);
}
+ /**
+ * Returns true if p is a prefix of s.
+ */
+ public static boolean arePrefixColumns(List<FieldSchema> p, List<FieldSchema> s) {
+ if (p == s) {
+ return true;
+ }
+ if (p.size() > s.size()) {
+ return false;
+ }
+ return ListUtils.isEqualList(p, s.subList(0, p.size()));
+ }
+
public static void updateBasicState(EnvironmentContext environmentContext, Map<String,String>
params) {
if (params == null) {