(improvement)(headless) add simplify optimizer enable conf (#620)

This commit is contained in:
jipeli
2024-01-11 21:37:35 +08:00
committed by GitHub
parent 4322ae42ac
commit 3436b36552
3 changed files with 10 additions and 9 deletions

View File

@@ -59,13 +59,14 @@ public class QueryParser {
List<String[]> tables = new ArrayList<>(); List<String[]> tables = new ArrayList<>();
Boolean isSingleTable = parseSqlReq.getTables().size() == 1; Boolean isSingleTable = parseSqlReq.getTables().size() == 1;
for (MetricTable metricTable : parseSqlReq.getTables()) { for (MetricTable metricTable : parseSqlReq.getTables()) {
String metricTableSql = parserSql(metricTable, isSingleTable, parseSqlReq, queryStatement); QueryStatement metricTableSql = parserSql(metricTable, isSingleTable, parseSqlReq, queryStatement);
if (isSingleTable) { if (isSingleTable && Objects.nonNull(metricTableSql.getViewSimplifySql())
queryStatement.setSql(metricTableSql); && !metricTableSql.getViewSimplifySql().isEmpty()) {
queryStatement.setSql(metricTableSql.getViewSimplifySql());
queryStatement.setParseSqlReq(parseSqlReq); queryStatement.setParseSqlReq(parseSqlReq);
return queryStatement; return queryStatement;
} }
tables.add(new String[]{metricTable.getAlias(), metricTableSql}); tables.add(new String[]{metricTable.getAlias(), metricTableSql.getSql()});
} }
if (!tables.isEmpty()) { if (!tables.isEmpty()) {
String sql = ""; String sql = "";
@@ -113,7 +114,7 @@ public class QueryParser {
return queryStatement; return queryStatement;
} }
private String parserSql(MetricTable metricTable, Boolean isSingleMetricTable, ParseSqlReq parseSqlReq, private QueryStatement parserSql(MetricTable metricTable, Boolean isSingleMetricTable, ParseSqlReq parseSqlReq,
QueryStatement queryStatement) throws Exception { QueryStatement queryStatement) throws Exception {
MetricQueryReq metricReq = new MetricQueryReq(); MetricQueryReq metricReq = new MetricQueryReq();
metricReq.setMetrics(metricTable.getMetrics()); metricReq.setMetrics(metricTable.getMetrics());
@@ -138,7 +139,7 @@ public class QueryParser {
tableSql.getErrMsg())); tableSql.getErrMsg()));
} }
queryStatement.setSourceId(tableSql.getSourceId()); queryStatement.setSourceId(tableSql.getSourceId());
return tableSql.getSql(); return tableSql;
} }
} }

View File

@@ -40,7 +40,7 @@ public class CalciteSqlParser implements SqlParser {
getSqlByView(aggBuilder.getSql(), queryStatement.getViewSql(), queryStatement.getViewAlias())); getSqlByView(aggBuilder.getSql(), queryStatement.getViewSql(), queryStatement.getViewAlias()));
if (Objects.nonNull(simplifySql) && !simplifySql.isEmpty()) { if (Objects.nonNull(simplifySql) && !simplifySql.isEmpty()) {
log.info("simplifySql [{}]", simplifySql); log.info("simplifySql [{}]", simplifySql);
queryStatement.setSql(simplifySql); queryStatement.setViewSimplifySql(simplifySql);
} }
} }
return queryStatement; return queryStatement;

View File

@@ -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.ParseSqlReq;
import com.tencent.supersonic.headless.api.request.QueryStructReq; import com.tencent.supersonic.headless.api.request.QueryStructReq;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.HeadlessModel; import com.tencent.supersonic.headless.core.parser.calcite.s2sql.HeadlessModel;
import java.util.List;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Triple; import org.apache.commons.lang3.tuple.Triple;
import java.util.List;
@Data @Data
public class QueryStatement { public class QueryStatement {
@@ -28,6 +27,7 @@ public class QueryStatement {
private Triple<String, String, String> minMaxTime; private Triple<String, String, String> minMaxTime;
private String viewSql = ""; private String viewSql = "";
private String viewAlias = ""; private String viewAlias = "";
private String viewSimplifySql = "";
private HeadlessModel headlessModel; private HeadlessModel headlessModel;