From 78435823b666ec502d30c4f8e134e8aa530bc16a Mon Sep 17 00:00:00 2001 From: Jibing-Li <64681310+Jibing-Li@users.noreply.github.com> Date: Wed, 10 May 2023 10:55:33 +0800 Subject: [PATCH] [Fix](multi catalog)Return all partition values while reading hive table. (#19434) Return all partition values while reading hive table. Add a config item for the max value of hive table to partition list cache. Default value is 100. --- .../src/main/java/org/apache/doris/common/Config.java | 8 ++++++++ .../apache/doris/datasource/hive/HiveMetaStoreCache.java | 2 +- .../doris/datasource/hive/PooledHiveMetaStoreClient.java | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java index 4fd02903da..38df46f922 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java @@ -1679,6 +1679,14 @@ public class Config extends ConfigBase { @ConfField(mutable = false, masterOnly = false) public static long max_hive_partition_cache_num = 100000; + @ConfField(mutable = false, masterOnly = false, description = {"Hive表到分区名列表缓存的最大数量。", + "Max cache number of hive table to partition names list."}) + public static long max_hive_table_catch_num = 1000; + + @ConfField(mutable = false, masterOnly = false, description = {"获取Hive分区值时候的最大返回数量,-1代表没有限制。", + "Max number of hive partition values to return while list partitions, -1 means no limitation."}) + public static short max_hive_list_partition_num = -1; + /** * Max cache loader thread-pool size. * Max thread pool size for loading external meta cache 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 435272782c..5470dba54c 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 @@ -112,7 +112,7 @@ public class HiveMetaStoreCache { } private void init() { - partitionValuesCache = CacheBuilder.newBuilder().maximumSize(Config.max_hive_partition_cache_num) + partitionValuesCache = CacheBuilder.newBuilder().maximumSize(Config.max_hive_table_catch_num) .expireAfterAccess(Config.external_cache_expire_time_minutes_after_access, TimeUnit.MINUTES) .build(CacheLoader.asyncReloading( new CacheLoader() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/PooledHiveMetaStoreClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/PooledHiveMetaStoreClient.java index 2af866cf2a..e244050198 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/PooledHiveMetaStoreClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/PooledHiveMetaStoreClient.java @@ -53,7 +53,8 @@ public class PooledHiveMetaStoreClient { private static final Logger LOG = LogManager.getLogger(PooledHiveMetaStoreClient.class); private static final HiveMetaHookLoader DUMMY_HOOK_LOADER = t -> null; - private static final short MAX_LIST_PARTITION_NUM = 10000; + // -1 means no limit on the partitions returned. + private static final short MAX_LIST_PARTITION_NUM = Config.max_hive_list_partition_num; private Queue clientPool = new LinkedList<>(); private final int poolSize;