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