diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index f0c8d3f67..a355bbf27 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -65,7 +65,7 @@ public class SqlQueryParser implements QueryParser { // check if there are fields not matched with any metric or dimension if (allFields.size() > metricSchemas.size() + dimensions.size()) { queryStatement - .setErrMsg("There are fields in the SQL not matched with any semantic column."); + .setErrMsg("There are querying columns in the SQL not matched with any semantic field."); queryStatement.setStatus(1); return; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DimensionNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DimensionNode.java index 0328917f6..abdd23603 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DimensionNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DimensionNode.java @@ -14,7 +14,10 @@ public class DimensionNode extends SemanticNode { public static SqlNode build(Dimension dimension, SqlValidatorScope scope, EngineType engineType) throws Exception { SqlNode sqlNode = parse(dimension.getExpr(), scope, engineType); - return buildAs(dimension.getName(), sqlNode); + if (!dimension.getName().equals(dimension.getExpr())) { + sqlNode = buildAs(dimension.getName(), sqlNode); + } + return sqlNode; } public static List expand(Dimension dimension, SqlValidatorScope scope, diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/MeasureNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/MeasureNode.java index 1dd815fdd..9833b1334 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/MeasureNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/MeasureNode.java @@ -9,7 +9,11 @@ public class MeasureNode extends SemanticNode { public static SqlNode buildNonAgg(String alias, Measure measure, SqlValidatorScope scope, EngineType engineType) throws Exception { - return buildAs(measure.getName(), getExpr(measure, alias, scope, engineType)); + if (measure.getExpr() == null) { + return getExpr(measure, alias, scope, engineType); + } else { + return buildAs(measure.getName(), getExpr(measure, alias, scope, engineType)); + } } public static SqlNode buildAgg(Measure measure, boolean noAgg, SqlValidatorScope scope, diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java index 26b8ba9a0..e0a948749 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java @@ -317,12 +317,12 @@ public class SqlGenerateUtils { public String getExpr(Measure measure, AggOption aggOption) { if (AggOperatorEnum.COUNT_DISTINCT.getOperator().equalsIgnoreCase(measure.getAgg())) { - return AggOption.NATIVE.equals(aggOption) ? measure.getBizName() + return AggOption.NATIVE.equals(aggOption) ? measure.getExpr() : AggOperatorEnum.COUNT.getOperator() + " ( " + AggOperatorEnum.DISTINCT + " " - + measure.getBizName() + " ) "; + + measure.getExpr() + " ) "; } - return AggOption.NATIVE.equals(aggOption) ? measure.getBizName() - : measure.getAgg() + " ( " + measure.getBizName() + " ) "; + return AggOption.NATIVE.equals(aggOption) ? measure.getExpr() + : measure.getAgg() + " ( " + measure.getExpr() + " ) "; } public String getExpr(MetricResp metricResp) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java index 2aae69e90..3f297537c 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java @@ -28,11 +28,11 @@ public class ModelConverter { public static ModelDO convert(ModelReq modelReq, User user) { ModelDO modelDO = new ModelDO(); - ModelDetail modelDetail = createModelDetail(modelReq); + // ModelDetail modelDetail = createModelDetail(modelReq); modelReq.createdBy(user.getName()); BeanMapper.mapper(modelReq, modelDO); modelDO.setStatus(StatusEnum.ONLINE.getCode()); - modelDO.setModelDetail(JSONObject.toJSONString(modelDetail)); + modelDO.setModelDetail(JSONObject.toJSONString(modelReq.getModelDetail())); modelDO.setDrillDownDimensions(JSONObject.toJSONString(modelReq.getDrillDownDimensions())); if (modelReq.getExt() != null) { modelDO.setExt(JSONObject.toJSONString(modelReq.getExt())); @@ -264,17 +264,14 @@ public class ModelConverter { private static ModelDetail createModelDetail(ModelReq modelReq) { ModelDetail modelDetail = new ModelDetail(); - List measures = modelReq.getModelDetail().getMeasures(); - if (measures == null) { - measures = Lists.newArrayList(); - } - for (Measure measure : measures) { - if (StringUtils.isBlank(measure.getBizName())) { - continue; - } - measure.setExpr(measure.getBizName()); - measure.setBizName(String.format("%s_%s", modelReq.getBizName(), measure.getExpr())); - } + // List measures = modelReq.getModelDetail().getMeasures(); + // for (Measure measure : measures) { + // if (StringUtils.isBlank(measure.getBizName())) { + // continue; + // } + // measure.setExpr(measure.getBizName()); + // measure.setBizName(String.format("%s_%", modelReq.getBizName(), measure.getExpr())); + // } BeanMapper.mapper(modelReq.getModelDetail(), modelDetail); return modelDetail; } diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java index 52aaa3fe4..132b6ef93 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java @@ -307,10 +307,9 @@ public class S2VisitsDemo extends S2BaseDemo { metricReq.setDescription("停留时长"); metricReq.setClassifications(Collections.singletonList("核心指标")); MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams(); - metricTypeParams.setExpr("s2_stay_time_statis_stay_hours"); + metricTypeParams.setExpr("stay_hours"); List measures = new ArrayList<>(); - Measure measure = new Measure("停留时长", "s2_stay_time_statis_stay_hours", - AggOperatorEnum.SUM.getOperator(), 0); + Measure measure = new Measure("停留时长", "stay_hours", AggOperatorEnum.SUM.getOperator(), 0); measures.add(measure); metricTypeParams.setMeasures(measures); metricReq.setMetricDefineByMeasureParams(metricTypeParams); @@ -329,10 +328,9 @@ public class S2VisitsDemo extends S2BaseDemo { metricReq.setBizName("pv"); metricReq.setDescription("一段时间内用户的访问次数"); MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams(); - metricTypeParams.setExpr("s2_pv_uv_statis_pv"); + metricTypeParams.setExpr("pv"); List measures = new ArrayList<>(); - Measure measure = - new Measure("访问次数", "s2_pv_uv_statis_pv", AggOperatorEnum.SUM.getOperator(), 0); + Measure measure = new Measure("访问次数", "pv", AggOperatorEnum.SUM.getOperator(), 0); measures.add(measure); metricTypeParams.setMeasures(measures); metricReq.setMetricDefineByMeasureParams(metricTypeParams); diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/chat/MetricTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/chat/MetricTest.java index 32cd62f8f..93fa392cd 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/chat/MetricTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/chat/MetricTest.java @@ -60,6 +60,7 @@ public class MetricTest extends BaseTest { } @Test + @SetSystemProperty(key = "s2.test", value = "true") public void testMetricFilter() throws Exception { QueryResult actualResult = submitNewChat("alice的访问次数", agent.getId());