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