(improvement)(headless) adapter for derived metrics (#646)

This commit is contained in:
jipeli
2024-01-18 11:11:56 +08:00
committed by GitHub
parent 71c491a80d
commit d4eecc1bf8
11 changed files with 537 additions and 58 deletions

View File

@@ -1,9 +1,44 @@
package com.tencent.supersonic.headless.api.enums;
import com.tencent.supersonic.headless.api.pojo.MeasureParam;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
import java.util.List;
import java.util.Objects;
public enum MetricType {
ATOMIC,
DERIVED
DERIVED;
public static MetricType of(String src) {
for (MetricType metricType : MetricType.values()) {
if (Objects.nonNull(src) && src.equalsIgnoreCase(metricType.name())) {
return metricType;
}
}
return null;
}
public static Boolean isDerived(String src) {
MetricType metricType = of(src);
return Objects.nonNull(metricType) && metricType.equals(DERIVED);
}
public static Boolean isDerived(MetricDefineType metricDefineType, MetricDefineByMeasureParams typeParams) {
if (MetricDefineType.METRIC.equals(metricDefineType)) {
return true;
}
if (MetricDefineType.MEASURE.equals(metricDefineType)) {
List<MeasureParam> measures = typeParams.getMeasures();
if (measures.size() > 1) {
return true;
}
if (measures.size() == 1 && measures.get(0).getBizName()
.equalsIgnoreCase(typeParams.getExpr())) {
return false;
}
}
return false;
}
}

View File

@@ -3,12 +3,10 @@ package com.tencent.supersonic.headless.api.request;
import com.alibaba.fastjson.JSONObject;
import com.tencent.supersonic.headless.api.enums.MetricDefineType;
import com.tencent.supersonic.headless.api.enums.MetricType;
import com.tencent.supersonic.headless.api.pojo.MeasureParam;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByFieldParams;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams;
import lombok.Data;
import java.util.List;
@Data
public class MetricReq extends MetricBaseReq {
@@ -30,20 +28,7 @@ public class MetricReq extends MetricBaseReq {
}
public MetricType getMetricType() {
if (MetricDefineType.METRIC.equals(metricDefineType)) {
return MetricType.DERIVED;
}
if (MetricDefineType.MEASURE.equals(metricDefineType)) {
List<MeasureParam> measures = typeParams.getMeasures();
if (measures.size() > 1) {
return MetricType.DERIVED;
}
if (measures.size() == 1 && measures.get(0).getBizName()
.equalsIgnoreCase(typeParams.getExpr())) {
return MetricType.ATOMIC;
}
}
return MetricType.ATOMIC;
return MetricType.isDerived(metricDefineType, typeParams) ? MetricType.DERIVED : MetricType.ATOMIC;
}
}

View File

@@ -10,16 +10,15 @@ import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams;
import com.tencent.supersonic.headless.api.pojo.RelateDimension;
import com.tencent.supersonic.headless.api.pojo.SchemaItem;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@Data