(improvement)(chat) If no partition date is configured, remove the date passed from the frontend. (#1547)

This commit is contained in:
lexluo09
2024-08-09 20:23:14 +08:00
committed by GitHub
parent ecc651e12d
commit e586d887ed
3 changed files with 28 additions and 6 deletions

View File

@@ -12,10 +12,13 @@ public class ModelCluster {
private static final String split = "_"; private static final String split = "_";
private Set<Long> modelIds = new LinkedHashSet<>(); private Set<Long> modelIds = new LinkedHashSet<>();
private String key; private String key;
public static ModelCluster build(Set<Long> modelIds) { private boolean containsPartitionDimensions;
public static ModelCluster build(Set<Long> modelIds, Boolean containsPartitionDimensions) {
ModelCluster modelCluster = new ModelCluster(); ModelCluster modelCluster = new ModelCluster();
modelCluster.setModelIds(modelIds); modelCluster.setModelIds(modelIds);
modelCluster.setKey(StringUtils.join(modelIds, split)); modelCluster.setKey(StringUtils.join(modelIds, split));
modelCluster.setContainsPartitionDimensions(containsPartitionDimensions);
return modelCluster; return modelCluster;
} }
} }

View File

@@ -13,6 +13,7 @@ import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.DataEvent; import com.tencent.supersonic.common.pojo.DataEvent;
import com.tencent.supersonic.common.pojo.DataItem; import com.tencent.supersonic.common.pojo.DataItem;
import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.Filter;
import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.AuthType;
import com.tencent.supersonic.common.pojo.enums.EventType; import com.tencent.supersonic.common.pojo.enums.EventType;
@@ -750,6 +751,9 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
if (modelCluster == null) { if (modelCluster == null) {
throw new IllegalArgumentException("Invalid input parameters, unable to obtain valid metrics"); throw new IllegalArgumentException("Invalid input parameters, unable to obtain valid metrics");
} }
if (!modelCluster.isContainsPartitionDimensions()) {
queryMetricReq.setDateInfo(null);
}
//4. set groups //4. set groups
List<String> dimensionBizNames = dimensionResps.stream() List<String> dimensionBizNames = dimensionResps.stream()
.filter(entry -> modelCluster.getModelIds().contains(entry.getModelId())) .filter(entry -> modelCluster.getModelIds().contains(entry.getModelId()))
@@ -759,8 +763,9 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
.map(SchemaItem::getBizName).collect(Collectors.toList()); .map(SchemaItem::getBizName).collect(Collectors.toList());
QueryStructReq queryStructReq = new QueryStructReq(); QueryStructReq queryStructReq = new QueryStructReq();
if (queryMetricReq.getDateInfo().isGroupByDate()) { DateConf dateInfo = queryMetricReq.getDateInfo();
queryStructReq.getGroups().add(queryMetricReq.getDateInfo().getGroupByTimeDimension()); if (Objects.nonNull(dateInfo) && dateInfo.isGroupByDate()) {
queryStructReq.getGroups().add(dateInfo.getGroupByTimeDimension());
} }
if (!CollectionUtils.isEmpty(dimensionBizNames)) { if (!CollectionUtils.isEmpty(dimensionBizNames)) {
queryStructReq.getGroups().addAll(dimensionBizNames); queryStructReq.getGroups().addAll(dimensionBizNames);
@@ -795,7 +800,7 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
} }
queryStructReq.setDimensionFilters(filters); queryStructReq.setDimensionFilters(filters);
//7. set dateInfo //7. set dateInfo
queryStructReq.setDateInfo(queryMetricReq.getDateInfo()); queryStructReq.setDateInfo(dateInfo);
return queryStructReq; return queryStructReq;
} }

View File

@@ -5,10 +5,13 @@ import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.headless.api.pojo.response.ModelSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.ModelSchemaResp;
import com.tencent.supersonic.headless.server.pojo.ModelCluster; import com.tencent.supersonic.headless.server.pojo.ModelCluster;
import com.tencent.supersonic.headless.server.service.SchemaService; import com.tencent.supersonic.headless.server.service.SchemaService;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -29,12 +32,23 @@ public class ModelClusterBuilder {
modelClusters.add(modelCluster); modelClusters.add(modelCluster);
} }
} }
return modelClusters.stream().map(ModelCluster::build)
return modelClusters.stream()
.map(modelCluster -> getModelCluster(modelIdToModelSchema, modelCluster))
.collect(Collectors.toMap(ModelCluster::getKey, value -> value, (k1, k2) -> k1)); .collect(Collectors.toMap(ModelCluster::getKey, value -> value, (k1, k2) -> k1));
} }
private static ModelCluster getModelCluster(Map<Long, ModelSchemaResp> modelIdToModelSchema, Set<Long> modelIds) {
boolean containsPartitionDimensions = modelIds.stream()
.map(modelIdToModelSchema::get)
.filter(Objects::nonNull)
.anyMatch(modelSchemaResp -> CollectionUtils.isNotEmpty(modelSchemaResp.getTimeDimension()));
return ModelCluster.build(modelIds, containsPartitionDimensions);
}
private static void dfs(ModelSchemaResp model, Map<Long, ModelSchemaResp> modelMap, private static void dfs(ModelSchemaResp model, Map<Long, ModelSchemaResp> modelMap,
Set<Long> visited, Set<Long> modelCluster) { Set<Long> visited, Set<Long> modelCluster) {
visited.add(model.getId()); visited.add(model.getId());
modelCluster.add(model.getId()); modelCluster.add(model.getId());
for (Long neighborId : model.getModelClusterSet()) { for (Long neighborId : model.getModelClusterSet()) {