This is an automated email from the ASF dual-hosted git repository. liyang pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 1367e9ccff65ece51e57c654380d526c472ed2fb Author: lixiang <447399...@qq.com> AuthorDate: Fri Aug 11 11:48:59 2023 +0800 KYLIN-5784 Optimization for query history filters --- .../kylin/rest/service/QueryHistoryService.java | 27 ++++++++++++---------- .../rest/service/QueryHistoryServiceTest.java | 6 ++--- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java index 0200c2f080..0c947c8de1 100644 --- a/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java +++ b/src/query-service/src/main/java/org/apache/kylin/rest/service/QueryHistoryService.java @@ -18,7 +18,11 @@ package org.apache.kylin.rest.service; +import static org.apache.kylin.common.QueryContext.PUSHDOWN_OBJECT_STORAGE; import static org.apache.kylin.common.exception.code.ErrorCodeServer.PROJECT_NOT_EXIST; +import static org.apache.kylin.metadata.query.QueryHistory.EngineType.CONSTANTS; +import static org.apache.kylin.metadata.query.QueryHistory.EngineType.HIVE; +import static org.apache.kylin.metadata.query.QueryHistory.EngineType.RDBMS; import static org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO.fillZeroForQueryStatistics; import java.lang.reflect.Field; @@ -35,6 +39,7 @@ import java.util.Map; import java.util.TimeZone; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -269,26 +274,24 @@ public class QueryHistoryService extends BasicService implements AsyncTaskQueryH } public QueryHistoryFiltersResponse getQueryHistoryModels(QueryHistoryRequest request, int size) { - QueryHistoryDAO queryHistoryDAO = getQueryHistoryDao(); - List<QueryStatistics> queryStatistics = queryHistoryDAO.getQueryHistoriesModelIds(request); val dataFlowManager = NDataflowManager.getInstance(KylinConfig.getInstanceFromEnv(), request.getProject()); - Stream<String> engineStream = queryStatistics.stream().map(QueryStatistics::getEngineType); List<NDataflow> models = dataFlowManager.listAllDataflows(); - Stream<String> modelStream = models.stream() + List<String> modelList = models.stream() .sorted(Comparator.comparing(NDataflow::getQueryHitCount, Comparator.reverseOrder())) - .map(NDataflow::getModel).map(NDataModel::getAlias); - List<String> engineList = filterByName(engineStream, request.getFilterModelName()); - List<String> modelList = filterByName(modelStream, request.getFilterModelName()); + .map(NDataflow::getModel).map(NDataModel::getAlias).filter(filterByName(request.getFilterModelName())) + .collect(Collectors.toList()); + + List<String> engineList = Stream.of(HIVE.name(), RDBMS.name(), CONSTANTS.name(), PUSHDOWN_OBJECT_STORAGE) + .filter(filterByName(request.getFilterModelName())).collect(Collectors.toList()); + Integer count = engineList.size() + modelList.size(); return new QueryHistoryFiltersResponse(count, models.size(), engineList, modelList.stream().limit(size).collect(Collectors.toList())); } - private List<String> filterByName(Stream<String> stream, String name) { - return stream - .filter(alias -> !StringUtils.isEmpty(alias) && (StringUtils.isEmpty(name) - || alias.toLowerCase(Locale.ROOT).contains(name.toLowerCase(Locale.ROOT)))) - .collect(Collectors.toList()); + private Predicate<String> filterByName(String name) { + return alias -> !StringUtils.isEmpty(alias) && (StringUtils.isEmpty(name) + || alias.toLowerCase(Locale.ROOT).contains(name.toLowerCase(Locale.ROOT))); } private boolean haveSpaces(String text) { diff --git a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java index e93b35dcce..ddc67f464c 100644 --- a/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java +++ b/src/query-service/src/test/java/org/apache/kylin/rest/service/QueryHistoryServiceTest.java @@ -721,11 +721,11 @@ public class QueryHistoryServiceTest extends NLocalFileMetadataTestCase { Mockito.doReturn(queryHistoryDAO).when(queryHistoryService).getQueryHistoryDao(); QueryHistoryFiltersResponse response = queryHistoryService.getQueryHistoryModels(request, 10); - assertEquals(10, (int) response.getSearchCount()); + assertEquals(12, (int) response.getSearchCount()); Assert.assertEquals(8, (int) response.getTotalModelCount()); - Assert.assertEquals(10, response.getEngines().size() + response.getModels().size()); + Assert.assertEquals(12, response.getEngines().size() + response.getModels().size()); Assert.assertEquals("HIVE", response.getEngines().get(0)); - Assert.assertEquals("CONSTANTS", response.getEngines().get(1)); + Assert.assertEquals("RDBMS", response.getEngines().get(1)); Assert.assertEquals("nmodel_basic", response.getModels().get(2)); request.setFilterModelName("nmodel");