mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 03:58:14 +00:00
[improvement](project) Adding tag abstraction to the dictionary and optimizing related code. (#785)
This commit is contained in:
@@ -43,6 +43,9 @@ public class SemanticSchema implements Serializable {
|
||||
case VALUE:
|
||||
element = getElementsById(elementID, getDimensionValues());
|
||||
break;
|
||||
case TAG:
|
||||
element = getElementsById(elementID, getTags());
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ import com.tencent.supersonic.headless.api.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.DimSchemaResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.DataSetSchemaResp;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
|
||||
import java.util.Objects;
|
||||
import org.apache.logging.log4j.util.Strings;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -37,6 +39,120 @@ public class DataSetSchemaBuilder {
|
||||
.build();
|
||||
dataSetSchema.setDataSet(dataSet);
|
||||
|
||||
Set<SchemaElement> metrics = getMetrics(resp);
|
||||
dataSetSchema.getMetrics().addAll(metrics);
|
||||
|
||||
Set<SchemaElement> dimensions = getDimensions(resp);
|
||||
dataSetSchema.getDimensions().addAll(dimensions);
|
||||
|
||||
Set<SchemaElement> dimensionValues = getDimensionValues(resp);
|
||||
dataSetSchema.getDimensionValues().addAll(dimensionValues);
|
||||
|
||||
Set<SchemaElement> tags = getTags(resp);
|
||||
dataSetSchema.getTags().addAll(tags);
|
||||
|
||||
SchemaElement entity = getEntity(resp);
|
||||
if (Objects.nonNull(entity)) {
|
||||
dataSetSchema.setEntity(entity);
|
||||
}
|
||||
return dataSetSchema;
|
||||
}
|
||||
|
||||
private static SchemaElement getEntity(DataSetSchemaResp resp) {
|
||||
DimSchemaResp dim = resp.getPrimaryKey();
|
||||
if (Objects.isNull(dim)) {
|
||||
return null;
|
||||
}
|
||||
return SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.ENTITY)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(dim.getEntityAlias())
|
||||
.build();
|
||||
}
|
||||
|
||||
private static Set<SchemaElement> getTags(DataSetSchemaResp resp) {
|
||||
Set<SchemaElement> tags = new HashSet<>();
|
||||
List<TagResp> tagResps = resp.getTags();
|
||||
|
||||
for (TagResp tagResp : tagResps) {
|
||||
SchemaElement element = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(tagResp.getModelId())
|
||||
.id(tagResp.getId())
|
||||
.name(tagResp.getName())
|
||||
.bizName(tagResp.getBizName())
|
||||
.type(SchemaElementType.TAG)
|
||||
.build();
|
||||
tags.add(element);
|
||||
}
|
||||
return tags;
|
||||
}
|
||||
|
||||
private static Set<SchemaElement> getDimensions(DataSetSchemaResp resp) {
|
||||
Set<SchemaElement> dimensions = new HashSet<>();
|
||||
for (DimSchemaResp dim : resp.getDimensions()) {
|
||||
List<String> alias = SchemaItem.getAliasList(dim.getAlias());
|
||||
List<DimValueMap> dimValueMaps = dim.getDimValueMaps();
|
||||
List<SchemaValueMap> schemaValueMaps = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(dimValueMaps)) {
|
||||
for (DimValueMap dimValueMap : dimValueMaps) {
|
||||
SchemaValueMap schemaValueMap = new SchemaValueMap();
|
||||
BeanUtils.copyProperties(dimValueMap, schemaValueMap);
|
||||
schemaValueMaps.add(schemaValueMap);
|
||||
}
|
||||
}
|
||||
SchemaElement dimToAdd = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.DIMENSION)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(alias)
|
||||
.schemaValueMaps(schemaValueMaps)
|
||||
.build();
|
||||
dimensions.add(dimToAdd);
|
||||
}
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
private static Set<SchemaElement> getDimensionValues(DataSetSchemaResp resp) {
|
||||
Set<SchemaElement> dimensionValues = new HashSet<>();
|
||||
for (DimSchemaResp dim : resp.getDimensions()) {
|
||||
Set<String> dimValueAlias = new HashSet<>();
|
||||
List<DimValueMap> dimValueMaps = dim.getDimValueMaps();
|
||||
if (!CollectionUtils.isEmpty(dimValueMaps)) {
|
||||
for (DimValueMap dimValueMap : dimValueMaps) {
|
||||
if (Strings.isNotEmpty(dimValueMap.getBizName())) {
|
||||
dimValueAlias.add(dimValueMap.getBizName());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(dimValueMap.getAlias())) {
|
||||
dimValueAlias.addAll(dimValueMap.getAlias());
|
||||
}
|
||||
}
|
||||
}
|
||||
SchemaElement dimValueToAdd = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.VALUE)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(new ArrayList<>(Arrays.asList(dimValueAlias.toArray(new String[0]))))
|
||||
.build();
|
||||
dimensionValues.add(dimValueToAdd);
|
||||
}
|
||||
return dimensionValues;
|
||||
}
|
||||
|
||||
private static Set<SchemaElement> getMetrics(DataSetSchemaResp resp) {
|
||||
Set<SchemaElement> metrics = new HashSet<>();
|
||||
for (MetricSchemaResp metric : resp.getMetrics()) {
|
||||
|
||||
@@ -57,90 +173,7 @@ public class DataSetSchemaBuilder {
|
||||
metrics.add(metricToAdd);
|
||||
|
||||
}
|
||||
dataSetSchema.getMetrics().addAll(metrics);
|
||||
|
||||
Set<SchemaElement> dimensions = new HashSet<>();
|
||||
Set<SchemaElement> dimensionValues = new HashSet<>();
|
||||
Set<SchemaElement> tags = new HashSet<>();
|
||||
for (DimSchemaResp dim : resp.getDimensions()) {
|
||||
|
||||
List<String> alias = SchemaItem.getAliasList(dim.getAlias());
|
||||
Set<String> dimValueAlias = new HashSet<>();
|
||||
List<DimValueMap> dimValueMaps = dim.getDimValueMaps();
|
||||
List<SchemaValueMap> schemaValueMaps = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(dimValueMaps)) {
|
||||
|
||||
for (DimValueMap dimValueMap : dimValueMaps) {
|
||||
if (Strings.isNotEmpty(dimValueMap.getBizName())) {
|
||||
dimValueAlias.add(dimValueMap.getBizName());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(dimValueMap.getAlias())) {
|
||||
dimValueAlias.addAll(dimValueMap.getAlias());
|
||||
}
|
||||
SchemaValueMap schemaValueMap = new SchemaValueMap();
|
||||
BeanUtils.copyProperties(dimValueMap, schemaValueMap);
|
||||
schemaValueMaps.add(schemaValueMap);
|
||||
}
|
||||
|
||||
}
|
||||
SchemaElement dimToAdd = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.DIMENSION)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(alias)
|
||||
.schemaValueMaps(schemaValueMaps)
|
||||
.build();
|
||||
dimensions.add(dimToAdd);
|
||||
|
||||
SchemaElement dimValueToAdd = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.VALUE)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(new ArrayList<>(Arrays.asList(dimValueAlias.toArray(new String[0]))))
|
||||
.build();
|
||||
dimensionValues.add(dimValueToAdd);
|
||||
if (dim.getIsTag() == 1) {
|
||||
SchemaElement tagToAdd = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.TAG)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(alias)
|
||||
.schemaValueMaps(schemaValueMaps)
|
||||
.build();
|
||||
tags.add(tagToAdd);
|
||||
}
|
||||
}
|
||||
dataSetSchema.getDimensions().addAll(dimensions);
|
||||
dataSetSchema.getDimensionValues().addAll(dimensionValues);
|
||||
dataSetSchema.getTags().addAll(tags);
|
||||
|
||||
DimSchemaResp dim = resp.getPrimaryKey();
|
||||
if (dim != null) {
|
||||
SchemaElement entity = SchemaElement.builder()
|
||||
.dataSet(resp.getId())
|
||||
.model(dim.getModelId())
|
||||
.id(dim.getId())
|
||||
.name(dim.getName())
|
||||
.bizName(dim.getBizName())
|
||||
.type(SchemaElementType.ENTITY)
|
||||
.useCnt(dim.getUseCnt())
|
||||
.alias(dim.getEntityAlias())
|
||||
.build();
|
||||
dataSetSchema.setEntity(entity);
|
||||
}
|
||||
return dataSetSchema;
|
||||
return metrics;
|
||||
}
|
||||
|
||||
private static List<RelatedSchemaElement> getRelateSchemaElement(MetricSchemaResp metricSchemaResp) {
|
||||
|
||||
@@ -32,6 +32,7 @@ public class WordService {
|
||||
addWordsByType(DictWordType.METRIC, semanticSchema.getMetrics(), words);
|
||||
addWordsByType(DictWordType.ENTITY, semanticSchema.getEntities(), words);
|
||||
addWordsByType(DictWordType.VALUE, semanticSchema.getDimensionValues(), words);
|
||||
addWordsByType(DictWordType.TAG, semanticSchema.getTags(), words);
|
||||
|
||||
return words;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user