diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java index fa5076065..cacbdef2f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java @@ -59,13 +59,14 @@ public class QueryParser { List tables = new ArrayList<>(); Boolean isSingleTable = parseSqlReq.getTables().size() == 1; for (MetricTable metricTable : parseSqlReq.getTables()) { - String metricTableSql = parserSql(metricTable, isSingleTable, parseSqlReq, queryStatement); - if (isSingleTable) { - queryStatement.setSql(metricTableSql); + QueryStatement metricTableSql = parserSql(metricTable, isSingleTable, parseSqlReq, queryStatement); + if (isSingleTable && Objects.nonNull(metricTableSql.getViewSimplifySql()) + && !metricTableSql.getViewSimplifySql().isEmpty()) { + queryStatement.setSql(metricTableSql.getViewSimplifySql()); queryStatement.setParseSqlReq(parseSqlReq); return queryStatement; } - tables.add(new String[]{metricTable.getAlias(), metricTableSql}); + tables.add(new String[]{metricTable.getAlias(), metricTableSql.getSql()}); } if (!tables.isEmpty()) { String sql = ""; @@ -113,7 +114,7 @@ public class QueryParser { return queryStatement; } - private String parserSql(MetricTable metricTable, Boolean isSingleMetricTable, ParseSqlReq parseSqlReq, + private QueryStatement parserSql(MetricTable metricTable, Boolean isSingleMetricTable, ParseSqlReq parseSqlReq, QueryStatement queryStatement) throws Exception { MetricQueryReq metricReq = new MetricQueryReq(); metricReq.setMetrics(metricTable.getMetrics()); @@ -138,7 +139,7 @@ public class QueryParser { tableSql.getErrMsg())); } queryStatement.setSourceId(tableSql.getSourceId()); - return tableSql.getSql(); + return tableSql; } } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java index e9bceb208..bd1cd2b41 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java @@ -40,7 +40,7 @@ public class CalciteSqlParser implements SqlParser { getSqlByView(aggBuilder.getSql(), queryStatement.getViewSql(), queryStatement.getViewAlias())); if (Objects.nonNull(simplifySql) && !simplifySql.isEmpty()) { log.info("simplifySql [{}]", simplifySql); - queryStatement.setSql(simplifySql); + queryStatement.setViewSimplifySql(simplifySql); } } return queryStatement; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java index 5680b8420..3b87aa157 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java @@ -4,12 +4,11 @@ import com.tencent.supersonic.headless.api.request.MetricQueryReq; import com.tencent.supersonic.headless.api.request.ParseSqlReq; import com.tencent.supersonic.headless.api.request.QueryStructReq; import com.tencent.supersonic.headless.core.parser.calcite.s2sql.HeadlessModel; +import java.util.List; import lombok.Data; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Triple; -import java.util.List; - @Data public class QueryStatement { @@ -28,6 +27,7 @@ public class QueryStatement { private Triple minMaxTime; private String viewSql = ""; private String viewAlias = ""; + private String viewSimplifySql = ""; private HeadlessModel headlessModel;