(improvement)(headless) Supports creating new metric by fields and metrics (#639)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2024-01-17 14:21:48 +08:00
committed by GitHub
parent b2beecb5b8
commit 07e6924cfd
40 changed files with 647 additions and 221 deletions

View File

@@ -1,8 +1,8 @@
package com.tencent.supersonic.headless.core.manager;
import com.google.common.collect.Lists;
import com.tencent.supersonic.headless.api.pojo.Measure;
import com.tencent.supersonic.headless.api.pojo.MetricTypeParams;
import com.tencent.supersonic.headless.api.pojo.MeasureParam;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
import com.tencent.supersonic.headless.api.response.MetricResp;
import com.tencent.supersonic.headless.core.pojo.yaml.MeasureYamlTpl;
import com.tencent.supersonic.headless.core.pojo.yaml.MetricTypeParamsYamlTpl;
@@ -37,21 +37,21 @@ public class MetricYamlManager {
BeanUtils.copyProperties(metric, metricYamlTpl);
metricYamlTpl.setName(metric.getBizName());
metricYamlTpl.setOwners(Lists.newArrayList(metric.getCreatedBy()));
MetricTypeParams exprMetricTypeParams = metric.getTypeParams();
MetricDefineByMeasureParams metricDefineParams = metric.getTypeParams();
MetricTypeParamsYamlTpl metricTypeParamsYamlTpl = new MetricTypeParamsYamlTpl();
metricTypeParamsYamlTpl.setExpr(exprMetricTypeParams.getExpr());
List<Measure> measures = exprMetricTypeParams.getMeasures();
metricTypeParamsYamlTpl.setExpr(metricDefineParams.getExpr());
List<MeasureParam> measures = metricDefineParams.getMeasures();
metricTypeParamsYamlTpl.setMeasures(
measures.stream().map(MetricYamlManager::convert).collect(Collectors.toList()));
metricYamlTpl.setTypeParams(metricTypeParamsYamlTpl);
return metricYamlTpl;
}
public static MeasureYamlTpl convert(Measure measure) {
public static MeasureYamlTpl convert(MeasureParam measure) {
MeasureYamlTpl measureYamlTpl = new MeasureYamlTpl();
measureYamlTpl.setName(measure.getBizName());
measureYamlTpl.setConstraint(measure.getConstraint());
measureYamlTpl.setAgg(measure.getAlias());
measureYamlTpl.setAgg(measure.getAgg());
return measureYamlTpl;
}

View File

@@ -94,7 +94,7 @@ public class ModelYamlManager {
}
measure.setAgg("count");
measure.setBizName(String.format("%s_%s", datasourceEnName, "internal_cnt"));
measure.setCreateMetric("true");
measure.setIsCreateMetric(1);
datasourceDetail.getMeasures().add(measure);
}

View File

@@ -316,9 +316,9 @@ public class SourceRender extends Renderer {
}
}
public void render(MetricQueryReq metricCommand, List<DataSource> dataSources, SqlValidatorScope scope,
public void render(MetricQueryReq metricQueryReq, List<DataSource> dataSources, SqlValidatorScope scope,
HeadlessSchema schema, boolean nonAgg) throws Exception {
String queryWhere = metricCommand.getWhere();
String queryWhere = metricQueryReq.getWhere();
Set<String> whereFields = new HashSet<>();
List<String> fieldWhere = new ArrayList<>();
if (queryWhere != null && !queryWhere.isEmpty()) {
@@ -328,13 +328,13 @@ public class SourceRender extends Renderer {
}
if (dataSources.size() == 1) {
DataSource dataSource = dataSources.get(0);
super.tableView = renderOne("", fieldWhere, metricCommand.getMetrics(),
metricCommand.getDimensions(),
metricCommand.getWhere(), dataSource, scope, schema, nonAgg);
super.tableView = renderOne("", fieldWhere, metricQueryReq.getMetrics(),
metricQueryReq.getDimensions(),
metricQueryReq.getWhere(), dataSource, scope, schema, nonAgg);
return;
}
JoinRender joinRender = new JoinRender();
joinRender.render(metricCommand, dataSources, scope, schema, nonAgg);
joinRender.render(metricQueryReq, dataSources, scope, schema, nonAgg);
super.tableView = joinRender.getTableView();
}