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");

Reply via email to