From e6f2ce259863da1413dccf645196d6460ccee82b Mon Sep 17 00:00:00 2001 From: lexluo09 <39718951+lexluo09@users.noreply.github.com> Date: Wed, 11 Oct 2023 23:51:09 +0800 Subject: [PATCH] (improvement)(chat) if there is no group by in dsl,set MetricTable's aggOption to NATIVE (#195) --- .../execute/EntityInfoExecuteResponder.java | 6 ++++-- .../parser/convert/QueryReqConverter.java | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/responder/execute/EntityInfoExecuteResponder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/responder/execute/EntityInfoExecuteResponder.java index 2b5d67230..c827071e1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/responder/execute/EntityInfoExecuteResponder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/responder/execute/EntityInfoExecuteResponder.java @@ -22,9 +22,9 @@ public class EntityInfoExecuteResponder implements ExecuteResponder { } SemanticService semanticService = ContextUtils.getBean(SemanticService.class); User user = queryReq.getUser(); - queryResult.setEntityInfo(semanticService.getEntityInfo(semanticParseInfo, user)); + EntityInfo entityInfo = semanticService.getEntityInfo(semanticParseInfo, user); + queryResult.setEntityInfo(entityInfo); - EntityInfo entityInfo = semanticService.getEntityInfo(semanticParseInfo.getModelId()); if (Objects.isNull(entityInfo) || Objects.isNull(entityInfo.getModelInfo()) || Objects.isNull(entityInfo.getModelInfo().getPrimaryEntityName())) { return; @@ -36,6 +36,8 @@ public class EntityInfoExecuteResponder implements ExecuteResponder { boolean existPrimaryEntityName = queryResult.getQueryColumns().stream() .anyMatch(queryColumn -> primaryEntityBizName.equals(queryColumn.getNameEn())); + semanticParseInfo.setNativeQuery(existPrimaryEntityName); + if (!existPrimaryEntityName) { return; } diff --git a/semantic/query/src/main/java/com/tencent/supersonic/semantic/query/parser/convert/QueryReqConverter.java b/semantic/query/src/main/java/com/tencent/supersonic/semantic/query/parser/convert/QueryReqConverter.java index 8952df501..2c2c6592a 100644 --- a/semantic/query/src/main/java/com/tencent/supersonic/semantic/query/parser/convert/QueryReqConverter.java +++ b/semantic/query/src/main/java/com/tencent/supersonic/semantic/query/parser/convert/QueryReqConverter.java @@ -8,6 +8,7 @@ import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem; import com.tencent.supersonic.semantic.api.model.request.SqlExecuteReq; import com.tencent.supersonic.semantic.api.model.response.DatabaseResp; import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp; +import com.tencent.supersonic.semantic.api.query.enums.AggOption; import com.tencent.supersonic.semantic.api.query.pojo.MetricTable; import com.tencent.supersonic.semantic.api.query.request.ParseSqlReq; import com.tencent.supersonic.semantic.api.query.request.QueryDslReq; @@ -49,10 +50,6 @@ public class QueryReqConverter { private Catalog catalog; public QueryStatement convert(QueryDslReq databaseReq, ModelSchemaResp modelSchemaResp) throws Exception { - - List tables = new ArrayList<>(); - MetricTable metricTable = new MetricTable(); - if (Objects.isNull(modelSchemaResp)) { return new QueryStatement(); } @@ -64,14 +61,13 @@ public class QueryReqConverter { correctTableName(databaseReq); String tableName = SqlParserSelectHelper.getTableName(databaseReq.getSql()); - if (StringUtils.isEmpty(tableName)) { return new QueryStatement(); } - + //4.build MetricTables List allFields = SqlParserSelectHelper.getAllFields(databaseReq.getSql()); - List metrics = getMetrics(modelSchemaResp, allFields); + MetricTable metricTable = new MetricTable(); metricTable.setMetrics(metrics); Set dimensions = getDimensions(modelSchemaResp, allFields); @@ -85,8 +81,13 @@ public class QueryReqConverter { queryStructUtils.generateInternalMetricName(databaseReq.getModelId(), metricTable.getDimensions())))); } + // if there is no group by in dsl,set MetricTable's aggOption to "NATIVE" + if (!SqlParserSelectHelper.hasGroupBy(databaseReq.getSql())) { + metricTable.setAggOption(AggOption.NATIVE); + } + List tables = new ArrayList<>(); tables.add(metricTable); - + //4.build ParseSqlReq ParseSqlReq result = new ParseSqlReq(); BeanUtils.copyProperties(databaseReq, result); result.setRootPath(domainService.getModelFullPathMap().get(databaseReq.getModelId())); @@ -97,7 +98,7 @@ public class QueryReqConverter { result.setSupportWith(false); result.setWithAlias(false); } - + //5.physicalSql by ParseSqlReq QueryStatement queryStatement = parserService.physicalSql(result); queryStatement.setSql(String.format(SqlExecuteReq.LIMIT_WRAPPER, queryStatement.getSql())); return queryStatement;