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.tencent.supersonic.headless.api.pojo.Dim;
|
||||
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.Measure;
|
||||
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
@@ -78,17 +78,9 @@ public class ModelResp extends SchemaItem {
|
||||
if (modelDetail == null) {
|
||||
return fieldSet;
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(modelDetail.getIdentifiers())) {
|
||||
fieldSet.addAll(modelDetail.getIdentifiers().stream()
|
||||
.map(Identify::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()));
|
||||
if (!CollectionUtils.isEmpty(modelDetail.getFields())) {
|
||||
fieldSet.addAll(modelDetail.getFields().stream()
|
||||
.map(Field::getFieldName).collect(Collectors.toSet()));
|
||||
}
|
||||
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.DomainService;
|
||||
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.ViewService;
|
||||
import com.tencent.supersonic.headless.server.utils.ModelConverter;
|
||||
@@ -75,8 +74,6 @@ public class ModelServiceImpl implements ModelService {
|
||||
|
||||
private DomainService domainService;
|
||||
|
||||
private ModelRelaService modelRelaService;
|
||||
|
||||
private UserService userService;
|
||||
|
||||
private ViewService viewService;
|
||||
@@ -87,7 +84,6 @@ public class ModelServiceImpl implements ModelService {
|
||||
DatabaseService databaseService,
|
||||
@Lazy DimensionService dimensionService,
|
||||
@Lazy MetricService metricService,
|
||||
ModelRelaService modelRelaService,
|
||||
DomainService domainService,
|
||||
UserService userService,
|
||||
ViewService viewService,
|
||||
@@ -97,7 +93,6 @@ public class ModelServiceImpl implements ModelService {
|
||||
this.dimensionService = dimensionService;
|
||||
this.metricService = metricService;
|
||||
this.domainService = domainService;
|
||||
this.modelRelaService = modelRelaService;
|
||||
this.userService = userService;
|
||||
this.viewService = viewService;
|
||||
this.dateInfoRepository = dateInfoRepository;
|
||||
@@ -200,6 +195,9 @@ public class ModelServiceImpl implements ModelService {
|
||||
|
||||
@Override
|
||||
public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) {
|
||||
if (CollectionUtils.isEmpty(fieldRemovedReq.getFields())) {
|
||||
return UnAvailableItemResp.builder().build();
|
||||
}
|
||||
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId()));
|
||||
metaFilter.setFieldsDepend(fieldRemovedReq.getFields());
|
||||
List<MetricResp> metricResps = metricService.getMetrics(metaFilter);
|
||||
|
||||
@@ -50,6 +50,14 @@ public class MetricDrillDownCheckerTest {
|
||||
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() {
|
||||
SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp();
|
||||
semanticSchemaResp.setMetrics(mockMetrics());
|
||||
|
||||
@@ -74,12 +74,11 @@ class ModelServiceImplTest {
|
||||
DatabaseService databaseService = Mockito.mock(DatabaseService.class);
|
||||
DomainService domainService = Mockito.mock(DomainService.class);
|
||||
UserService userService = Mockito.mock(UserService.class);
|
||||
ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class);
|
||||
DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class);
|
||||
ViewService viewService = Mockito.mock(ViewService.class);
|
||||
return new ModelServiceImpl(modelRepository, databaseService,
|
||||
dimensionService, metricService, modelRelaService, domainService,
|
||||
userService, viewService, dateInfoRepository);
|
||||
dimensionService, metricService, domainService, userService,
|
||||
viewService, dateInfoRepository);
|
||||
}
|
||||
|
||||
private ModelReq mockModelReq() {
|
||||
|
||||
Reference in New Issue
Block a user