mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(improvement)(headless) When the field list provided by the front end is empty, the availability of the corresponding metric dimension is not verified. (#729)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -3,8 +3,8 @@ package com.tencent.supersonic.headless.api.pojo.response;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Dim;
|
import com.tencent.supersonic.headless.api.pojo.Dim;
|
||||||
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
|
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.Field;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Identify;
|
import com.tencent.supersonic.headless.api.pojo.Identify;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Measure;
|
|
||||||
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
||||||
import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -78,17 +78,9 @@ public class ModelResp extends SchemaItem {
|
|||||||
if (modelDetail == null) {
|
if (modelDetail == null) {
|
||||||
return fieldSet;
|
return fieldSet;
|
||||||
}
|
}
|
||||||
if (!CollectionUtils.isEmpty(modelDetail.getIdentifiers())) {
|
if (!CollectionUtils.isEmpty(modelDetail.getFields())) {
|
||||||
fieldSet.addAll(modelDetail.getIdentifiers().stream()
|
fieldSet.addAll(modelDetail.getFields().stream()
|
||||||
.map(Identify::getFieldName).collect(Collectors.toSet()));
|
.map(Field::getFieldName).collect(Collectors.toSet()));
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(modelDetail.getDimensions())) {
|
|
||||||
fieldSet.addAll(modelDetail.getDimensions().stream()
|
|
||||||
.map(Dim::getFieldName).collect(Collectors.toSet()));
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(modelDetail.getMeasures())) {
|
|
||||||
fieldSet.addAll(modelDetail.getMeasures().stream()
|
|
||||||
.map(Measure::getFieldName).collect(Collectors.toSet()));
|
|
||||||
}
|
}
|
||||||
return fieldSet;
|
return fieldSet;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import com.tencent.supersonic.headless.server.service.DatabaseService;
|
|||||||
import com.tencent.supersonic.headless.server.service.DimensionService;
|
import com.tencent.supersonic.headless.server.service.DimensionService;
|
||||||
import com.tencent.supersonic.headless.server.service.DomainService;
|
import com.tencent.supersonic.headless.server.service.DomainService;
|
||||||
import com.tencent.supersonic.headless.server.service.MetricService;
|
import com.tencent.supersonic.headless.server.service.MetricService;
|
||||||
import com.tencent.supersonic.headless.server.service.ModelRelaService;
|
|
||||||
import com.tencent.supersonic.headless.server.service.ModelService;
|
import com.tencent.supersonic.headless.server.service.ModelService;
|
||||||
import com.tencent.supersonic.headless.server.service.ViewService;
|
import com.tencent.supersonic.headless.server.service.ViewService;
|
||||||
import com.tencent.supersonic.headless.server.utils.ModelConverter;
|
import com.tencent.supersonic.headless.server.utils.ModelConverter;
|
||||||
@@ -75,8 +74,6 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
|
|
||||||
private DomainService domainService;
|
private DomainService domainService;
|
||||||
|
|
||||||
private ModelRelaService modelRelaService;
|
|
||||||
|
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
private ViewService viewService;
|
private ViewService viewService;
|
||||||
@@ -87,7 +84,6 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
DatabaseService databaseService,
|
DatabaseService databaseService,
|
||||||
@Lazy DimensionService dimensionService,
|
@Lazy DimensionService dimensionService,
|
||||||
@Lazy MetricService metricService,
|
@Lazy MetricService metricService,
|
||||||
ModelRelaService modelRelaService,
|
|
||||||
DomainService domainService,
|
DomainService domainService,
|
||||||
UserService userService,
|
UserService userService,
|
||||||
ViewService viewService,
|
ViewService viewService,
|
||||||
@@ -97,7 +93,6 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
this.dimensionService = dimensionService;
|
this.dimensionService = dimensionService;
|
||||||
this.metricService = metricService;
|
this.metricService = metricService;
|
||||||
this.domainService = domainService;
|
this.domainService = domainService;
|
||||||
this.modelRelaService = modelRelaService;
|
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
this.viewService = viewService;
|
this.viewService = viewService;
|
||||||
this.dateInfoRepository = dateInfoRepository;
|
this.dateInfoRepository = dateInfoRepository;
|
||||||
@@ -200,6 +195,9 @@ public class ModelServiceImpl implements ModelService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) {
|
public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) {
|
||||||
|
if (CollectionUtils.isEmpty(fieldRemovedReq.getFields())) {
|
||||||
|
return UnAvailableItemResp.builder().build();
|
||||||
|
}
|
||||||
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId()));
|
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId()));
|
||||||
metaFilter.setFieldsDepend(fieldRemovedReq.getFields());
|
metaFilter.setFieldsDepend(fieldRemovedReq.getFields());
|
||||||
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
|
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
|
||||||
|
|||||||
@@ -50,6 +50,14 @@ public class MetricDrillDownCheckerTest {
|
|||||||
metricDrillDownChecker.checkQuery(semanticSchemaResp, sql);
|
metricDrillDownChecker.checkQuery(semanticSchemaResp, sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_groupBy_no_necessary_dimension_setting_no_metric() {
|
||||||
|
MetricDrillDownChecker metricDrillDownChecker = new MetricDrillDownChecker();
|
||||||
|
String sql = "select user_name, page, count(*) from t_1 group by user_name,page";
|
||||||
|
SemanticSchemaResp semanticSchemaResp = mockModelSchemaNoDimensionSetting();
|
||||||
|
metricDrillDownChecker.checkQuery(semanticSchemaResp, sql);
|
||||||
|
}
|
||||||
|
|
||||||
private SemanticSchemaResp mockModelSchemaResp() {
|
private SemanticSchemaResp mockModelSchemaResp() {
|
||||||
SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp();
|
SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp();
|
||||||
semanticSchemaResp.setMetrics(mockMetrics());
|
semanticSchemaResp.setMetrics(mockMetrics());
|
||||||
|
|||||||
@@ -74,12 +74,11 @@ class ModelServiceImplTest {
|
|||||||
DatabaseService databaseService = Mockito.mock(DatabaseService.class);
|
DatabaseService databaseService = Mockito.mock(DatabaseService.class);
|
||||||
DomainService domainService = Mockito.mock(DomainService.class);
|
DomainService domainService = Mockito.mock(DomainService.class);
|
||||||
UserService userService = Mockito.mock(UserService.class);
|
UserService userService = Mockito.mock(UserService.class);
|
||||||
ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class);
|
|
||||||
DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class);
|
DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class);
|
||||||
ViewService viewService = Mockito.mock(ViewService.class);
|
ViewService viewService = Mockito.mock(ViewService.class);
|
||||||
return new ModelServiceImpl(modelRepository, databaseService,
|
return new ModelServiceImpl(modelRepository, databaseService,
|
||||||
dimensionService, metricService, modelRelaService, domainService,
|
dimensionService, metricService, domainService, userService,
|
||||||
userService, viewService, dateInfoRepository);
|
viewService, dateInfoRepository);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ModelReq mockModelReq() {
|
private ModelReq mockModelReq() {
|
||||||
|
|||||||
Reference in New Issue
Block a user