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 <k...@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) {