mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
[improvement][headless]Change class name Dim to Dimension.
[improvement][headless]Change class name `Dim` to `Dimension`.
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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<>();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user