This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new dee2b70d3e4 [enhance](mtmv)hive cache add partitionId to partitionName Map (#38525) dee2b70d3e4 is described below commit dee2b70d3e433b2c046198aefeb723440e9befcb Author: zhangdong <493738...@qq.com> AuthorDate: Mon Aug 12 11:05:00 2024 +0800 [enhance](mtmv)hive cache add partitionId to partitionName Map (#38525) MTMV need get partitionName by partitionId but now only have partitionName=>partitionId Map,when there are many partitions, obtaining the name from this map based on the ID can be slow, --- .../java/org/apache/doris/catalog/OlapTable.java | 10 ---------- .../doris/datasource/hive/HMSExternalTable.java | 20 +++----------------- .../doris/datasource/hive/HiveMetaStoreCache.java | 10 ++++++---- .../org/apache/doris/mtmv/MTMVPartitionUtil.java | 9 --------- .../org/apache/doris/mtmv/MTMVRelatedTableIf.java | 9 --------- .../org/apache/doris/datasource/CatalogMgrTest.java | 5 ++++- .../org/apache/doris/mtmv/MTMVPartitionUtilTest.java | 8 -------- 7 files changed, 13 insertions(+), 58 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index a1fbbcc1fb1..884cd4f4054 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -2921,16 +2921,6 @@ public class OlapTable extends Table implements MTMVRelatedTableIf, GsonPostProc return new MTMVVersionSnapshot(visibleVersion); } - @Override - public String getPartitionName(long partitionId) throws AnalysisException { - readLock(); - try { - return getPartitionOrAnalysisException(partitionId).getName(); - } finally { - readUnlock(); - } - } - private static Cloud.GetVersionResponse getVersionFromMeta(Cloud.GetVersionRequest req) throws RpcException { long startAt = System.nanoTime(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java index 6752ae5dcbe..e1afbf3dc0b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HMSExternalTable.java @@ -48,6 +48,7 @@ import org.apache.doris.thrift.THiveTable; import org.apache.doris.thrift.TTableDescriptor; import org.apache.doris.thrift.TTableType; +import com.google.common.collect.BiMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -732,28 +733,13 @@ public class HMSExternalTable extends ExternalTable implements MTMVRelatedTableI getDbName(), getName(), getPartitionColumnTypes()); Map<String, PartitionItem> res = Maps.newHashMap(); Map<Long, PartitionItem> idToPartitionItem = hivePartitionValues.getIdToPartitionItem(); + BiMap<Long, String> idToName = hivePartitionValues.getPartitionNameToIdMap().inverse(); for (Entry<Long, PartitionItem> entry : idToPartitionItem.entrySet()) { - try { - res.put(getPartitionName(entry.getKey()), entry.getValue()); - } catch (AnalysisException e) { - LOG.info("can not get partitionName by: " + entry.getKey()); - } - + res.put(idToName.get(entry.getKey()), entry.getValue()); } return res; } - @Override - public String getPartitionName(long partitionId) throws AnalysisException { - Map<String, Long> partitionNameToIdMap = getHivePartitionValues().getPartitionNameToIdMap(); - for (Entry<String, Long> entry : partitionNameToIdMap.entrySet()) { - if (entry.getValue().equals(partitionId)) { - return entry.getKey(); - } - } - throw new AnalysisException("can not find partition, partitionId: " + partitionId); - } - private HiveMetaStoreCache.HivePartitionValues getHivePartitionValues() { HiveMetaStoreCache cache = Env.getCurrentEnv().getExtMetaCacheMgr() .getMetaStoreCache((HMSExternalCatalog) getCatalog()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java index 631362a5b41..312f2382b0d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/HiveMetaStoreCache.java @@ -54,6 +54,8 @@ import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -246,7 +248,7 @@ public class HiveMetaStoreCache { LOG.debug("load #{} partitions for {} in catalog {}", partitionNames.size(), key, catalog.getName()); } Map<Long, PartitionItem> idToPartitionItem = Maps.newHashMapWithExpectedSize(partitionNames.size()); - Map<String, Long> partitionNameToIdMap = Maps.newHashMapWithExpectedSize(partitionNames.size()); + BiMap<String, Long> partitionNameToIdMap = HashBiMap.create(partitionNames.size()); Map<Long, List<UniqueId>> idToUniqueIdsMap = Maps.newHashMapWithExpectedSize(partitionNames.size()); long idx = 0; for (String partitionName : partitionNames) { @@ -1074,7 +1076,7 @@ public class HiveMetaStoreCache { @Data public static class HivePartitionValues { private long nextPartitionId; - private Map<String, Long> partitionNameToIdMap; + private BiMap<String, Long> partitionNameToIdMap; private Map<Long, List<UniqueId>> idToUniqueIdsMap; private Map<Long, PartitionItem> idToPartitionItem; private Map<Long, List<String>> partitionValuesMap; @@ -1093,7 +1095,7 @@ public class HiveMetaStoreCache { Map<Range<PartitionKey>, UniqueId> rangeToId, RangeMap<ColumnBound, UniqueId> singleColumnRangeMap, long nextPartitionId, - Map<String, Long> partitionNameToIdMap, + BiMap<String, Long> partitionNameToIdMap, Map<Long, List<UniqueId>> idToUniqueIdsMap, Map<UniqueId, Range<ColumnBound>> singleUidToColumnRangeMap, Map<Long, List<String>> partitionValuesMap) { @@ -1111,7 +1113,7 @@ public class HiveMetaStoreCache { public HivePartitionValues copy() { HivePartitionValues copy = new HivePartitionValues(); copy.setNextPartitionId(nextPartitionId); - copy.setPartitionNameToIdMap(partitionNameToIdMap == null ? null : Maps.newHashMap(partitionNameToIdMap)); + copy.setPartitionNameToIdMap(partitionNameToIdMap == null ? null : HashBiMap.create(partitionNameToIdMap)); copy.setIdToUniqueIdsMap(idToUniqueIdsMap == null ? null : Maps.newHashMap(idToUniqueIdsMap)); copy.setIdToPartitionItem(idToPartitionItem == null ? null : Maps.newHashMap(idToPartitionItem)); copy.setPartitionValuesMap(partitionValuesMap == null ? null : Maps.newHashMap(partitionValuesMap)); diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java index 61fc3e91651..b07ca6ad1d1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java @@ -41,7 +41,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -166,14 +165,6 @@ public class MTMVPartitionUtil { return result.getDescs(); } - public static List<String> getPartitionNamesByIds(MTMV mtmv, Collection<Long> ids) throws AnalysisException { - List<String> res = Lists.newArrayList(); - for (Long partitionId : ids) { - res.add(mtmv.getPartitionName(partitionId)); - } - return res; - } - public static List<Long> getPartitionsIdsByNames(MTMV mtmv, List<String> partitions) throws AnalysisException { mtmv.readLock(); try { diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelatedTableIf.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelatedTableIf.java index 8aee7741cee..c34df750de5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelatedTableIf.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRelatedTableIf.java @@ -79,15 +79,6 @@ public interface MTMVRelatedTableIf extends TableIf { */ MTMVSnapshotIf getTableSnapshot() throws AnalysisException; - /** - * getPartitionName - * - * @param partitionId - * @return partitionName - * @throws AnalysisException - */ - String getPartitionName(long partitionId) throws AnalysisException; - /** * Does the current type of table allow timed triggering * diff --git a/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java b/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java index 364e1f23b16..5f1e19f3284 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/datasource/CatalogMgrTest.java @@ -63,6 +63,8 @@ import org.apache.doris.utframe.TestWithFeService; import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.base.Preconditions; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Range; @@ -477,6 +479,7 @@ public class CatalogMgrTest extends TestWithFeService { partitionValueCacheKey.getTypes()); HivePartitionValues partitionValues = metaStoreCache.getPartitionValues(partitionValueCacheKey); Assert.assertEquals(partitionValues.getPartitionNameToIdMap().size(), 4); + Assert.assertEquals(partitionValues.getPartitionNameToIdMap().inverse().size(), 4); } @Test @@ -520,7 +523,7 @@ public class CatalogMgrTest extends TestWithFeService { HiveMetaStoreCache metaStoreCache) { // partition name format: nation=cn/city=beijing Map<Long, PartitionItem> idToPartitionItem = Maps.newHashMapWithExpectedSize(partitionNames.size()); - Map<String, Long> partitionNameToIdMap = Maps.newHashMapWithExpectedSize(partitionNames.size()); + BiMap<String, Long> partitionNameToIdMap = HashBiMap.create(partitionNames.size()); Map<Long, List<UniqueId>> idToUniqueIdsMap = Maps.newHashMapWithExpectedSize(partitionNames.size()); long idx = 0; for (String partitionName : partitionNames) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java index d40e6db5d44..d6c4a87f224 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java @@ -99,10 +99,6 @@ public class MTMVPartitionUtilTest { minTimes = 0; result = baseSnapshotIf; - mtmv.getPartitionName(anyLong); - minTimes = 0; - result = "name1"; - mtmv.getRefreshSnapshot(); minTimes = 0; result = refreshSnapshot; @@ -123,10 +119,6 @@ public class MTMVPartitionUtilTest { minTimes = 0; result = baseSnapshotIf; - baseOlapTable.getPartitionName(anyLong); - minTimes = 0; - result = "name1"; - refreshSnapshot.equalsWithRelatedPartition(anyString, anyString, (MTMVSnapshotIf) any); minTimes = 0; result = true; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org