mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-14 13:47:09 +00:00
[improvement][headless]Clean code logic of headless core.
This commit is contained in:
@@ -38,7 +38,7 @@ public class JdbcExecutor implements QueryExecutor {
|
||||
SqlUtils sqlUtils = ContextUtils.getBean(SqlUtils.class);
|
||||
String sql = StringUtils.normalizeSpace(queryStatement.getSql());
|
||||
log.info("executing SQL: {}", sql);
|
||||
Database database = queryStatement.getSemanticModel().getDatabase();
|
||||
Database database = queryStatement.getOntology().getDatabase();
|
||||
SemanticQueryResp queryResultWithColumns = new SemanticQueryResp();
|
||||
try {
|
||||
SqlUtils sqlUtil = sqlUtils.init(database);
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.tencent.supersonic.headless.core.pojo;
|
||||
|
||||
import com.tencent.supersonic.headless.api.pojo.QueryParam;
|
||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
@@ -29,7 +29,7 @@ public class QueryStatement {
|
||||
private String dataSetAlias;
|
||||
private String dataSetSimplifySql;
|
||||
private Boolean enableLimitWrapper = false;
|
||||
private SemanticModel semanticModel;
|
||||
private Ontology ontology;
|
||||
private SemanticSchemaResp semanticSchemaResp;
|
||||
private Integer limit = 1000;
|
||||
private Boolean isTranslated = false;
|
||||
|
||||
@@ -10,7 +10,7 @@ import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
|
||||
import com.tencent.supersonic.headless.core.pojo.DataSetQueryParam;
|
||||
import com.tencent.supersonic.headless.core.pojo.MetricQueryParam;
|
||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
||||
import com.tencent.supersonic.headless.core.translator.converter.QueryConverter;
|
||||
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -81,8 +81,8 @@ public class DefaultSemanticTranslator implements SemanticTranslator {
|
||||
private QueryStatement doParse(DataSetQueryParam dataSetQueryParam,
|
||||
QueryStatement queryStatement) {
|
||||
log.info("parse dataSetQuery [{}] ", dataSetQueryParam);
|
||||
SemanticModel semanticModel = queryStatement.getSemanticModel();
|
||||
EngineType engineType = EngineType.fromString(semanticModel.getDatabase().getType());
|
||||
Ontology ontology = queryStatement.getOntology();
|
||||
EngineType engineType = EngineType.fromString(ontology.getDatabase().getType());
|
||||
try {
|
||||
if (!CollectionUtils.isEmpty(dataSetQueryParam.getTables())) {
|
||||
List<String[]> tables = new ArrayList<>();
|
||||
@@ -158,7 +158,7 @@ public class DefaultSemanticTranslator implements SemanticTranslator {
|
||||
tableSql.setMinMaxTime(queryStatement.getMinMaxTime());
|
||||
tableSql.setEnableOptimize(queryStatement.getEnableOptimize());
|
||||
tableSql.setDataSetId(queryStatement.getDataSetId());
|
||||
tableSql.setSemanticModel(queryStatement.getSemanticModel());
|
||||
tableSql.setOntology(queryStatement.getOntology());
|
||||
if (isSingleMetricTable) {
|
||||
tableSql.setDataSetSql(dataSetQueryParam.getSql());
|
||||
tableSql.setDataSetAlias(metricTable.getAlias());
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.tencent.supersonic.headless.core.pojo.MetricQueryParam;
|
||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||
import com.tencent.supersonic.headless.core.translator.QueryParser;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.planner.AggPlanner;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.schema.RuntimeOptions;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.schema.S2SemanticSchema;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -25,16 +25,16 @@ public class CalciteQueryParser implements QueryParser {
|
||||
@Override
|
||||
public void parse(QueryStatement queryStatement, AggOption isAgg) throws Exception {
|
||||
MetricQueryParam metricReq = queryStatement.getMetricQueryParam();
|
||||
SemanticModel semanticModel = queryStatement.getSemanticModel();
|
||||
if (semanticModel == null) {
|
||||
Ontology ontology = queryStatement.getOntology();
|
||||
if (ontology == null) {
|
||||
queryStatement.setErrMsg("semanticSchema not found");
|
||||
return;
|
||||
}
|
||||
queryStatement.setMetricQueryParam(metricReq);
|
||||
S2SemanticSchema semanticSchema = getSemanticSchema(semanticModel, queryStatement);
|
||||
S2SemanticSchema semanticSchema = getSemanticSchema(ontology, queryStatement);
|
||||
AggPlanner aggPlanner = new AggPlanner(semanticSchema);
|
||||
aggPlanner.plan(queryStatement, isAgg);
|
||||
EngineType engineType = EngineType.fromString(semanticModel.getDatabase().getType());
|
||||
EngineType engineType = EngineType.fromString(ontology.getDatabase().getType());
|
||||
queryStatement.setSql(aggPlanner.getSql(engineType));
|
||||
if (Objects.nonNull(queryStatement.getEnableOptimize())
|
||||
&& queryStatement.getEnableOptimize()
|
||||
@@ -52,15 +52,14 @@ public class CalciteQueryParser implements QueryParser {
|
||||
}
|
||||
}
|
||||
|
||||
private S2SemanticSchema getSemanticSchema(SemanticModel semanticModel,
|
||||
QueryStatement queryStatement) {
|
||||
private S2SemanticSchema getSemanticSchema(Ontology ontology, QueryStatement queryStatement) {
|
||||
S2SemanticSchema semanticSchema =
|
||||
S2SemanticSchema.newBuilder(semanticModel.getSchemaKey()).build();
|
||||
semanticSchema.setSemanticModel(semanticModel);
|
||||
semanticSchema.setDatasource(semanticModel.getDatasourceMap());
|
||||
semanticSchema.setDimension(semanticModel.getDimensionMap());
|
||||
semanticSchema.setMetric(semanticModel.getMetrics());
|
||||
semanticSchema.setJoinRelations(semanticModel.getJoinRelations());
|
||||
S2SemanticSchema.newBuilder(ontology.getSchemaKey()).build();
|
||||
semanticSchema.setSemanticModel(ontology);
|
||||
semanticSchema.setDatasource(ontology.getDatasourceMap());
|
||||
semanticSchema.setDimension(ontology.getDimensionMap());
|
||||
semanticSchema.setMetric(ontology.getMetrics());
|
||||
semanticSchema.setJoinRelations(ontology.getJoinRelations());
|
||||
semanticSchema.setRuntimeOptions(
|
||||
RuntimeOptions.builder().minMaxTime(queryStatement.getMinMaxTime())
|
||||
.enableOptimize(queryStatement.getEnableOptimize()).build());
|
||||
|
||||
@@ -109,7 +109,7 @@ public class AggPlanner implements Planner {
|
||||
// build a parse Node
|
||||
parse();
|
||||
// optimizer
|
||||
Database database = queryStatement.getSemanticModel().getDatabase();
|
||||
Database database = queryStatement.getOntology().getDatabase();
|
||||
EngineType engineType = EngineType.fromString(database.getType());
|
||||
optimize(engineType);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Data
|
||||
public class SemanticModel {
|
||||
public class Ontology {
|
||||
|
||||
private String schemaKey;
|
||||
private List<Metric> metrics = new ArrayList<>();
|
||||
@@ -5,7 +5,7 @@ import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Ontology;
|
||||
import org.apache.calcite.schema.Schema;
|
||||
import org.apache.calcite.schema.SchemaVersion;
|
||||
import org.apache.calcite.schema.Table;
|
||||
@@ -21,7 +21,7 @@ public class S2SemanticSchema extends AbstractSchema {
|
||||
|
||||
private final Map<String, Table> tableMap;
|
||||
|
||||
private SemanticModel semanticModel = new SemanticModel();
|
||||
private Ontology ontology = new Ontology();
|
||||
|
||||
private List<JoinRelation> joinRelations;
|
||||
|
||||
@@ -40,12 +40,12 @@ public class S2SemanticSchema extends AbstractSchema {
|
||||
return schemaKey;
|
||||
}
|
||||
|
||||
public void setSemanticModel(SemanticModel semanticModel) {
|
||||
this.semanticModel = semanticModel;
|
||||
public void setSemanticModel(Ontology ontology) {
|
||||
this.ontology = ontology;
|
||||
}
|
||||
|
||||
public SemanticModel getSemanticModel() {
|
||||
return semanticModel;
|
||||
public Ontology getSemanticModel() {
|
||||
return ontology;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,35 +59,35 @@ public class S2SemanticSchema extends AbstractSchema {
|
||||
}
|
||||
|
||||
public Map<String, DataModel> getDatasource() {
|
||||
return semanticModel.getDatasourceMap();
|
||||
return ontology.getDatasourceMap();
|
||||
}
|
||||
|
||||
public void setDatasource(Map<String, DataModel> datasource) {
|
||||
semanticModel.setDatasourceMap(datasource);
|
||||
ontology.setDatasourceMap(datasource);
|
||||
}
|
||||
|
||||
public Map<String, List<Dimension>> getDimension() {
|
||||
return semanticModel.getDimensionMap();
|
||||
return ontology.getDimensionMap();
|
||||
}
|
||||
|
||||
public void setDimension(Map<String, List<Dimension>> dimensions) {
|
||||
semanticModel.setDimensionMap(dimensions);
|
||||
ontology.setDimensionMap(dimensions);
|
||||
}
|
||||
|
||||
public List<Metric> getMetrics() {
|
||||
return semanticModel.getMetrics();
|
||||
return ontology.getMetrics();
|
||||
}
|
||||
|
||||
public void setMetric(List<Metric> metric) {
|
||||
semanticModel.setMetrics(metric);
|
||||
ontology.setMetrics(metric);
|
||||
}
|
||||
|
||||
public void setMaterializationList(List<Materialization> materializationList) {
|
||||
semanticModel.setMaterializationList(materializationList);
|
||||
ontology.setMaterializationList(materializationList);
|
||||
}
|
||||
|
||||
public List<Materialization> getMaterializationList() {
|
||||
return semanticModel.getMaterializationList();
|
||||
return ontology.getMaterializationList();
|
||||
}
|
||||
|
||||
public void setJoinRelations(List<JoinRelation> joinRelations) {
|
||||
|
||||
@@ -97,7 +97,7 @@ public class CalculateAggConverter implements QueryConverter {
|
||||
|
||||
@Override
|
||||
public void convert(QueryStatement queryStatement) throws Exception {
|
||||
Database database = queryStatement.getSemanticModel().getDatabase();
|
||||
Database database = queryStatement.getOntology().getDatabase();
|
||||
DataSetQueryParam dataSetQueryParam = generateSqlCommend(queryStatement,
|
||||
EngineType.fromString(database.getType().toUpperCase()), database.getVersion());
|
||||
queryStatement.setDataSetQueryParam(dataSetQueryParam);
|
||||
|
||||
@@ -34,7 +34,7 @@ public class DefaultDimValueConverter implements QueryConverter {
|
||||
|
||||
@Override
|
||||
public void convert(QueryStatement queryStatement) {
|
||||
List<Dimension> dimensions = queryStatement.getSemanticModel().getDimensions().stream()
|
||||
List<Dimension> dimensions = queryStatement.getOntology().getDimensions().stream()
|
||||
.filter(dimension -> !CollectionUtils.isEmpty(dimension.getDefaultValues()))
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(dimensions)) {
|
||||
|
||||
@@ -60,7 +60,7 @@ public class ParserDefaultConverter implements QueryConverter {
|
||||
// support detail query
|
||||
if (queryParam.getQueryType().isNativeAggQuery()
|
||||
&& CollectionUtils.isEmpty(metricQueryParam.getMetrics())) {
|
||||
Map<Long, DataModel> modelMap = queryStatement.getSemanticModel().getModelMap();
|
||||
Map<Long, DataModel> modelMap = queryStatement.getOntology().getModelMap();
|
||||
for (Long modelId : modelMap.keySet()) {
|
||||
String modelBizName = modelMap.get(modelId).getName();
|
||||
String internalMetricName =
|
||||
|
||||
@@ -39,8 +39,8 @@ public class SqlVariableParseConverter implements QueryConverter {
|
||||
SqlVariableParseUtils.parse(modelResp.getModelDetail().getSqlQuery(),
|
||||
modelResp.getModelDetail().getSqlVariables(),
|
||||
queryStatement.getQueryParam().getParams());
|
||||
DataModel dataModel = queryStatement.getSemanticModel().getDatasourceMap()
|
||||
.get(modelResp.getBizName());
|
||||
DataModel dataModel =
|
||||
queryStatement.getOntology().getDatasourceMap().get(modelResp.getBizName());
|
||||
dataModel.setSqlQuery(sqlParsed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user