You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/06/29 05:48:13 UTC

[06/50] kylin git commit: #1173 refine Cube and Model search API

#1173 refine Cube and Model search API

provide both exact-match and fuzzy search API for Cube and Model


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f32165ef
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f32165ef
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f32165ef

Branch: refs/heads/master
Commit: f32165ef3c89ed6a6004a63d28f7227e6cd6d1e6
Parents: 56e9fb9
Author: Roger Shi <ro...@hotmail.com>
Authored: Thu Jun 15 20:56:07 2017 +0800
Committer: Hongbin Ma <ma...@kyligence.io>
Committed: Thu Jun 15 21:16:29 2017 +0800

----------------------------------------------------------------------
 .../apache/kylin/rest/controller/CubeController.java |  2 +-
 .../kylin/rest/controller2/CubeControllerV2.java     |  3 ++-
 .../kylin/rest/controller2/ModelControllerV2.java    |  3 ++-
 .../org/apache/kylin/rest/service/CubeService.java   |  5 +++--
 .../org/apache/kylin/rest/service/ModelService.java  | 15 ++++++++-------
 .../org/apache/kylin/rest/service/QueryService.java  |  2 +-
 .../apache/kylin/rest/service/CubeServiceTest.java   |  2 +-
 .../apache/kylin/rest/service/ModelServiceTest.java  |  6 +++---
 8 files changed, 21 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index bfa5603..14c80a0 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -101,7 +101,7 @@ public class CubeController extends BasicController {
     @ResponseBody
     public List<CubeInstance> getCubes(@RequestParam(value = "cubeName", required = false) String cubeName, @RequestParam(value = "modelName", required = false) String modelName, @RequestParam(value = "projectName", required = false) String projectName, @RequestParam(value = "limit", required = false) Integer limit, @RequestParam(value = "offset", required = false) Integer offset) {
         List<CubeInstance> cubes;
-        cubes = cubeService.listAllCubes(cubeName, projectName, modelName);
+        cubes = cubeService.listAllCubes(cubeName, projectName, modelName, true);
 
         int climit = (null == limit) ? cubes.size() : limit;
         int coffset = (null == offset) ? 0 : offset;

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
index 309fffc..720cf76 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
@@ -102,6 +102,7 @@ public class CubeControllerV2 extends BasicController {
     @RequestMapping(value = "", method = { RequestMethod.GET }, produces = { "application/vnd.apache.kylin-v2+json" })
     @ResponseBody
     public EnvelopeResponse getCubesPaging(@RequestParam(value = "cubeName", required = false) String cubeName,
+            @RequestParam(value = "exactMatch", required = false, defaultValue = "true") boolean exactMatch,
             @RequestParam(value = "modelName", required = false) String modelName,
             @RequestParam(value = "projectName", required = false) String projectName,
             @RequestParam(value = "pageOffset", required = false, defaultValue = "0") Integer pageOffset,
@@ -109,7 +110,7 @@ public class CubeControllerV2 extends BasicController {
 
         HashMap<String, Object> data = new HashMap<String, Object>();
         List<CubeInstanceResponse> response = new ArrayList<CubeInstanceResponse>();
-        List<CubeInstance> cubes = cubeService.listAllCubes(cubeName, projectName, modelName);
+        List<CubeInstance> cubes = cubeService.listAllCubes(cubeName, projectName, modelName, exactMatch);
 
         // official cubes
         for (CubeInstance cube : cubes) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/controller2/ModelControllerV2.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/ModelControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/ModelControllerV2.java
index e775c9c..58f6bee 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller2/ModelControllerV2.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/ModelControllerV2.java
@@ -92,6 +92,7 @@ public class ModelControllerV2 extends BasicController {
     @RequestMapping(value = "", method = { RequestMethod.GET }, produces = { "application/vnd.apache.kylin-v2+json" })
     @ResponseBody
     public EnvelopeResponse getModelsPaging(@RequestParam(value = "modelName", required = false) String modelName,
+            @RequestParam(value = "exactMatch", required = false, defaultValue = "true") boolean exactMatch,
             @RequestParam(value = "projectName", required = false) String projectName,
             @RequestParam(value = "pageOffset", required = false, defaultValue = "0") Integer pageOffset,
             @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize)
@@ -100,7 +101,7 @@ public class ModelControllerV2 extends BasicController {
         List<DataModelDescResponse> response = new ArrayList<DataModelDescResponse>();
 
         // official models
-        for (DataModelDesc m : modelService.listAllModels(modelName, projectName)) {
+        for (DataModelDesc m : modelService.listAllModels(modelName, projectName, exactMatch)) {
             Preconditions.checkState(!m.isDraft());
             
             DataModelDescResponse r = new DataModelDescResponse(m);

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
index 4a03e05..74d8578 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
@@ -97,7 +97,7 @@ public class CubeService extends BasicService {
     private ModelService modelService;
 
     @PostFilter(Constant.ACCESS_POST_FILTER_READ)
-    public List<CubeInstance> listAllCubes(final String cubeName, final String projectName, final String modelName) {
+    public List<CubeInstance> listAllCubes(final String cubeName, final String projectName, final String modelName, boolean exactMatch) {
         List<CubeInstance> cubeInstances = null;
         ProjectInstance project = (null != projectName) ? getProjectManager().getProject(projectName) : null;
 
@@ -124,7 +124,8 @@ public class CubeService extends BasicService {
         List<CubeInstance> filterCubes = new ArrayList<CubeInstance>();
         for (CubeInstance cubeInstance : filterModelCubes) {
             boolean isCubeMatch = (null == cubeName)
-                    || cubeInstance.getName().toLowerCase().contains(cubeName.toLowerCase());
+                    || (!exactMatch && cubeInstance.getName().toLowerCase().contains(cubeName.toLowerCase())) ||
+                    (exactMatch && cubeInstance.getName().toLowerCase().equals(cubeName.toLowerCase()));
 
             if (isCubeMatch) {
                 filterCubes.add(cubeInstance);

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
index 14ee65a..fa54eaa 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
@@ -73,7 +73,7 @@ public class ModelService extends BasicService {
     private CubeService cubeService;
 
     @PostFilter(Constant.ACCESS_POST_FILTER_READ)
-    public List<DataModelDesc> listAllModels(final String modelName, final String projectName) throws IOException {
+    public List<DataModelDesc> listAllModels(final String modelName, final String projectName, boolean exactMatch) throws IOException {
         List<DataModelDesc> models;
         ProjectInstance project = (null != projectName) ? getProjectManager().getProject(projectName) : null;
 
@@ -86,7 +86,8 @@ public class ModelService extends BasicService {
         List<DataModelDesc> filterModels = new ArrayList<DataModelDesc>();
         for (DataModelDesc modelDesc : models) {
             boolean isModelMatch = (null == modelName) || modelName.length() == 0
-                    || modelDesc.getName().toLowerCase().equals(modelName.toLowerCase());
+                    || (exactMatch && modelDesc.getName().toLowerCase().equals(modelName.toLowerCase()))
+                    || (!exactMatch && modelDesc.getName().toLowerCase().contains(modelName.toLowerCase()));
 
             if (isModelMatch) {
                 filterModels.add(modelDesc);
@@ -99,7 +100,7 @@ public class ModelService extends BasicService {
     public List<DataModelDesc> getModels(final String modelName, final String projectName, final Integer limit,
             final Integer offset) throws IOException {
 
-        List<DataModelDesc> modelDescs = listAllModels(modelName, projectName);
+        List<DataModelDesc> modelDescs = listAllModels(modelName, projectName, true);
 
         if (limit == null || offset == null) {
             return modelDescs;
@@ -182,7 +183,7 @@ public class ModelService extends BasicService {
 
     public Map<TblColRef, Set<CubeInstance>> getUsedDimCols(String modelName) {
         Map<TblColRef, Set<CubeInstance>> ret = Maps.newHashMap();
-        List<CubeInstance> cubeInstances = cubeService.listAllCubes(null, null, modelName);
+        List<CubeInstance> cubeInstances = cubeService.listAllCubes(null, null, modelName, true);
         for (CubeInstance cubeInstance : cubeInstances) {
             CubeDesc cubeDesc = cubeInstance.getDescriptor();
             for (TblColRef tblColRef : cubeDesc.listDimensionColumnsIncludingDerived()) {
@@ -199,7 +200,7 @@ public class ModelService extends BasicService {
 
     public Map<TblColRef, Set<CubeInstance>> getUsedNonDimCols(String modelName) {
         Map<TblColRef, Set<CubeInstance>> ret = Maps.newHashMap();
-        List<CubeInstance> cubeInstances = cubeService.listAllCubes(null, null, modelName);
+        List<CubeInstance> cubeInstances = cubeService.listAllCubes(null, null, modelName, true);
         for (CubeInstance cubeInstance : cubeInstances) {
             CubeDesc cubeDesc = cubeInstance.getDescriptor();
             Set<TblColRef> tblColRefs = Sets.newHashSet(cubeDesc.listAllColumns());//make a copy
@@ -218,7 +219,7 @@ public class ModelService extends BasicService {
 
     private boolean validateUpdatingModel(DataModelDesc dataModelDesc) throws IOException {
         String modelName = dataModelDesc.getName();
-        List<CubeInstance> cubes = cubeService.listAllCubes(null, null, modelName);
+        List<CubeInstance> cubes = cubeService.listAllCubes(null, null, modelName, true);
         if (cubes != null && cubes.size() != 0) {
             dataModelDesc.init(getConfig(), getMetadataManager().getAllTablesMap(),
                     getMetadataManager().getCcInfoMap());
@@ -255,7 +256,7 @@ public class ModelService extends BasicService {
                     return false;
             }
 
-            DataModelDesc originDataModelDesc = listAllModels(modelName, null).get(0);
+            DataModelDesc originDataModelDesc = listAllModels(modelName, null, true).get(0);
 
             if (!dataModelDesc.getRootFactTable().equals(originDataModelDesc.getRootFactTable()))
                 return false;

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
index 1b118a3..bf32140 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -610,7 +610,7 @@ public class QueryService extends BasicService {
 
         ProjectInstance projectInstance = getProjectManager().getProject(project);
         for (String modelName : projectInstance.getModels()) {
-            DataModelDesc dataModelDesc = modelService.listAllModels(modelName, project).get(0);
+            DataModelDesc dataModelDesc = modelService.listAllModels(modelName, project, true).get(0);
             if (!dataModelDesc.isDraft()) {
 
                 // update table type: FACT

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server/src/test/java/org/apache/kylin/rest/service/CubeServiceTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/service/CubeServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/CubeServiceTest.java
index a190d6d..96146ef 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/CubeServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/CubeServiceTest.java
@@ -51,7 +51,7 @@ public class CubeServiceTest extends ServiceTestBase {
         Assert.assertNotNull(cubeService.getMetadataManager());
         Assert.assertNotNull(cacheService.getOLAPDataSource(ProjectInstance.DEFAULT_PROJECT_NAME));
 
-        List<CubeInstance> cubes = cubeService.listAllCubes(null, null, null);
+        List<CubeInstance> cubes = cubeService.listAllCubes(null, null, null, true);
         Assert.assertNotNull(cubes);
         CubeInstance cube = cubes.get(0);
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f32165ef/server/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
index 2012a05..b78b18e 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
@@ -48,7 +48,7 @@ public class ModelServiceTest extends ServiceTestBase {
 
     @Test
     public void testSuccessModelUpdate() throws IOException, JobException {
-        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_inner_join_model", "default");
+        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_inner_join_model", "default", true);
         Assert.assertTrue(dataModelDescs.size() == 1);
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -64,7 +64,7 @@ public class ModelServiceTest extends ServiceTestBase {
     @Test
     public void testSuccessModelUpdateOnComputedColumn() throws IOException, JobException, NoSuchFieldException, IllegalAccessException {
 
-        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_left_join_model", "default");
+        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_left_join_model", "default", true);
         Assert.assertTrue(dataModelDescs.size() == 1);
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -83,7 +83,7 @@ public class ModelServiceTest extends ServiceTestBase {
         expectedEx.expect(IllegalStateException.class);
         expectedEx.expectMessage("Computed column named DEFAULT.TEST_KYLIN_FACT.DEAL_AMOUNT is already defined in other models: [DataModelDesc [name=ci_left_join_model], DataModelDesc [name=ci_inner_join_model]]. Please change another name, or try to keep consistent definition");
 
-        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_left_join_model", "default");
+        List<DataModelDesc> dataModelDescs = modelService.listAllModels("ci_left_join_model", "default", true);
         Assert.assertTrue(dataModelDescs.size() == 1);
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();