[improvement][headless]Change class name Dim to Dimension.

[improvement][headless]Change class name `Dim` to `Dimension`.
This commit is contained in:
jerryjzhang
2024-12-04 21:59:07 +08:00
parent 28d5f38ffb
commit c98c5ade9e
19 changed files with 126 additions and 131 deletions

View File

@@ -1,5 +1,5 @@
package com.tencent.supersonic.common.pojo.enums; package com.tencent.supersonic.common.pojo.enums;
public enum TypeEnums { public enum TypeEnums {
METRIC, DIMENSION, TAG_OBJECT, TAG, DOMAIN, DATASET, MODEL, UNKNOWN METRIC, DIMENSION, TAG, DOMAIN, DATASET, MODEL, UNKNOWN
} }

View File

@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class Dim { public class Dimension {
private String name; private String name;
@@ -27,16 +27,14 @@ public class Dim {
private String description; private String description;
private int isTag; public Dimension(String name, String bizName, DimensionType type, Integer isCreateDimension) {
public Dim(String name, String bizName, DimensionType type, Integer isCreateDimension) {
this.name = name; this.name = name;
this.type = type; this.type = type;
this.isCreateDimension = isCreateDimension; this.isCreateDimension = isCreateDimension;
this.bizName = bizName; this.bizName = bizName;
} }
public Dim(String name, String bizName, DimensionType type, Integer isCreateDimension, public Dimension(String name, String bizName, DimensionType type, Integer isCreateDimension,
String expr, String dateFormat, DimensionTimeTypeParams typeParams) { String expr, String dateFormat, DimensionTimeTypeParams typeParams) {
this.name = name; this.name = name;
this.type = type; this.type = type;
@@ -47,8 +45,8 @@ public class Dim {
this.bizName = bizName; this.bizName = bizName;
} }
public static Dim getDefault() { public static Dimension getDefault() {
return new Dim("数据日期", "imp_date", DimensionType.partition_time, 0, "imp_date", return new Dimension("数据日期", "imp_date", DimensionType.partition_time, 0, "imp_date",
Constants.DAY_FORMAT, new DimensionTimeTypeParams("false", "day")); Constants.DAY_FORMAT, new DimensionTimeTypeParams("false", "day"));
} }

View File

@@ -24,7 +24,7 @@ public class ModelDetail {
private List<Identify> identifiers = Lists.newArrayList(); private List<Identify> identifiers = Lists.newArrayList();
private List<Dim> dimensions = Lists.newArrayList(); private List<Dimension> dimensions = Lists.newArrayList();
private List<Measure> measures = Lists.newArrayList(); private List<Measure> measures = Lists.newArrayList();
@@ -39,7 +39,7 @@ public class ModelDetail {
return sqlQuery; return sqlQuery;
} }
public List<Dim> filterTimeDims() { public List<Dimension> filterTimeDims() {
if (CollectionUtils.isEmpty(dimensions)) { if (CollectionUtils.isEmpty(dimensions)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }

View File

@@ -32,8 +32,6 @@ public class DimensionReq extends SchemaItem {
private DataTypeEnums dataType; private DataTypeEnums dataType;
private int isTag;
private Map<String, Object> ext; private Map<String, Object> ext;
private DimensionTimeTypeParams typeParams; private DimensionTimeTypeParams typeParams;

View File

@@ -1,7 +1,7 @@
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.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension; import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
import com.tencent.supersonic.headless.api.pojo.Field; import com.tencent.supersonic.headless.api.pojo.Field;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
@@ -62,7 +62,7 @@ public class ModelResp extends SchemaItem {
return isOpen != null && isOpen == 1; return isOpen != null && isOpen == 1;
} }
public List<Dim> getTimeDimension() { public List<Dimension> getTimeDimension() {
if (modelDetail == null) { if (modelDetail == null) {
return Lists.newArrayList(); return Lists.newArrayList();
} }

View File

@@ -26,8 +26,8 @@ public class DataModelNode extends SemanticNode {
sqlTable = dataModel.getSqlQuery(); sqlTable = dataModel.getSqlQuery();
} else if (dataModel.getTableQuery() != null && !dataModel.getTableQuery().isEmpty()) { } else if (dataModel.getTableQuery() != null && !dataModel.getTableQuery().isEmpty()) {
if (dataModel.getType().equalsIgnoreCase(EngineType.POSTGRESQL.getName())) { if (dataModel.getType().equalsIgnoreCase(EngineType.POSTGRESQL.getName())) {
String fullTableName = Arrays.stream(dataModel.getTableQuery().split("\\.")) String fullTableName =
.collect(Collectors.joining(".public.")); String.join(".public.", dataModel.getTableQuery().split("\\."));
sqlTable = "select * from " + fullTableName; sqlTable = "select * from " + fullTableName;
} else { } else {
sqlTable = "select * from " + dataModel.getTableQuery(); sqlTable = "select * from " + dataModel.getTableQuery();
@@ -64,7 +64,7 @@ public class DataModelNode extends SemanticNode {
for (Dimension d : datasource.getDimensions()) { for (Dimension d : datasource.getDimensions()) {
List<SqlNode> identifiers = List<SqlNode> identifiers =
expand(SemanticNode.parse(d.getExpr(), scope, engineType), scope); expand(SemanticNode.parse(d.getExpr(), scope, engineType), scope);
identifiers.stream().forEach(i -> dimensions.add(i.toString())); identifiers.forEach(i -> dimensions.add(i.toString()));
dimensions.add(d.getName()); dimensions.add(d.getName());
} }
for (Identify i : datasource.getIdentifiers()) { for (Identify i : datasource.getIdentifiers()) {
@@ -73,7 +73,7 @@ public class DataModelNode extends SemanticNode {
for (Measure m : datasource.getMeasures()) { for (Measure m : datasource.getMeasures()) {
List<SqlNode> identifiers = List<SqlNode> identifiers =
expand(SemanticNode.parse(m.getExpr(), scope, engineType), scope); expand(SemanticNode.parse(m.getExpr(), scope, engineType), scope);
identifiers.stream().forEach(i -> { identifiers.forEach(i -> {
if (!dimensions.contains(i.toString())) { if (!dimensions.contains(i.toString())) {
metrics.add(i.toString()); metrics.add(i.toString());
} }
@@ -127,7 +127,7 @@ public class DataModelNode extends SemanticNode {
} }
public static String getNames(List<DataModel> dataModelList) { public static String getNames(List<DataModel> dataModelList) {
return dataModelList.stream().map(d -> d.getName()).collect(Collectors.joining("_")); return dataModelList.stream().map(DataModel::getName).collect(Collectors.joining("_"));
} }
public static void getQueryDimensionMeasure(Ontology ontology, OntologyQueryParam queryParam, public static void getQueryDimensionMeasure(Ontology ontology, OntologyQueryParam queryParam,
@@ -138,12 +138,12 @@ public class DataModelNode extends SemanticNode {
: d) : d)
.collect(Collectors.toSet())); .collect(Collectors.toSet()));
Set<String> schemaMetricName = Set<String> schemaMetricName =
ontology.getMetrics().stream().map(m -> m.getName()).collect(Collectors.toSet()); ontology.getMetrics().stream().map(Metric::getName).collect(Collectors.toSet());
ontology.getMetrics().stream().filter(m -> queryParam.getMetrics().contains(m.getName())) ontology.getMetrics().stream().filter(m -> queryParam.getMetrics().contains(m.getName()))
.forEach(m -> m.getMetricTypeParams().getMeasures().stream() .forEach(m -> m.getMetricTypeParams().getMeasures()
.forEach(mm -> queryMeasures.add(mm.getName()))); .forEach(mm -> queryMeasures.add(mm.getName())));
queryParam.getMetrics().stream().filter(m -> !schemaMetricName.contains(m)) queryParam.getMetrics().stream().filter(m -> !schemaMetricName.contains(m))
.forEach(m -> queryMeasures.add(m)); .forEach(queryMeasures::add);
} }
public static void mergeQueryFilterDimensionMeasure(Ontology ontology, public static void mergeQueryFilterDimensionMeasure(Ontology ontology,
@@ -155,13 +155,13 @@ public class DataModelNode extends SemanticNode {
FilterNode.getFilterField(parse(queryParam.getWhere(), scope, engineType), FilterNode.getFilterField(parse(queryParam.getWhere(), scope, engineType),
filterConditions); filterConditions);
Set<String> queryMeasures = new HashSet<>(measures); Set<String> queryMeasures = new HashSet<>(measures);
Set<String> schemaMetricName = ontology.getMetrics().stream().map(m -> m.getName()) Set<String> schemaMetricName =
.collect(Collectors.toSet()); ontology.getMetrics().stream().map(Metric::getName).collect(Collectors.toSet());
for (String filterCondition : filterConditions) { for (String filterCondition : filterConditions) {
if (schemaMetricName.contains(filterCondition)) { if (schemaMetricName.contains(filterCondition)) {
ontology.getMetrics().stream() ontology.getMetrics().stream()
.filter(m -> m.getName().equalsIgnoreCase(filterCondition)) .filter(m -> m.getName().equalsIgnoreCase(filterCondition))
.forEach(m -> m.getMetricTypeParams().getMeasures().stream() .forEach(m -> m.getMetricTypeParams().getMeasures()
.forEach(mm -> queryMeasures.add(mm.getName()))); .forEach(mm -> queryMeasures.add(mm.getName())));
continue; continue;
} }
@@ -255,7 +255,7 @@ public class DataModelNode extends SemanticNode {
.collect(Collectors.toSet()); .collect(Collectors.toSet());
Set<String> baseDimensions = baseDataModel.getDimensions().stream().map(Dimension::getName) Set<String> baseDimensions = baseDataModel.getDimensions().stream().map(Dimension::getName)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
baseDataModel.getIdentifiers().stream().forEach(i -> baseDimensions.add(i.getName())); baseDataModel.getIdentifiers().forEach(i -> baseDimensions.add(i.getName()));
baseMeasures.retainAll(queryMeasures); baseMeasures.retainAll(queryMeasures);
if (baseMeasures.size() < queryMeasures.size()) { if (baseMeasures.size() < queryMeasures.size()) {
@@ -296,7 +296,7 @@ public class DataModelNode extends SemanticNode {
visitJoinRelations, sortedJoinRelation); visitJoinRelations, sortedJoinRelation);
ontology.getJoinRelations().stream() ontology.getJoinRelations().stream()
.filter(j -> !visitJoinRelations.contains(j.getId())) .filter(j -> !visitJoinRelations.contains(j.getId()))
.forEach(j -> sortedJoinRelation.add(j)); .forEach(sortedJoinRelation::add);
for (JoinRelation joinRelation : sortedJoinRelation) { for (JoinRelation joinRelation : sortedJoinRelation) {
if (!before.contains(joinRelation.getLeft()) if (!before.contains(joinRelation.getLeft())
&& !before.contains(joinRelation.getRight())) { && !before.contains(joinRelation.getRight())) {
@@ -310,8 +310,8 @@ public class DataModelNode extends SemanticNode {
: joinRelation.getJoinCondition().get(0).getLeft(); : joinRelation.getJoinCondition().get(0).getLeft();
if (!queryDimensions.isEmpty()) { if (!queryDimensions.isEmpty()) {
Set<String> linkDimension = other.getDimensions().stream() Set<String> linkDimension = other.getDimensions().stream()
.map(dd -> dd.getName()).collect(Collectors.toSet()); .map(Dimension::getName).collect(Collectors.toSet());
other.getIdentifiers().stream().forEach(i -> linkDimension.add(i.getName())); other.getIdentifiers().forEach(i -> linkDimension.add(i.getName()));
linkDimension.retainAll(queryDimensions); linkDimension.retainAll(queryDimensions);
if (!linkDimension.isEmpty()) { if (!linkDimension.isEmpty()) {
isMatch = true; isMatch = true;
@@ -327,7 +327,7 @@ public class DataModelNode extends SemanticNode {
} }
if (!isMatch && ontology.getDimensionMap().containsKey(other.getName())) { if (!isMatch && ontology.getDimensionMap().containsKey(other.getName())) {
Set<String> linkDimension = ontology.getDimensionMap().get(other.getName()) Set<String> linkDimension = ontology.getDimensionMap().get(other.getName())
.stream().map(dd -> dd.getName()).collect(Collectors.toSet()); .stream().map(Dimension::getName).collect(Collectors.toSet());
linkDimension.retainAll(queryDimensions); linkDimension.retainAll(queryDimensions);
if (!linkDimension.isEmpty()) { if (!linkDimension.isEmpty()) {
isMatch = true; isMatch = true;
@@ -387,15 +387,14 @@ public class DataModelNode extends SemanticNode {
if (entry.getKey().equalsIgnoreCase(baseDataModel.getName())) { if (entry.getKey().equalsIgnoreCase(baseDataModel.getName())) {
continue; continue;
} }
Long identifierNum = entry.getValue().getIdentifiers().stream().map(i -> i.getName()) long identifierNum = entry.getValue().getIdentifiers().stream().map(Identify::getName)
.filter(i -> baseIdentifiers.contains(i)).count(); .filter(baseIdentifiers::contains).count();
if (identifierNum > 0) { if (identifierNum > 0) {
boolean isMatch = false; boolean isMatch = false;
if (!queryDimension.isEmpty()) { if (!queryDimension.isEmpty()) {
Set<String> linkDimension = entry.getValue().getDimensions().stream() Set<String> linkDimension = entry.getValue().getDimensions().stream()
.map(dd -> dd.getName()).collect(Collectors.toSet()); .map(Dimension::getName).collect(Collectors.toSet());
entry.getValue().getIdentifiers().stream() entry.getValue().getIdentifiers().forEach(i -> linkDimension.add(i.getName()));
.forEach(i -> linkDimension.add(i.getName()));
linkDimension.retainAll(queryDimension); linkDimension.retainAll(queryDimension);
if (!linkDimension.isEmpty()) { if (!linkDimension.isEmpty()) {
isMatch = true; isMatch = true;
@@ -403,7 +402,7 @@ public class DataModelNode extends SemanticNode {
} }
if (!measures.isEmpty()) { if (!measures.isEmpty()) {
Set<String> linkMeasure = entry.getValue().getMeasures().stream() Set<String> linkMeasure = entry.getValue().getMeasures().stream()
.map(mm -> mm.getName()).collect(Collectors.toSet()); .map(Measure::getName).collect(Collectors.toSet());
linkMeasure.retainAll(measures); linkMeasure.retainAll(measures);
if (!linkMeasure.isEmpty()) { if (!linkMeasure.isEmpty()) {
isMatch = true; isMatch = true;

View File

@@ -1,7 +1,7 @@
package com.tencent.supersonic.headless.core.utils; package com.tencent.supersonic.headless.core.utils;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams; import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams;
import com.tencent.supersonic.headless.api.pojo.enums.DimensionType; import com.tencent.supersonic.headless.api.pojo.enums.DimensionType;
import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptor; import com.tencent.supersonic.headless.core.adaptor.db.DbAdaptor;
@@ -20,11 +20,11 @@ public class SysTimeDimensionBuilder {
Pattern.compile("\\b(DATE|TIME|TIMESTAMP|YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)\\b", Pattern.compile("\\b(DATE|TIME|TIMESTAMP|YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)\\b",
Pattern.CASE_INSENSITIVE); Pattern.CASE_INSENSITIVE);
public static void addSysTimeDimension(List<Dim> dims, DbAdaptor engineAdaptor) { public static void addSysTimeDimension(List<Dimension> dims, DbAdaptor engineAdaptor) {
log.debug("addSysTimeDimension before:{}, engineAdaptor:{}", dims, engineAdaptor); log.debug("addSysTimeDimension before:{}, engineAdaptor:{}", dims, engineAdaptor);
Dim timeDim = getTimeDim(dims); Dimension timeDim = getTimeDim(dims);
if (timeDim == null) { if (timeDim == null) {
timeDim = Dim.getDefault(); timeDim = Dimension.getDefault();
// todo not find the time dimension // todo not find the time dimension
return; return;
} }
@@ -34,8 +34,8 @@ public class SysTimeDimensionBuilder {
log.debug("addSysTimeDimension after:{}, engineAdaptor:{}", dims, engineAdaptor); log.debug("addSysTimeDimension after:{}, engineAdaptor:{}", dims, engineAdaptor);
} }
private static Dim generateSysDayDimension(Dim timeDim, DbAdaptor engineAdaptor) { private static Dimension generateSysDayDimension(Dimension timeDim, DbAdaptor engineAdaptor) {
Dim dim = new Dim(); Dimension dim = new Dimension();
dim.setBizName(TimeDimensionEnum.DAY.getName()); dim.setBizName(TimeDimensionEnum.DAY.getName());
dim.setType(DimensionType.partition_time); dim.setType(DimensionType.partition_time);
dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.DAY.name().toLowerCase(), dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.DAY.name().toLowerCase(),
@@ -47,8 +47,8 @@ public class SysTimeDimensionBuilder {
return dim; return dim;
} }
private static Dim generateSysWeekDimension(Dim timeDim, DbAdaptor engineAdaptor) { private static Dimension generateSysWeekDimension(Dimension timeDim, DbAdaptor engineAdaptor) {
Dim dim = new Dim(); Dimension dim = new Dimension();
dim.setBizName(TimeDimensionEnum.WEEK.getName()); dim.setBizName(TimeDimensionEnum.WEEK.getName());
dim.setType(DimensionType.partition_time); dim.setType(DimensionType.partition_time);
dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.WEEK.name().toLowerCase(), dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.WEEK.name().toLowerCase(),
@@ -60,8 +60,8 @@ public class SysTimeDimensionBuilder {
return dim; return dim;
} }
private static Dim generateSysMonthDimension(Dim timeDim, DbAdaptor engineAdaptor) { private static Dimension generateSysMonthDimension(Dimension timeDim, DbAdaptor engineAdaptor) {
Dim dim = new Dim(); Dimension dim = new Dimension();
dim.setBizName(TimeDimensionEnum.MONTH.getName()); dim.setBizName(TimeDimensionEnum.MONTH.getName());
dim.setType(DimensionType.partition_time); dim.setType(DimensionType.partition_time);
dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.MONTH.name().toLowerCase(), dim.setExpr(generateTimeExpr(timeDim, TimeDimensionEnum.MONTH.name().toLowerCase(),
@@ -79,7 +79,8 @@ public class SysTimeDimensionBuilder {
} }
// Check whether the time field contains keywords,Generation time expression // Check whether the time field contains keywords,Generation time expression
private static String generateTimeExpr(Dim timeDim, String dateType, DbAdaptor engineAdaptor) { private static String generateTimeExpr(Dimension timeDim, String dateType,
DbAdaptor engineAdaptor) {
String bizName = timeDim.getBizName(); String bizName = timeDim.getBizName();
String dateFormat = timeDim.getDateFormat(); String dateFormat = timeDim.getDateFormat();
if (containsTimeKeyword(bizName)) { if (containsTimeKeyword(bizName)) {
@@ -90,8 +91,8 @@ public class SysTimeDimensionBuilder {
} }
} }
private static Dim getTimeDim(List<Dim> timeDims) { private static Dimension getTimeDim(List<Dimension> timeDims) {
for (Dim dim : timeDims) { for (Dimension dim : timeDims) {
if (dim.getType().equals(DimensionType.partition_time)) { if (dim.getType().equals(DimensionType.partition_time)) {
return dim; return dim;
} }

View File

@@ -207,7 +207,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
ModelResp modelResp = modelResps.get(0); ModelResp modelResp = modelResps.get(0);
String sql = String.format("select distinct %s from %s where 1=1", dimensionResp.getName(), String sql = String.format("select distinct %s from %s where 1=1", dimensionResp.getName(),
modelResp.getName()); modelResp.getName());
List<Dim> timeDims = modelResp.getTimeDimension(); List<Dimension> timeDims = modelResp.getTimeDimension();
if (CollectionUtils.isNotEmpty(timeDims)) { if (CollectionUtils.isNotEmpty(timeDims)) {
sql = String.format("%s and %s >= '%s' and %s <= '%s'", sql, sql = String.format("%s and %s >= '%s' and %s <= '%s'", sql,
TimeDimensionEnum.DAY.getName(), queryDimValueReq.getDateInfo().getStartDate(), TimeDimensionEnum.DAY.getName(), queryDimValueReq.getDateInfo().getStartDate(),

View File

@@ -1,6 +1,6 @@
package com.tencent.supersonic.headless.server.manager; package com.tencent.supersonic.headless.server.manager;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.Measure;
import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.ModelDetail;
@@ -53,7 +53,7 @@ public class ModelYamlManager {
return dataModelYamlTpl; return dataModelYamlTpl;
} }
public static DimensionYamlTpl convert(Dim dim) { public static DimensionYamlTpl convert(Dimension dim) {
DimensionYamlTpl dimensionYamlTpl = new DimensionYamlTpl(); DimensionYamlTpl dimensionYamlTpl = new DimensionYamlTpl();
BeanUtils.copyProperties(dim, dimensionYamlTpl); BeanUtils.copyProperties(dim, dimensionYamlTpl);
dimensionYamlTpl.setName(dim.getBizName()); dimensionYamlTpl.setName(dim.getBizName());

View File

@@ -16,6 +16,7 @@ public class ModelDO {
private Long domainId; private Long domainId;
@Deprecated
private Long tagObjectId; private Long tagObjectId;
private String name; private String name;

View File

@@ -12,7 +12,7 @@ import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.DBColumn; import com.tencent.supersonic.headless.api.pojo.DBColumn;
import com.tencent.supersonic.headless.api.pojo.DbSchema; import com.tencent.supersonic.headless.api.pojo.DbSchema;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
import com.tencent.supersonic.headless.api.pojo.ItemDateFilter; import com.tencent.supersonic.headless.api.pojo.ItemDateFilter;
import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.Measure;
@@ -78,23 +78,23 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class ModelServiceImpl implements ModelService { public class ModelServiceImpl implements ModelService {
private ModelRepository modelRepository; private final ModelRepository modelRepository;
private DatabaseService databaseService; private final DatabaseService databaseService;
private DimensionService dimensionService; private final DimensionService dimensionService;
private MetricService metricService; private final MetricService metricService;
private DomainService domainService; private final DomainService domainService;
private UserService userService; private final UserService userService;
private DataSetService dataSetService; private final DataSetService dataSetService;
private DateInfoRepository dateInfoRepository; private final DateInfoRepository dateInfoRepository;
private ModelRelaService modelRelaService; private final ModelRelaService modelRelaService;
ExecutorService executor = ExecutorService executor =
new ThreadPoolExecutor(0, 5, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); new ThreadPoolExecutor(0, 5, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
@@ -292,7 +292,7 @@ public class ModelServiceImpl implements ModelService {
if (modelReq.getModelDetail() == null) { if (modelReq.getModelDetail() == null) {
return; return;
} }
List<Dim> dims = modelReq.getModelDetail().getDimensions(); List<Dimension> dims = modelReq.getModelDetail().getDimensions();
List<Measure> measures = modelReq.getModelDetail().getMeasures(); List<Measure> measures = modelReq.getModelDetail().getMeasures();
List<Identify> identifies = modelReq.getModelDetail().getIdentifiers(); List<Identify> identifies = modelReq.getModelDetail().getIdentifiers();
if (CollectionUtils.isEmpty(dims)) { if (CollectionUtils.isEmpty(dims)) {
@@ -308,7 +308,7 @@ public class ModelServiceImpl implements ModelService {
throw new InvalidArgumentException(message); throw new InvalidArgumentException(message);
} }
} }
for (Dim dim : dims) { for (Dimension dim : dims) {
String dimForbiddenCharacters = NameCheckUtils.findForbiddenCharacters(dim.getName()); String dimForbiddenCharacters = NameCheckUtils.findForbiddenCharacters(dim.getName());
if (StringUtils.isNotBlank(dim.getName()) if (StringUtils.isNotBlank(dim.getName())
&& StringUtils.isNotBlank(dimForbiddenCharacters)) { && StringUtils.isNotBlank(dimForbiddenCharacters)) {
@@ -337,12 +337,10 @@ public class ModelServiceImpl implements ModelService {
Set<String> relations = new HashSet<>(); Set<String> relations = new HashSet<>();
for (ModelRela modelRela : modelRelas) { for (ModelRela modelRela : modelRelas) {
if (modelRela.getFromModelId().equals(modelReq.getId())) { if (modelRela.getFromModelId().equals(modelReq.getId())) {
modelRela.getJoinConditions().stream() modelRela.getJoinConditions().forEach(r -> relations.add(r.getLeftField()));
.forEach(r -> relations.add(r.getLeftField()));
} }
if (modelRela.getToModelId().equals(modelReq.getId())) { if (modelRela.getToModelId().equals(modelReq.getId())) {
modelRela.getJoinConditions().stream() modelRela.getJoinConditions().forEach(r -> relations.add(r.getRightField()));
.forEach(r -> relations.add(r.getRightField()));
} }
} }
if (relations.isEmpty()) { if (relations.isEmpty()) {
@@ -351,10 +349,10 @@ public class ModelServiceImpl implements ModelService {
// any identify in model relation should not be deleted // any identify in model relation should not be deleted
if (modelReq.getModelDetail() == null if (modelReq.getModelDetail() == null
|| CollectionUtils.isEmpty(modelReq.getModelDetail().getIdentifiers())) { || CollectionUtils.isEmpty(modelReq.getModelDetail().getIdentifiers())) {
throw new InvalidArgumentException(String.format("模型关联中主键/外键不存在, 请检查")); throw new InvalidArgumentException("模型关联中主键/外键不存在, 请检查");
} }
List<String> modelIdentifiers = modelReq.getModelDetail().getIdentifiers().stream() List<String> modelIdentifiers = modelReq.getModelDetail().getIdentifiers().stream()
.map(i -> i.getBizName()).collect(Collectors.toList()); .map(Identify::getBizName).collect(Collectors.toList());
for (String rela : relations) { for (String rela : relations) {
if (!modelIdentifiers.contains(rela)) { if (!modelIdentifiers.contains(rela)) {
throw new InvalidArgumentException(String.format("模型关联中主键/外键(%s)不存在, 请检查", rela)); throw new InvalidArgumentException(String.format("模型关联中主键/外键(%s)不存在, 请检查", rela));

View File

@@ -3,7 +3,7 @@ package com.tencent.supersonic.headless.server.service.impl;
import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.ValueDistribution; 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;
@@ -93,7 +93,7 @@ public class TagQueryServiceImpl implements TagQueryService {
private void correctDateConf(ItemValueReq itemValueReq, TagResp tag, User user) private void correctDateConf(ItemValueReq itemValueReq, TagResp tag, User user)
throws Exception { throws Exception {
ModelResp model = modelService.getModel(tag.getModelId()); ModelResp model = modelService.getModel(tag.getModelId());
List<Dim> timeDimension = model.getTimeDimension(); List<Dimension> timeDimension = model.getTimeDimension();
if (CollectionUtils.isEmpty(timeDimension)) { if (CollectionUtils.isEmpty(timeDimension)) {
itemValueReq.setDateConf(null); itemValueReq.setDateConf(null);
return; return;
@@ -112,12 +112,12 @@ public class TagQueryServiceImpl implements TagQueryService {
itemValueReq.setDateConf(dateConf); itemValueReq.setDateConf(dateConf);
} }
private String queryTagDate(Dim dim) { private String queryTagDate(Dimension dim) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dim.getDateFormat()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dim.getDateFormat());
return LocalDate.now().plusDays(-dayBefore).format(formatter); return LocalDate.now().plusDays(-dayBefore).format(formatter);
} }
private String queryTagDateFromDbBySql(Dim dim, TagResp tag, ItemValueReq itemValueReq, private String queryTagDateFromDbBySql(Dimension dim, TagResp tag, ItemValueReq itemValueReq,
User user) { User user) {
String sqlPattern = "select max(%s) as %s from tbl where %s is not null"; String sqlPattern = "select max(%s) as %s from tbl where %s is not null";
@@ -129,7 +129,7 @@ public class TagQueryServiceImpl implements TagQueryService {
if (Objects.nonNull(itemValueReq) && itemValueReq.getDateConf().getUnit() > 1) { if (Objects.nonNull(itemValueReq) && itemValueReq.getDateConf().getUnit() > 1) {
ModelResp model = modelService.getModel(tag.getModelId()); ModelResp model = modelService.getModel(tag.getModelId());
if (Objects.nonNull(model)) { if (Objects.nonNull(model)) {
List<Dim> timeDims = model.getTimeDimension(); List<Dimension> timeDims = model.getTimeDimension();
if (!CollectionUtils.isEmpty(timeDims)) { if (!CollectionUtils.isEmpty(timeDims)) {
String dateFormat = timeDims.get(0).getDateFormat(); String dateFormat = timeDims.get(0).getDateFormat();
if (StringUtils.isEmpty(dateFormat)) { if (StringUtils.isEmpty(dateFormat)) {

View File

@@ -14,7 +14,7 @@ import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.pojo.enums.TypeEnums;
import com.tencent.supersonic.common.util.BeanMapper; import com.tencent.supersonic.common.util.BeanMapper;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.ItemValueConfig; import com.tencent.supersonic.headless.api.pojo.ItemValueConfig;
import com.tencent.supersonic.headless.api.pojo.request.DictItemReq; import com.tencent.supersonic.headless.api.pojo.request.DictItemReq;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
@@ -401,7 +401,7 @@ public class DictUtils {
private void fillStructDateBetween(QueryStructReq queryStructReq, ModelResp model, private void fillStructDateBetween(QueryStructReq queryStructReq, ModelResp model,
Integer itemValueDateStart, Integer itemValueDateEnd) { Integer itemValueDateStart, Integer itemValueDateEnd) {
if (Objects.nonNull(model)) { if (Objects.nonNull(model)) {
List<Dim> timeDims = model.getTimeDimension(); List<Dimension> timeDims = model.getTimeDimension();
if (!CollectionUtils.isEmpty(timeDims)) { if (!CollectionUtils.isEmpty(timeDims)) {
DateConf dateConf = new DateConf(); DateConf dateConf = new DateConf();
dateConf.setDateMode(DateConf.DateMode.BETWEEN); dateConf.setDateMode(DateConf.DateMode.BETWEEN);
@@ -496,7 +496,7 @@ public class DictUtils {
private boolean partitionedModel(Long modelId) { private boolean partitionedModel(Long modelId) {
ModelResp model = modelService.getModel(modelId); ModelResp model = modelService.getModel(modelId);
if (Objects.nonNull(model)) { if (Objects.nonNull(model)) {
List<Dim> timeDims = model.getTimeDimension(); List<Dimension> timeDims = model.getTimeDimension();
if (!CollectionUtils.isEmpty(timeDims)) { if (!CollectionUtils.isEmpty(timeDims)) {
return true; return true;
} }
@@ -507,7 +507,7 @@ public class DictUtils {
private String generateDictDateFilterRecent(DictItemResp dictItemResp) { private String generateDictDateFilterRecent(DictItemResp dictItemResp) {
ModelResp model = modelService.getModel(dictItemResp.getModelId()); ModelResp model = modelService.getModel(dictItemResp.getModelId());
if (Objects.nonNull(model)) { if (Objects.nonNull(model)) {
List<Dim> timeDims = model.getTimeDimension(); List<Dimension> timeDims = model.getTimeDimension();
if (!CollectionUtils.isEmpty(timeDims)) { if (!CollectionUtils.isEmpty(timeDims)) {
String dateFormat = timeDims.get(0).getDateFormat(); String dateFormat = timeDims.get(0).getDateFormat();
if (StringUtils.isEmpty(dateFormat)) { if (StringUtils.isEmpty(dateFormat)) {

View File

@@ -7,7 +7,7 @@ import com.tencent.supersonic.common.pojo.enums.PublishEnum;
import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.StatusEnum;
import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.pojo.enums.TypeEnums;
import com.tencent.supersonic.common.util.BeanMapper; import com.tencent.supersonic.common.util.BeanMapper;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByFieldParams; import com.tencent.supersonic.headless.api.pojo.MetricDefineByFieldParams;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams; import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams; import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams;
@@ -82,7 +82,7 @@ public class MetricConverter {
metricResp.setModelName(modelResp.getName()); metricResp.setModelName(modelResp.getName());
metricResp.setModelBizName(modelResp.getBizName()); metricResp.setModelBizName(modelResp.getBizName());
metricResp.setDomainId(modelResp.getDomainId()); metricResp.setDomainId(modelResp.getDomainId());
List<Dim> timeDims = modelResp.getTimeDimension(); List<Dimension> timeDims = modelResp.getTimeDimension();
if (CollectionUtils.isNotEmpty(timeDims)) { if (CollectionUtils.isNotEmpty(timeDims)) {
metricResp.setContainsPartitionDimensions(true); metricResp.setContainsPartitionDimensions(true);
} }

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.common.pojo.enums.StatusEnum;
import com.tencent.supersonic.common.util.BeanMapper; import com.tencent.supersonic.common.util.BeanMapper;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.ColumnSchema; import com.tencent.supersonic.headless.api.pojo.ColumnSchema;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension; import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.Measure;
@@ -111,7 +111,7 @@ public class ModelConverter {
return measureResp; return measureResp;
} }
public static DimensionReq convert(Dim dim, ModelDO modelDO) { public static DimensionReq convert(Dimension dim, ModelDO modelDO) {
DimensionReq dimensionReq = new DimensionReq(); DimensionReq dimensionReq = new DimensionReq();
dimensionReq.setName(dim.getName()); dimensionReq.setName(dim.getName());
dimensionReq.setBizName(dim.getBizName()); dimensionReq.setBizName(dim.getBizName());
@@ -129,7 +129,6 @@ public class ModelConverter {
dimensionReq.setType(dim.getType().name()); dimensionReq.setType(dim.getType().name());
dimensionReq dimensionReq
.setDescription(Objects.isNull(dim.getDescription()) ? "" : dim.getDescription()); .setDescription(Objects.isNull(dim.getDescription()) ? "" : dim.getDescription());
dimensionReq.setIsTag(dim.getIsTag());
dimensionReq.setTypeParams(dim.getTypeParams()); dimensionReq.setTypeParams(dim.getTypeParams());
return dimensionReq; return dimensionReq;
} }
@@ -188,7 +187,7 @@ public class ModelConverter {
columnSchema.getAgg().getOperator(), 1); columnSchema.getAgg().getOperator(), 1);
modelDetail.getMeasures().add(measure); modelDetail.getMeasures().add(measure);
} else { } else {
Dim dim = new Dim(columnSchema.getName(), columnSchema.getColumnName(), Dimension dim = new Dimension(columnSchema.getName(), columnSchema.getColumnName(),
DimensionType.valueOf(columnSchema.getFiledType().name()), 1); DimensionType.valueOf(columnSchema.getFiledType().name()), 1);
modelDetail.getDimensions().add(dim); modelDetail.getDimensions().add(dim);
} }
@@ -216,7 +215,7 @@ public class ModelConverter {
return modelDescs; return modelDescs;
} }
private static boolean isCreateDimension(Dim dim) { private static boolean isCreateDimension(Dimension dim) {
return dim.getIsCreateDimension() == 1 && StringUtils.isNotBlank(dim.getName()); return dim.getIsCreateDimension() == 1 && StringUtils.isNotBlank(dim.getName());
} }
@@ -228,7 +227,7 @@ public class ModelConverter {
return measure.getIsCreateMetric() == 1 && StringUtils.isNotBlank(measure.getName()); return measure.getIsCreateMetric() == 1 && StringUtils.isNotBlank(measure.getName());
} }
public static List<Dim> getDimToCreateDimension(ModelDetail modelDetail) { public static List<Dimension> getDimToCreateDimension(ModelDetail modelDetail) {
if (CollectionUtils.isEmpty(modelDetail.getDimensions())) { if (CollectionUtils.isEmpty(modelDetail.getDimensions())) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
@@ -256,7 +255,7 @@ public class ModelConverter {
List<DimensionReq> dimensionReqs = Lists.newArrayList(); List<DimensionReq> dimensionReqs = Lists.newArrayList();
ModelDetail modelDetail = ModelDetail modelDetail =
JSONObject.parseObject(modelDO.getModelDetail(), ModelDetail.class); JSONObject.parseObject(modelDO.getModelDetail(), ModelDetail.class);
List<Dim> dims = getDimToCreateDimension(modelDetail); List<Dimension> dims = getDimToCreateDimension(modelDetail);
if (!CollectionUtils.isEmpty(dims)) { if (!CollectionUtils.isEmpty(dims)) {
dimensionReqs = dims.stream().filter(dim -> StringUtils.isNotBlank(dim.getName())) dimensionReqs = dims.stream().filter(dim -> StringUtils.isNotBlank(dim.getName()))
.map(dim -> convert(dim, modelDO)).collect(Collectors.toList()); .map(dim -> convert(dim, modelDO)).collect(Collectors.toList());

View File

@@ -5,7 +5,7 @@ import com.tencent.supersonic.auth.api.authentication.service.UserService;
import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.StatusEnum;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams; import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.Measure;
@@ -95,11 +95,11 @@ class ModelServiceImplTest {
List<Identify> identifiers = new ArrayList<>(); List<Identify> identifiers = new ArrayList<>();
identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name")); identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name"));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 0);
dimension2.setExpr("page"); dimension2.setExpr("page");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
@@ -134,11 +134,11 @@ class ModelServiceImplTest {
identifiers.add(new Identify("用户名_a", IdentifyType.primary.name(), "user_name_a")); identifiers.add(new Identify("用户名_a", IdentifyType.primary.name(), "user_name_a"));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date_a", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date_a", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page_a", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page_a", DimensionType.categorical, 0);
dimension2.setExpr("page_a"); dimension2.setExpr("page_a");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
@@ -169,11 +169,11 @@ class ModelServiceImplTest {
List<Identify> identifiers = new ArrayList<>(); List<Identify> identifiers = new ArrayList<>();
identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name")); identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name"));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 0);
dimension2.setExpr("page"); dimension2.setExpr("page");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
@@ -207,11 +207,11 @@ class ModelServiceImplTest {
identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name")); identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name"));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 0);
dimension2.setExpr("page"); dimension2.setExpr("page");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
@@ -252,11 +252,11 @@ class ModelServiceImplTest {
identifiers.add(new Identify("用户名_a", IdentifyType.primary.name(), "user_name_a")); identifiers.add(new Identify("用户名_a", IdentifyType.primary.name(), "user_name_a"));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date_a", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date_a", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page_a", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page_a", DimensionType.categorical, 0);
dimension2.setExpr("page_a"); dimension2.setExpr("page_a");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);

View File

@@ -89,14 +89,14 @@ public class S2CompanyDemo extends S2BaseDemo {
modelReq.setAdmins(Collections.singletonList("admin")); modelReq.setAdmins(Collections.singletonList("admin"));
modelReq.setAdminOrgs(Collections.emptyList()); modelReq.setAdminOrgs(Collections.emptyList());
ModelDetail modelDetail = new ModelDetail(); ModelDetail modelDetail = new ModelDetail();
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
dimensions.add(new Dim("公司名称", "company_name", DimensionType.categorical, 1)); dimensions.add(new Dimension("公司名称", "company_name", DimensionType.categorical, 1));
dimensions.add(new Dim("总部地点", "headquarter_address", DimensionType.categorical, 1)); dimensions.add(new Dimension("总部地点", "headquarter_address", DimensionType.categorical, 1));
dimensions.add(new Dim("成立时间", "company_established_time", DimensionType.time, 1)); dimensions.add(new Dimension("成立时间", "company_established_time", DimensionType.time, 1));
dimensions.add(new Dim("创始人", "founder", DimensionType.categorical, 1)); dimensions.add(new Dimension("创始人", "founder", DimensionType.categorical, 1));
dimensions.add(new Dim("首席执行官", "ceo", DimensionType.categorical, 1)); dimensions.add(new Dimension("首席执行官", "ceo", DimensionType.categorical, 1));
List<Identify> identifiers = new ArrayList<>(); List<Identify> identifiers = new ArrayList<>();
identifiers.add(new Identify("公司id", IdentifyType.primary.name(), "company_id")); identifiers.add(new Identify("公司id", IdentifyType.primary.name(), "company_id"));
@@ -131,12 +131,13 @@ public class S2CompanyDemo extends S2BaseDemo {
modelReq.setAdmins(Collections.singletonList("admin")); modelReq.setAdmins(Collections.singletonList("admin"));
modelReq.setAdminOrgs(Collections.emptyList()); modelReq.setAdminOrgs(Collections.emptyList());
ModelDetail modelDetail = new ModelDetail(); ModelDetail modelDetail = new ModelDetail();
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
dimensions.add(new Dim("品牌名称", "brand_name", DimensionType.categorical, 1)); dimensions.add(new Dimension("品牌名称", "brand_name", DimensionType.categorical, 1));
dimensions.add(new Dim("品牌成立时间", "brand_established_time", DimensionType.time, 1)); dimensions.add(new Dimension("品牌成立时间", "brand_established_time", DimensionType.time, 1));
dimensions.add(new Dim("法定代表人", "legal_representative", DimensionType.categorical, 1)); dimensions
.add(new Dimension("法定代表人", "legal_representative", DimensionType.categorical, 1));
List<Identify> identifiers = new ArrayList<>(); List<Identify> identifiers = new ArrayList<>();
identifiers.add(new Identify("品牌id", IdentifyType.primary.name(), "brand_id")); identifiers.add(new Identify("品牌id", IdentifyType.primary.name(), "brand_id"));
@@ -168,10 +169,10 @@ public class S2CompanyDemo extends S2BaseDemo {
modelReq.setAdmins(Collections.singletonList("admin")); modelReq.setAdmins(Collections.singletonList("admin"));
modelReq.setAdminOrgs(Collections.emptyList()); modelReq.setAdminOrgs(Collections.emptyList());
ModelDetail modelDetail = new ModelDetail(); ModelDetail modelDetail = new ModelDetail();
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
dimensions.add(new Dim("财年", "year_time", DimensionType.time, 1, "year_time", "yyyy", dimensions.add(new Dimension("财年", "year_time", DimensionType.time, 1, "year_time", "yyyy",
new DimensionTimeTypeParams("false", "year"))); new DimensionTimeTypeParams("false", "year")));
List<Identify> identifiers = new ArrayList<>(); List<Identify> identifiers = new ArrayList<>();

View File

@@ -16,7 +16,7 @@ import com.tencent.supersonic.headless.api.pojo.AggregateTypeDefaultConfig;
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.DetailTypeDefaultConfig; import com.tencent.supersonic.headless.api.pojo.DetailTypeDefaultConfig;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.Identify;
import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.Measure;
import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.ModelDetail;
@@ -101,10 +101,10 @@ public class S2SingerDemo extends S2BaseDemo {
identifiers.add(identify); identifiers.add(identify);
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
dimensions.add(new Dim("活跃区域", "act_area", DimensionType.categorical, 1)); dimensions.add(new Dimension("活跃区域", "act_area", DimensionType.categorical, 1));
dimensions.add(new Dim("代表作", "song_name", DimensionType.categorical, 1)); dimensions.add(new Dimension("代表作", "song_name", DimensionType.categorical, 1));
dimensions.add(new Dim("流派", "genre", DimensionType.categorical, 1)); dimensions.add(new Dimension("流派", "genre", DimensionType.categorical, 1));
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
Measure measure1 = new Measure("播放量", "js_play_cnt", "sum", 1); Measure measure1 = new Measure("播放量", "js_play_cnt", "sum", 1);

View File

@@ -27,7 +27,7 @@ import com.tencent.supersonic.common.util.ChatAppManager;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
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.Dim; import com.tencent.supersonic.headless.api.pojo.Dimension;
import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams; import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams;
import com.tencent.supersonic.headless.api.pojo.Field; import com.tencent.supersonic.headless.api.pojo.Field;
import com.tencent.supersonic.headless.api.pojo.FieldParam; import com.tencent.supersonic.headless.api.pojo.FieldParam;
@@ -199,9 +199,9 @@ public class S2VisitsDemo extends S2BaseDemo {
identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name", 1)); identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name", 1));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
dimensions.add(new Dim("部门", "department", DimensionType.categorical, 1)); dimensions.add(new Dimension("部门", "department", DimensionType.categorical, 1));
// dimensions.add(new Dim("用户", "user_name", DimensionType.categorical, 1)); // dimensions.add(new Dimension("用户", "user_name", DimensionType.categorical, 1));
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
List<Field> fields = Lists.newArrayList(); List<Field> fields = Lists.newArrayList();
fields.add(Field.builder().fieldName("user_name").dataType("Varchar").build()); fields.add(Field.builder().fieldName("user_name").dataType("Varchar").build());
@@ -230,11 +230,11 @@ public class S2VisitsDemo extends S2BaseDemo {
identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 0)); identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 0));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("", "imp_date", DimensionType.partition_time, 0); Dimension dimension1 = new Dimension("", "imp_date", DimensionType.partition_time, 0);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("", "page", DimensionType.categorical, 0); Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 0);
dimension2.setExpr("page"); dimension2.setExpr("page");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);
@@ -274,11 +274,11 @@ public class S2VisitsDemo extends S2BaseDemo {
identifiers.add(new Identify("用户", IdentifyType.foreign.name(), "user_name", 0)); identifiers.add(new Identify("用户", IdentifyType.foreign.name(), "user_name", 0));
modelDetail.setIdentifiers(identifiers); modelDetail.setIdentifiers(identifiers);
List<Dim> dimensions = new ArrayList<>(); List<Dimension> dimensions = new ArrayList<>();
Dim dimension1 = new Dim("数据日期", "imp_date", DimensionType.partition_time, 1); Dimension dimension1 = new Dimension("数据日期", "imp_date", DimensionType.partition_time, 1);
dimension1.setTypeParams(new DimensionTimeTypeParams()); dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1); dimensions.add(dimension1);
Dim dimension2 = new Dim("页面", "page", DimensionType.categorical, 1); Dimension dimension2 = new Dimension("页面", "page", DimensionType.categorical, 1);
dimension2.setExpr("page"); dimension2.setExpr("page");
dimensions.add(dimension2); dimensions.add(dimension2);
modelDetail.setDimensions(dimensions); modelDetail.setDimensions(dimensions);