mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:51:00 +00:00
(improvement)(Headless)Querying dimension values and dataSet interface with tag support. (#832)
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
package com.tencent.supersonic.headless.api.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DataSetSchema {
|
||||
@@ -16,7 +14,6 @@ public class DataSetSchema {
|
||||
private Set<SchemaElement> dimensionValues = new HashSet<>();
|
||||
private SchemaElement entity = new SchemaElement();
|
||||
private QueryConfig queryConfig;
|
||||
private QueryType queryType;
|
||||
|
||||
public SchemaElement getElement(SchemaElementType elementType, long elementID) {
|
||||
Optional<SchemaElement> element = Optional.empty();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.tencent.supersonic.headless.api.pojo.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.DataSetDetail;
|
||||
import com.tencent.supersonic.headless.api.pojo.QueryConfig;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
||||
@@ -22,8 +21,6 @@ public class DataSetReq extends SchemaItem {
|
||||
|
||||
private List<String> adminOrgs;
|
||||
|
||||
private QueryType queryType;
|
||||
|
||||
public String getAdmin() {
|
||||
if (admins == null) {
|
||||
return null;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.tencent.supersonic.headless.api.pojo.response;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.headless.api.pojo.DataSetDetail;
|
||||
import com.tencent.supersonic.headless.api.pojo.DataSetModelConfig;
|
||||
import com.tencent.supersonic.headless.api.pojo.QueryConfig;
|
||||
@@ -30,14 +29,16 @@ public class DataSetResp extends SchemaItem {
|
||||
|
||||
private QueryConfig queryConfig;
|
||||
|
||||
private QueryType queryType;
|
||||
private List<TagItem> allMetrics = new ArrayList<>();
|
||||
|
||||
public List<Long> getAllMetrics() {
|
||||
private List<TagItem> allDimensions = new ArrayList<>();
|
||||
|
||||
public List<Long> metricIds() {
|
||||
return getDataSetModelConfigs().stream().map(DataSetModelConfig::getMetrics)
|
||||
.flatMap(Collection::stream).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Long> getAllDimensions() {
|
||||
public List<Long> dimensionIds() {
|
||||
return getDataSetModelConfigs().stream().map(DataSetModelConfig::getDimensions)
|
||||
.flatMap(Collection::stream).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -15,8 +15,6 @@ public class DataSetSchemaResp extends DataSetResp {
|
||||
|
||||
private List<MetricSchemaResp> metrics = Lists.newArrayList();
|
||||
private List<DimSchemaResp> dimensions = Lists.newArrayList();
|
||||
|
||||
private List<TagResp> tags = Lists.newArrayList();
|
||||
private List<ModelResp> modelResps = Lists.newArrayList();
|
||||
|
||||
public DimSchemaResp getPrimaryKey() {
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.tencent.supersonic.headless.api.pojo.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TagItem {
|
||||
|
||||
private Long itemId;
|
||||
|
||||
private int isTag;
|
||||
|
||||
}
|
||||
@@ -2,25 +2,22 @@ package com.tencent.supersonic.headless.core.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.common.util.ContextUtils;
|
||||
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaMapInfo;
|
||||
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryFilters;
|
||||
import com.tencent.supersonic.headless.core.config.OptimizationConfig;
|
||||
import com.tencent.supersonic.headless.core.chat.query.SemanticQuery;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import com.tencent.supersonic.headless.core.config.OptimizationConfig;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@@ -51,10 +48,4 @@ public class QueryContext {
|
||||
.collect(Collectors.toList());
|
||||
return candidateQueries;
|
||||
}
|
||||
|
||||
public QueryType getQueryType(Long dataSetId) {
|
||||
SemanticSchema semanticSchema = this.semanticSchema;
|
||||
DataSetSchema dataSetSchema = semanticSchema.getDataSetSchemaMap().get(dataSetId);
|
||||
return dataSetSchema.getQueryType();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,4 @@ public class DataSetDO {
|
||||
private String admin;
|
||||
|
||||
private String adminOrg;
|
||||
|
||||
private String queryType;
|
||||
|
||||
}
|
||||
|
||||
@@ -29,14 +29,14 @@ public class DataSetController {
|
||||
|
||||
@PostMapping
|
||||
public DataSetResp save(@RequestBody DataSetReq dataSetReq,
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
User user = UserHolder.findUser(request, response);
|
||||
return dataSetService.save(dataSetReq, user);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public DataSetResp update(@RequestBody DataSetReq dataSetReq,
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
User user = UserHolder.findUser(request, response);
|
||||
return dataSetService.update(dataSetReq, user);
|
||||
}
|
||||
@@ -47,15 +47,17 @@ public class DataSetController {
|
||||
}
|
||||
|
||||
@GetMapping("/getDataSetList")
|
||||
public List<DataSetResp> getDataSetList(@RequestParam("domainId") Long domainId) {
|
||||
public List<DataSetResp> getDataSetList(@RequestParam("domainId") Long domainId,
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setDomainId(domainId);
|
||||
return dataSetService.getDataSetList(metaFilter);
|
||||
User user = UserHolder.findUser(request, response);
|
||||
return dataSetService.getDataSetList(metaFilter, user);
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public Boolean delete(@PathVariable("id") Long id,
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
User user = UserHolder.findUser(request, response);
|
||||
dataSetService.delete(id, user);
|
||||
return true;
|
||||
|
||||
@@ -18,11 +18,11 @@ public interface DataSetService {
|
||||
|
||||
DataSetResp getDataSet(Long id);
|
||||
|
||||
List<DataSetResp> getDataSetList(MetaFilter metaFilter);
|
||||
List<DataSetResp> getDataSetList(MetaFilter metaFilter, User user);
|
||||
|
||||
void delete(Long id, User user);
|
||||
|
||||
Map<Long, List<Long>> getModelIdToDataSetIds(List<Long> dataSetIds);
|
||||
Map<Long, List<Long>> getModelIdToDataSetIds(List<Long> dataSetIds, User user);
|
||||
|
||||
Map<Long, List<Long>> getModelIdToDataSetIds();
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
|
||||
import com.tencent.supersonic.common.util.BeanMapper;
|
||||
import com.tencent.supersonic.headless.api.pojo.DataSetDetail;
|
||||
import com.tencent.supersonic.headless.api.pojo.QueryConfig;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.DataSetReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryDataSetReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
|
||||
@@ -23,13 +24,17 @@ import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
|
||||
import com.tencent.supersonic.headless.server.persistence.dataobject.DataSetDO;
|
||||
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
|
||||
import com.tencent.supersonic.headless.server.persistence.mapper.DataSetDOMapper;
|
||||
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
|
||||
import com.tencent.supersonic.headless.server.pojo.TagFilter;
|
||||
import com.tencent.supersonic.headless.server.service.DataSetService;
|
||||
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.TagMetaService;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
@@ -66,12 +71,16 @@ public class DataSetServiceImpl
|
||||
@Autowired
|
||||
private MetricService metricService;
|
||||
|
||||
@Lazy
|
||||
@Autowired
|
||||
private TagMetaService tagMetaService;
|
||||
|
||||
@Override
|
||||
public DataSetResp save(DataSetReq dataSetReq, User user) {
|
||||
dataSetReq.createdBy(user.getName());
|
||||
DataSetDO dataSetDO = convert(dataSetReq);
|
||||
dataSetDO.setStatus(StatusEnum.ONLINE.getCode());
|
||||
DataSetResp dataSetResp = convert(dataSetDO);
|
||||
DataSetResp dataSetResp = convert(dataSetDO, user);
|
||||
conflictCheck(dataSetResp);
|
||||
save(dataSetDO);
|
||||
return dataSetResp;
|
||||
@@ -81,7 +90,7 @@ public class DataSetServiceImpl
|
||||
public DataSetResp update(DataSetReq dataSetReq, User user) {
|
||||
dataSetReq.updatedBy(user.getName());
|
||||
DataSetDO dataSetDO = convert(dataSetReq);
|
||||
DataSetResp dataSetResp = convert(dataSetDO);
|
||||
DataSetResp dataSetResp = convert(dataSetDO, user);
|
||||
conflictCheck(dataSetResp);
|
||||
updateById(dataSetDO);
|
||||
return dataSetResp;
|
||||
@@ -90,11 +99,11 @@ public class DataSetServiceImpl
|
||||
@Override
|
||||
public DataSetResp getDataSet(Long id) {
|
||||
DataSetDO dataSetDO = getById(id);
|
||||
return convert(dataSetDO);
|
||||
return convert(dataSetDO, User.getFakeUser());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataSetResp> getDataSetList(MetaFilter metaFilter) {
|
||||
public List<DataSetResp> getDataSetList(MetaFilter metaFilter, User user) {
|
||||
QueryWrapper<DataSetDO> wrapper = new QueryWrapper<>();
|
||||
if (metaFilter.getDomainId() != null) {
|
||||
wrapper.lambda().eq(DataSetDO::getDomainId, metaFilter.getDomainId());
|
||||
@@ -106,7 +115,7 @@ public class DataSetServiceImpl
|
||||
wrapper.lambda().eq(DataSetDO::getStatus, metaFilter.getStatus());
|
||||
}
|
||||
wrapper.lambda().ne(DataSetDO::getStatus, StatusEnum.DELETED.getCode());
|
||||
return list(wrapper).stream().map(this::convert).collect(Collectors.toList());
|
||||
return list(wrapper).stream().map(entry -> convert(entry, user)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -120,13 +129,13 @@ public class DataSetServiceImpl
|
||||
|
||||
@Override
|
||||
public List<DataSetResp> getDataSets(User user) {
|
||||
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter());
|
||||
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter(), user);
|
||||
return getDataSetFilterByAuth(dataSetResps, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataSetResp> getDataSetsInheritAuth(User user, Long domainId) {
|
||||
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter());
|
||||
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter(), user);
|
||||
List<DataSetResp> inheritAuthFormDomain = getDataSetFilterByDomainAuth(dataSetResps, user);
|
||||
Set<DataSetResp> dataSetRespSet = new HashSet<>(inheritAuthFormDomain);
|
||||
List<DataSetResp> dataSetFilterByAuth = getDataSetFilterByAuth(dataSetResps, user);
|
||||
@@ -155,7 +164,22 @@ public class DataSetServiceImpl
|
||||
domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private DataSetResp convert(DataSetDO dataSetDO) {
|
||||
private List<TagItem> getTagItems(User user, List<Long> dimensionIds, TagDefineType tagDefineType) {
|
||||
TagFilter tagFilter = new TagFilter();
|
||||
tagFilter.setTagDefineType(tagDefineType);
|
||||
tagFilter.setItemIds(dimensionIds);
|
||||
Set<Long> dimensionItemSet = tagMetaService.getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
|
||||
.collect(Collectors.toSet());
|
||||
return dimensionIds.stream().map(entry -> {
|
||||
TagItem tagItem = new TagItem();
|
||||
tagItem.setIsTag(Boolean.compare(dimensionItemSet.contains(entry), false));
|
||||
tagItem.setItemId(entry);
|
||||
return tagItem;
|
||||
}
|
||||
).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private DataSetResp convert(DataSetDO dataSetDO, User user) {
|
||||
DataSetResp dataSetResp = new DataSetResp();
|
||||
BeanMapper.mapper(dataSetDO, dataSetResp);
|
||||
dataSetResp.setDataSetDetail(JSONObject.parseObject(dataSetDO.getDataSetDetail(), DataSetDetail.class));
|
||||
@@ -167,6 +191,11 @@ public class DataSetServiceImpl
|
||||
dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg())
|
||||
? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(",")));
|
||||
dataSetResp.setTypeEnum(TypeEnums.DATASET);
|
||||
List<TagItem> dimensionItems = getTagItems(user, dataSetResp.dimensionIds(), TagDefineType.DIMENSION);
|
||||
dataSetResp.setAllDimensions(dimensionItems);
|
||||
|
||||
List<TagItem> metricItems = getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC);
|
||||
dataSetResp.setAllMetrics(metricItems);
|
||||
return dataSetResp;
|
||||
}
|
||||
|
||||
@@ -197,13 +226,13 @@ public class DataSetServiceImpl
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, List<Long>> getModelIdToDataSetIds(List<Long> dataSetIds) {
|
||||
public Map<Long, List<Long>> getModelIdToDataSetIds(List<Long> dataSetIds, User user) {
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setStatus(StatusEnum.ONLINE.getCode());
|
||||
metaFilter.setIds(dataSetIds);
|
||||
List<DataSetResp> dataSetList = dataSetSchemaCache.getIfPresent(metaFilter);
|
||||
if (CollectionUtils.isEmpty(dataSetList)) {
|
||||
dataSetList = getDataSetList(metaFilter);
|
||||
dataSetList = getDataSetList(metaFilter, user);
|
||||
dataSetSchemaCache.put(metaFilter, dataSetList);
|
||||
}
|
||||
return dataSetList.stream()
|
||||
@@ -216,12 +245,12 @@ public class DataSetServiceImpl
|
||||
|
||||
@Override
|
||||
public Map<Long, List<Long>> getModelIdToDataSetIds() {
|
||||
return getModelIdToDataSetIds(Lists.newArrayList());
|
||||
return getModelIdToDataSetIds(Lists.newArrayList(), User.getFakeUser());
|
||||
}
|
||||
|
||||
private void conflictCheck(DataSetResp dataSetResp) {
|
||||
List<Long> allDimensionIds = dataSetResp.getAllDimensions();
|
||||
List<Long> allMetricIds = dataSetResp.getAllMetrics();
|
||||
List<Long> allDimensionIds = dataSetResp.dimensionIds();
|
||||
List<Long> allMetricIds = dataSetResp.metricIds();
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
if (!CollectionUtils.isEmpty(allDimensionIds)) {
|
||||
metaFilter.setIds(allDimensionIds);
|
||||
|
||||
@@ -161,7 +161,7 @@ public class SchemaServiceImpl implements SchemaService {
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setStatus(StatusEnum.ONLINE.getCode());
|
||||
metaFilter.setIds(filter.getDataSetIds());
|
||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(metaFilter);
|
||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(metaFilter, User.getFakeUser());
|
||||
Map<Long, DataSetResp> dataSetRespMap = getDataSetMap(dataSetResps);
|
||||
|
||||
List<Long> modelIds = dataSetRespMap.values().stream().map(DataSetResp::getAllModels)
|
||||
@@ -337,7 +337,6 @@ public class SchemaServiceImpl implements SchemaService {
|
||||
semanticSchemaResp.setModelRelas(modelRelas);
|
||||
semanticSchemaResp.setModelIds(modelIds);
|
||||
semanticSchemaResp.setSchemaType(SchemaType.VIEW);
|
||||
semanticSchemaResp.setQueryType(dataSetSchemaResp.getQueryType());
|
||||
} else if (!CollectionUtils.isEmpty(schemaFilterReq.getModelIds())) {
|
||||
List<ModelSchemaResp> modelSchemaResps = fetchModelSchemaResps(schemaFilterReq.getModelIds());
|
||||
semanticSchemaResp.setMetrics(modelSchemaResps.stream().map(ModelSchemaResp::getMetrics)
|
||||
@@ -402,7 +401,7 @@ public class SchemaServiceImpl implements SchemaService {
|
||||
}
|
||||
parentItem.getChildren().add(itemResp);
|
||||
}
|
||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(new MetaFilter());
|
||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(new MetaFilter(), User.getFakeUser());
|
||||
for (DataSetResp dataSetResp : dataSetResps) {
|
||||
ItemResp itemResp = itemRespMap.get(dataSetResp.getDomainId());
|
||||
if (itemResp != null) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.tencent.supersonic.headless.server.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.common.pojo.enums.DictWordType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
|
||||
@@ -70,7 +71,7 @@ public class SearchServiceImpl implements SearchService {
|
||||
List<SchemaElement> metricsDb = semanticSchemaDb.getMetrics();
|
||||
final Map<Long, String> dataSetIdToName = semanticSchemaDb.getDataSetIdToName();
|
||||
Map<Long, List<Long>> modelIdToDataSetIds =
|
||||
dataSetService.getModelIdToDataSetIds(new ArrayList<>(dataSetIdToName.keySet()));
|
||||
dataSetService.getModelIdToDataSetIds(new ArrayList<>(dataSetIdToName.keySet()), User.getFakeUser());
|
||||
// 2.detect by segment
|
||||
List<S2Term> originals = knowledgeService.getTerms(queryText, modelIdToDataSetIds);
|
||||
log.info("hanlp parse result: {}", originals);
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.tencent.supersonic.headless.api.pojo.ValueDistribution;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.ItemValueReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryTagReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ItemValueResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
|
||||
@@ -50,7 +50,7 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
private final ModelService modelService;
|
||||
|
||||
public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService,
|
||||
ModelService modelService) {
|
||||
ModelService modelService) {
|
||||
this.tagMetaService = tagMetaService;
|
||||
this.queryService = queryService;
|
||||
this.modelService = modelService;
|
||||
@@ -60,7 +60,7 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
public ItemValueResp queryTagValue(ItemValueReq itemValueReq, User user) throws Exception {
|
||||
ItemValueResp itemValueResp = new ItemValueResp();
|
||||
itemValueResp.setItemId(itemValueReq.getItemId());
|
||||
itemValueResp.setType(SchemaElementType.DIMENSION);
|
||||
itemValueResp.setType(SchemaElementType.TAG);
|
||||
TagResp tag = tagMetaService.getTag(itemValueReq.getItemId(), user);
|
||||
checkTag(tag);
|
||||
itemValueResp.setName(tag.getName());
|
||||
@@ -69,8 +69,8 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
// tag total count
|
||||
Long totalCount = queryTagTotalCount(tag, itemValueReq, user);
|
||||
// tag value
|
||||
QueryTagReq queryTagReq = generateTagReq(tag, itemValueReq);
|
||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryTagReq, user);
|
||||
QueryStructReq queryStructReq = generateReq(tag, itemValueReq);
|
||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, user);
|
||||
fillTagValueInfo(itemValueResp, semanticQueryResp, totalCount);
|
||||
return itemValueResp;
|
||||
}
|
||||
@@ -102,28 +102,7 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
|
||||
private String queryTagDate(Dim dim) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dim.getDateFormat());
|
||||
String endDate = LocalDate.now().plusDays(-dayBefore).format(formatter);
|
||||
return endDate;
|
||||
}
|
||||
|
||||
private String queryTagDateFromDbByStruct(Dim dim, TagResp tag, User user) throws Exception {
|
||||
QueryTagReq queryTagReq = new QueryTagReq();
|
||||
queryTagReq.addModelId(tag.getModelId());
|
||||
queryTagReq.setLimit(1L);
|
||||
List<Aggregator> aggregators = new ArrayList<>();
|
||||
aggregators.add(new Aggregator(dim.getBizName(), AggOperatorEnum.MAX, maxDateAlias));
|
||||
queryTagReq.setAggregators(aggregators);
|
||||
queryTagReq.setDateInfo(null);
|
||||
log.info("queryTagDateFromDb, queryTagReq:{}", queryTagReq.toCustomizedString());
|
||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryTagReq, user);
|
||||
if (!CollectionUtils.isEmpty(semanticQueryResp.getResultList())) {
|
||||
Object date = semanticQueryResp.getResultList().get(0).get(maxDateAlias);
|
||||
if (Objects.nonNull(date)) {
|
||||
return date.toString();
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("queryTagTotalCount error");
|
||||
|
||||
return LocalDate.now().plusDays(-dayBefore).format(formatter);
|
||||
}
|
||||
|
||||
private String queryTagDateFromDbBySql(Dim dim, TagResp tag, User user) throws Exception {
|
||||
@@ -156,16 +135,16 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
|
||||
private Long queryTagTotalCount(TagResp tag, ItemValueReq itemValueReq, User user) throws Exception {
|
||||
|
||||
QueryTagReq queryTagReq = new QueryTagReq();
|
||||
queryTagReq.addModelId(tag.getModelId());
|
||||
queryTagReq.setLimit(1L);
|
||||
QueryStructReq queryStructReq = new QueryStructReq();
|
||||
queryStructReq.addModelId(tag.getModelId());
|
||||
queryStructReq.setLimit(1L);
|
||||
List<Aggregator> aggregators = new ArrayList<>();
|
||||
aggregators.add(new Aggregator(tag.getBizName(), AggOperatorEnum.COUNT, tagValueAlias));
|
||||
queryTagReq.setAggregators(aggregators);
|
||||
queryStructReq.setAggregators(aggregators);
|
||||
DateConf dateConf = generateDateConf(itemValueReq);
|
||||
queryTagReq.setDateInfo(dateConf);
|
||||
queryStructReq.setDateInfo(dateConf);
|
||||
|
||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryTagReq, user);
|
||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, user);
|
||||
if (!CollectionUtils.isEmpty(semanticQueryResp.getResultList())) {
|
||||
Object total = semanticQueryResp.getResultList().get(0).get(tagValueAlias);
|
||||
if (Objects.nonNull(total)) {
|
||||
@@ -194,24 +173,24 @@ public class TagQueryServiceImpl implements TagQueryService {
|
||||
itemValueResp.setValueDistributionList(valueDistributionList);
|
||||
}
|
||||
|
||||
private QueryTagReq generateTagReq(TagResp tag, ItemValueReq itemValueReq) {
|
||||
QueryTagReq queryTagReq = new QueryTagReq();
|
||||
queryTagReq.addModelId(tag.getModelId());
|
||||
queryTagReq.setGroups(new ArrayList<>(Arrays.asList(tag.getBizName())));
|
||||
queryTagReq.setLimit(itemValueReq.getLimit());
|
||||
private QueryStructReq generateReq(TagResp tag, ItemValueReq itemValueReq) {
|
||||
QueryStructReq queryStructReq = new QueryStructReq();
|
||||
queryStructReq.addModelId(tag.getModelId());
|
||||
queryStructReq.setGroups(new ArrayList<>(Arrays.asList(tag.getBizName())));
|
||||
queryStructReq.setLimit(itemValueReq.getLimit());
|
||||
|
||||
List<Aggregator> aggregators = new ArrayList<>();
|
||||
aggregators.add(new Aggregator(tag.getBizName(), AggOperatorEnum.COUNT, tagValueAlias));
|
||||
queryTagReq.setAggregators(aggregators);
|
||||
queryStructReq.setAggregators(aggregators);
|
||||
|
||||
List<Order> orders = new ArrayList<>();
|
||||
orders.add(new Order(String.format("count(%s)", tag.getBizName()), DESC_UPPER));
|
||||
queryTagReq.setOrders(orders);
|
||||
queryStructReq.setOrders(orders);
|
||||
|
||||
DateConf dateConf = generateDateConf(itemValueReq);
|
||||
queryTagReq.setDateInfo(dateConf);
|
||||
queryStructReq.setDateInfo(dateConf);
|
||||
|
||||
return queryTagReq;
|
||||
return queryStructReq;
|
||||
}
|
||||
|
||||
private DateConf generateDateConf(ItemValueReq itemValueReq) {
|
||||
|
||||
@@ -28,7 +28,6 @@ public class DataSetSchemaBuilder {
|
||||
public static DataSetSchema build(DataSetSchemaResp resp) {
|
||||
DataSetSchema dataSetSchema = new DataSetSchema();
|
||||
dataSetSchema.setQueryConfig(resp.getQueryConfig());
|
||||
dataSetSchema.setQueryType(resp.getQueryType());
|
||||
SchemaElement dataSet = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.id(resp.getId())
|
||||
|
||||
@@ -86,7 +86,7 @@ public class DimensionConverter {
|
||||
|
||||
public static List<DimensionResp> filterByDataSet(List<DimensionResp> dimensionResps, DataSetResp dataSetResp) {
|
||||
return dimensionResps.stream().filter(dimensionResp ->
|
||||
dataSetResp.getAllDimensions().contains(dimensionResp.getId())
|
||||
dataSetResp.dimensionIds().contains(dimensionResp.getId())
|
||||
|| dataSetResp.getAllIncludeAllModels().contains(dimensionResp.getModelId()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ public class MetricConverter {
|
||||
|
||||
public static List<MetricResp> filterByDataSet(List<MetricResp> metricResps, DataSetResp dataSetResp) {
|
||||
return metricResps.stream().filter(metricResp ->
|
||||
dataSetResp.getAllMetrics().contains(metricResp.getId())
|
||||
dataSetResp.metricIds().contains(metricResp.getId())
|
||||
|| dataSetResp.getAllIncludeAllModels().contains(metricResp.getModelId()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -52,13 +52,13 @@
|
||||
|
||||
<select id="queryTagRespList" resultMap="TagResp">
|
||||
select * from (
|
||||
select s2_tag.id as id, s2_dimension.model_id as model_id, "DIMENSION" as tag_define_type, s2_dimension.id as item_id,
|
||||
select s2_tag.id as id, s2_dimension.model_id as model_id, 'DIMENSION' as tag_define_type, s2_dimension.id as item_id,
|
||||
s2_dimension.name as name, s2_dimension.biz_name as biz_name, s2_dimension.description as description, s2_tag.updated_at as updated_at
|
||||
from s2_tag join s2_dimension
|
||||
on s2_tag.item_id = s2_dimension.id
|
||||
where s2_dimension.status=1
|
||||
union
|
||||
select s2_tag.id as id, s2_metric.model_id as model_id, "METRIC" as tag_define_type, s2_metric.id as item_id,
|
||||
select s2_tag.id as id, s2_metric.model_id as model_id, 'METRIC' as tag_define_type, s2_metric.id as item_id,
|
||||
s2_metric.name as name, s2_metric.biz_name as biz_name, s2_metric.description as description, s2_tag.updated_at as updated_at
|
||||
from s2_tag join s2_metric
|
||||
on s2_tag.item_id = s2_metric.id
|
||||
|
||||
@@ -258,6 +258,7 @@ CREATE TABLE IF NOT EXISTS s2_tag(
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`item_id` INT NOT NULL ,
|
||||
`type` varchar(255) NOT NULL ,
|
||||
`tag_define_type` varchar(20) NOT NULL , --DIMENSION,METRIC
|
||||
`created_at` TIMESTAMP NOT NULL ,
|
||||
`created_by` varchar(100) NOT NULL ,
|
||||
`updated_at` TIMESTAMP DEFAULT NULL ,
|
||||
|
||||
@@ -579,6 +579,7 @@ CREATE TABLE IF NOT EXISTS `s2_data_set` (
|
||||
CREATE TABLE IF NOT EXISTS `s2_tag` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`item_id` INT NOT NULL ,
|
||||
`tag_define_type` varchar(20) NOT NULL , --DIMENSION,METRIC
|
||||
`type` varchar(50) NOT NULL , -- ATOMIC, DERIVED
|
||||
`created_at` TIMESTAMP NOT NULL ,
|
||||
`created_by` varchar(100) NOT NULL ,
|
||||
|
||||
@@ -581,6 +581,7 @@ CREATE TABLE IF NOT EXISTS `s2_tag` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`item_id` INT NOT NULL ,
|
||||
`type` varchar(50) NOT NULL , -- ATOMIC, DERIVED
|
||||
`tag_define_type` varchar(20) NOT NULL , --DIMENSION,METRIC
|
||||
`created_at` TIMESTAMP NOT NULL ,
|
||||
`created_by` varchar(100) NOT NULL ,
|
||||
`updated_at` TIMESTAMP DEFAULT NULL ,
|
||||
|
||||
Reference in New Issue
Block a user