diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/ColumnSchema.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/ColumnSchema.java index 1940cdf36..51f6112c5 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/ColumnSchema.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/ColumnSchema.java @@ -15,7 +15,7 @@ public class ColumnSchema { private FieldType filedType; - private AggOperatorEnum agg = AggOperatorEnum.UNKNOWN; + private AggOperatorEnum agg = AggOperatorEnum.SUM; private String name; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlQueryConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlQueryConverter.java index 47ff61e2a..cee62013d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlQueryConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlQueryConverter.java @@ -61,13 +61,18 @@ public class SqlQueryConverter implements QueryConverter { List metricSchemas = getMetrics(semanticSchemaResp, allFields); List metrics = metricSchemas.stream().map(SchemaItem::getBizName).collect(Collectors.toList()); - AggOption aggOption = getAggOption(sqlQueryParam.getSql(), metricSchemas); Set dimensions = getDimensions(semanticSchemaResp, allFields); OntologyQueryParam ontologyQueryParam = new OntologyQueryParam(); ontologyQueryParam.getMetrics().addAll(metrics); ontologyQueryParam.getDimensions().addAll(dimensions); - ontologyQueryParam.setAggOption(aggOption); - ontologyQueryParam.setNativeQuery(!AggOption.isAgg(aggOption)); + AggOption sqlQueryAggOption = getAggOption(sqlQueryParam.getSql(), metricSchemas); + // if sql query itself has aggregation, ontology query just returns detail + if (sqlQueryAggOption.equals(AggOption.AGGREGATION)) { + ontologyQueryParam.setAggOption(AggOption.NATIVE); + } else if (sqlQueryAggOption.equals(AggOption.NATIVE) && !metrics.isEmpty()) { + ontologyQueryParam.setAggOption(AggOption.DEFAULT); + } + ontologyQueryParam.setNativeQuery(!AggOption.isAgg(ontologyQueryParam.getAggOption())); queryStatement.setOntologyQueryParam(ontologyQueryParam); generateDerivedMetric(sqlGenerateUtils, queryStatement); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/StructQueryConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/StructQueryConverter.java index ef89dce5c..c0c3d79e6 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/StructQueryConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/StructQueryConverter.java @@ -57,7 +57,11 @@ public class StructQueryConverter implements QueryConverter { .map(Aggregator::getColumn).collect(Collectors.toList())); String where = sqlGenerateUtils.generateWhere(structQueryParam, null); ontologyQueryParam.setWhere(where); - ontologyQueryParam.setAggOption(AggOption.AGGREGATION); + if (ontologyQueryParam.getMetrics().isEmpty()) { + ontologyQueryParam.setAggOption(AggOption.NATIVE); + } else { + ontologyQueryParam.setAggOption(AggOption.DEFAULT); + } ontologyQueryParam.setNativeQuery(structQueryParam.getQueryType().isNativeAggQuery()); ontologyQueryParam.setOrder(structQueryParam.getOrders().stream() .map(order -> new ColumnOrder(order.getColumn(), order.getDirection())) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/s2sql/OntologyQueryParam.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/s2sql/OntologyQueryParam.java index 10aea58c5..48b9a47ab 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/s2sql/OntologyQueryParam.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/s2sql/OntologyQueryParam.java @@ -15,6 +15,6 @@ public class OntologyQueryParam { private String where; private Long limit; private List order; - private boolean nativeQuery = false; - private AggOption aggOption = AggOption.DEFAULT; + private boolean nativeQuery = true; + private AggOption aggOption = AggOption.NATIVE; }