(improvement)(headless)Refactor headless to abstract SemanticTranslator explicitly.

This commit is contained in:
jerryjzhang
2024-06-21 20:20:22 +08:00
parent 5af76fa7dc
commit e293be3ebf
104 changed files with 469 additions and 574 deletions

View File

@@ -46,7 +46,7 @@ public class DimValueAspect {
@Autowired
private DimensionService dimensionService;
@Around("execution(* com.tencent.supersonic.headless.server.service.QueryService.queryByReq(..))")
@Around("execution(* com.tencent.supersonic.headless.server.service.SemanticLayerService.queryByReq(..))")
public Object handleDimValue(ProceedingJoinPoint joinPoint) throws Throwable {
if (!dimensionValueMapEnable) {
log.debug("dimensionValueMapEnable is false, skip dimensionValueMap");

View File

@@ -33,7 +33,7 @@ public class MetricDrillDownChecker {
@Autowired
private MetricService metricService;
@Around("execution(* com.tencent.supersonic.headless.core.parser.QueryParser.parse(..))")
@Around("execution(* com.tencent.supersonic.headless.core.translator.DefaultSemanticTranslator.parse(..))")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] objects = joinPoint.getArgs();
QueryStatement queryStatement = (QueryStatement) objects[0];

View File

@@ -7,19 +7,19 @@ import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataType;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DimensionTimeTypeParams;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.JoinRelation;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Materialization.TimePartType;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.MetricTypeParams;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel;
import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataType;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DimensionTimeTypeParams;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization.TimePartType;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.MetricTypeParams;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema;
import com.tencent.supersonic.headless.server.pojo.yaml.DataModelYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.DimensionTimeTypeParamsTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.DimensionYamlTpl;
@@ -29,7 +29,7 @@ import com.tencent.supersonic.headless.server.pojo.yaml.MeasureYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.MetricParamYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.MetricTypeParamsYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl;
import com.tencent.supersonic.headless.server.service.Catalog;
import com.tencent.supersonic.headless.server.service.CatalogService;
import com.tencent.supersonic.headless.server.utils.DatabaseConverter;
import java.util.ArrayList;
import java.util.HashMap;
@@ -51,9 +51,9 @@ import org.springframework.util.CollectionUtils;
@Service
public class SemanticSchemaManager {
private final Catalog catalog;
private final CatalogService catalog;
public SemanticSchemaManager(Catalog catalog) {
public SemanticSchemaManager(CatalogService catalog) {
this.catalog = catalog;
}

View File

@@ -13,7 +13,7 @@ import com.tencent.supersonic.headless.chat.QueryContext;
import com.tencent.supersonic.headless.chat.query.QueryManager;
import com.tencent.supersonic.headless.chat.query.SemanticQuery;
import com.tencent.supersonic.headless.chat.query.llm.s2sql.LLMSqlQuery;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -65,7 +65,7 @@ public class SqlInfoProcessor implements ResultProcessor {
}
semanticQuery.setParseInfo(parseInfo);
SemanticQueryReq semanticQueryReq = semanticQuery.buildSemanticQueryReq();
QueryService queryService = ContextUtils.getBean(QueryService.class);
SemanticLayerService queryService = ContextUtils.getBean(SemanticLayerService.class);
ExplainSqlReq<Object> explainSqlReq = ExplainSqlReq.builder().queryReq(semanticQueryReq)
.queryTypeEnum(QueryMethod.SQL).build();
ExplainResp explain = queryService.explain(explainSqlReq, queryContext.getUser());

View File

@@ -15,7 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.server.pojo.DimensionFilter;
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -38,7 +38,7 @@ public class DimensionController {
private DimensionService dimensionService;
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
/**

View File

@@ -5,7 +5,7 @@ import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.headless.api.pojo.request.QueryDataSetReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -24,7 +24,7 @@ public class DataSetQueryApiController {
@Autowired
private DataSetService dataSetService;
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
@PostMapping("/dataSet")
public Object queryByDataSet(@RequestBody QueryDataSetReq queryDataSetReq,

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryMetricReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.server.service.DownloadService;
import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -25,7 +25,7 @@ import javax.servlet.http.HttpServletResponse;
public class MetricQueryApiController {
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
@Autowired
private MetricService metricService;

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QuerySqlsReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.server.service.ChatQueryService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +30,7 @@ import java.util.stream.Collectors;
public class SqlQueryApiController {
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
@Autowired
private ChatQueryService chatQueryService;

View File

@@ -3,9 +3,10 @@ package com.tencent.supersonic.headless.server.rest.api;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -19,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
public class TagQueryApiController {
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
@PostMapping("/tag")
public Object queryByTag(@RequestBody QueryStructReq queryStructReq,

View File

@@ -18,7 +18,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
public interface Catalog {
public interface CatalogService {
DimensionResp getDimension(String bizName, Long modelId);

View File

@@ -14,7 +14,7 @@ import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
/***
* QueryService for query and search
* SemanticLayerService for query and search
*/
public interface ChatQueryService {

View File

@@ -1,6 +1,8 @@
package com.tencent.supersonic.headless.server.service;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq;
@@ -11,7 +13,12 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import java.util.List;
public interface QueryService {
public interface SemanticLayerService {
SemanticSchema getSemanticSchema();
DataSetSchema getDataSetSchema(Long id);
SemanticQueryResp queryByReq(SemanticQueryReq queryReq, User user) throws Exception;
//List<SemanticQueryResp> queryByReqs(List<SemanticQueryReq> queryReqs, User user) throws Exception;

View File

@@ -18,7 +18,7 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.pojo.yaml.DataModelYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.DimensionYamlTpl;
import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl;
import com.tencent.supersonic.headless.server.service.Catalog;
import com.tencent.supersonic.headless.server.service.CatalogService;
import com.tencent.supersonic.headless.server.service.DatabaseService;
import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.MetricService;
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
@Slf4j
@Component
public class CatalogImpl implements Catalog {
public class CatalogImpl implements CatalogService {
private final DatabaseService databaseService;
private final ModelService modelService;

View File

@@ -56,7 +56,7 @@ import com.tencent.supersonic.headless.server.persistence.dataobject.StatisticsD
import com.tencent.supersonic.headless.server.service.ChatContextService;
import com.tencent.supersonic.headless.server.service.ChatQueryService;
import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.service.WorkflowService;
import com.tencent.supersonic.headless.server.utils.ComponentFactory;
import lombok.extern.slf4j.Slf4j;
@@ -99,7 +99,7 @@ public class ChatQueryServiceImpl implements ChatQueryService {
@Autowired
private KnowledgeBaseService knowledgeBaseService;
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
@Autowired
private DataSetService dataSetService;
@Autowired

View File

@@ -28,7 +28,7 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.DownloadService;
import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
@@ -64,10 +64,10 @@ public class DownloadServiceImpl implements DownloadService {
private DimensionService dimensionService;
private QueryService queryService;
private SemanticLayerService queryService;
public DownloadServiceImpl(MetricService metricService,
DimensionService dimensionService, QueryService queryService) {
DimensionService dimensionService, SemanticLayerService queryService) {
this.metricService = metricService;
this.dimensionService = dimensionService;
this.queryService = queryService;

View File

@@ -21,7 +21,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.server.service.FlightService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.utils.FlightUtils;
import java.nio.charset.StandardCharsets;
import java.sql.ResultSet;
@@ -84,13 +84,13 @@ public class FlightServiceImpl extends BasicFlightSqlProducer implements FlightS
private final String nameHeaderKey = "name";
private final String passwordHeaderKey = "password";
private final Calendar defaultCalendar = JdbcToArrowUtils.getUtcCalendar();
private final QueryService queryService;
private final SemanticLayerService queryService;
private final AuthenticationConfig authenticationConfig;
private final UserService userService;
public FlightServiceImpl(QueryService queryService,
AuthenticationConfig authenticationConfig,
UserService userService) {
public FlightServiceImpl(SemanticLayerService queryService,
AuthenticationConfig authenticationConfig,
UserService userService) {
this.queryService = queryService;
this.authenticationConfig = authenticationConfig;

View File

@@ -5,8 +5,10 @@ import com.google.common.collect.Sets;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.Dim;
import com.tencent.supersonic.headless.api.pojo.QueryParam;
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq;
@@ -23,19 +25,16 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
import com.tencent.supersonic.headless.core.cache.QueryCache;
import com.tencent.supersonic.headless.core.executor.QueryExecutor;
import com.tencent.supersonic.headless.core.executor.accelerator.QueryAccelerator;
import com.tencent.supersonic.headless.core.parser.DefaultQueryParser;
import com.tencent.supersonic.headless.core.parser.QueryParser;
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel;
import com.tencent.supersonic.headless.core.planner.QueryPlanner;
import com.tencent.supersonic.headless.core.translator.SemanticTranslator;
import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel;
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
import com.tencent.supersonic.headless.server.annotation.S2DataPermission;
import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager;
import com.tencent.supersonic.headless.server.service.AppService;
import com.tencent.supersonic.headless.server.service.Catalog;
import com.tencent.supersonic.headless.server.service.CatalogService;
import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SchemaService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.utils.QueryReqConverter;
import com.tencent.supersonic.headless.server.utils.QueryUtils;
import com.tencent.supersonic.headless.server.utils.StatUtils;
@@ -51,37 +50,42 @@ import java.util.Objects;
@Service
@Slf4j
public class QueryServiceImpl implements QueryService {
public class SemanticLayerServiceImpl implements SemanticLayerService {
private StatUtils statUtils;
private final QueryUtils queryUtils;
private final QueryReqConverter queryReqConverter;
private final Catalog catalog;
private final AppService appService;
private final CatalogService catalog;
private final SemanticSchemaManager semanticSchemaManager;
private final QueryParser queryParser;
private final QueryPlanner queryPlanner;
private final DataSetService dataSetService;
private final SchemaService schemaService;
private final SemanticTranslator semanticTranslator;
public QueryServiceImpl(
public SemanticLayerServiceImpl(
StatUtils statUtils,
QueryUtils queryUtils,
QueryReqConverter queryReqConverter,
Catalog catalog,
AppService appService,
CatalogService catalog,
SemanticSchemaManager semanticSchemaManager,
DefaultQueryParser queryParser,
QueryPlanner queryPlanner,
DataSetService dataSetService) {
DataSetService dataSetService,
SchemaService schemaService,
SemanticTranslator semanticTranslator) {
this.statUtils = statUtils;
this.queryUtils = queryUtils;
this.queryReqConverter = queryReqConverter;
this.catalog = catalog;
this.appService = appService;
this.semanticSchemaManager = semanticSchemaManager;
this.queryParser = queryParser;
this.queryPlanner = queryPlanner;
this.dataSetService = dataSetService;
this.schemaService = schemaService;
this.semanticTranslator = semanticTranslator;
}
public SemanticSchema getSemanticSchema() {
return new SemanticSchema(schemaService.getDataSetSchema());
}
public DataSetSchema getDataSetSchema(Long id) {
return schemaService.getDataSetSchema(id);
}
@Override
@@ -179,7 +183,7 @@ public class QueryServiceImpl implements QueryService {
queryStatement.setModelIds(queryStructReq.getModelIds());
queryStatement.setSemanticModel(semanticModel);
queryStatement.setEnableOptimize(queryUtils.enableOptimize());
queryStatement = plan(queryStatement);
semanticTranslator.translate(queryStatement);
sqlParsers.add(queryStatement);
}
log.info("multi sqlParser:{}", sqlParsers);
@@ -210,11 +214,8 @@ public class QueryServiceImpl implements QueryService {
public <T> ExplainResp explain(ExplainSqlReq<T> explainSqlReq, User user) throws Exception {
T queryReq = explainSqlReq.getQueryReq();
QueryStatement queryStatement = buildQueryStatement((SemanticQueryReq) queryReq, user);
queryStatement = plan(queryStatement);
return getExplainResp(queryStatement);
}
semanticTranslator.translate(queryStatement);
private ExplainResp getExplainResp(QueryStatement queryStatement) {
String sql = "";
if (Objects.nonNull(queryStatement)) {
sql = queryStatement.getSql();
@@ -240,33 +241,20 @@ public class QueryServiceImpl implements QueryService {
return querySqlReq;
}
private QueryStatement plan(QueryStatement queryStatement) throws Exception {
queryParser.parse(queryStatement);
queryPlanner.plan(queryStatement);
return queryStatement;
}
private SemanticQueryResp query(QueryStatement queryStatement) throws Exception {
SemanticQueryResp semanticQueryResp = null;
try {
//1 parse
queryParser.parse(queryStatement);
//2 plan
QueryExecutor queryExecutor = queryPlanner.plan(queryStatement);
//3 accelerate
QueryAccelerator queryAccelerator = queryPlanner.accelerate(queryStatement);
if (queryAccelerator != null) {
semanticQueryResp = queryAccelerator.query(queryStatement);
if (Objects.nonNull(semanticQueryResp) && !semanticQueryResp.getResultList().isEmpty()) {
log.info("query by Accelerator {}", queryAccelerator.getClass().getSimpleName());
return semanticQueryResp;
//1 translate
semanticTranslator.translate(queryStatement);
//2 execute
for (QueryExecutor queryExecutor : ComponentFactory.getQueryExecutors()) {
if (queryExecutor.accept(queryStatement)) {
semanticQueryResp = queryExecutor.execute(queryStatement);
queryUtils.fillItemNameInfo(semanticQueryResp, queryStatement.getSemanticSchemaResp());
}
}
//4 execute
if (queryExecutor != null) {
semanticQueryResp = queryExecutor.execute(queryStatement);
queryUtils.fillItemNameInfo(semanticQueryResp, queryStatement.getSemanticSchemaResp());
}
return semanticQueryResp;
} catch (Exception e) {
log.error("exception in query, e: ", e);

View File

@@ -19,7 +19,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.service.SchemaService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -44,7 +44,7 @@ public class SemanticService {
private SchemaService schemaService;
@Autowired
private QueryService queryService;
private SemanticLayerService queryService;
public SemanticSchema getSemanticSchema() {
return new SemanticSchema(schemaService.getDataSetSchema());

View File

@@ -15,7 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils;
import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.service.TagMetaService;
import com.tencent.supersonic.headless.server.service.TagQueryService;
import lombok.extern.slf4j.Slf4j;
@@ -42,11 +42,11 @@ public class TagQueryServiceImpl implements TagQueryService {
private final String tagValueAlias = "internalTagCount";
private final String maxDateAlias = "internalMaxDate";
private final TagMetaService tagMetaService;
private final QueryService queryService;
private final SemanticLayerService queryService;
private final ModelService modelService;
private final SqlGenerateUtils sqlGenerateUtils;
public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService,
public TagQueryServiceImpl(TagMetaService tagMetaService, SemanticLayerService queryService,
ModelService modelService, SqlGenerateUtils sqlGenerateUtils) {
this.tagMetaService = tagMetaService;
this.queryService = queryService;

View File

@@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.List;
/**
* HeadlessConverter QueryOptimizer QueryExecutor object factory
* QueryConverter QueryOptimizer QueryExecutor object factory
*/
@Slf4j
public class ComponentFactory {

View File

@@ -38,7 +38,7 @@ import com.tencent.supersonic.headless.server.persistence.dataobject.DictTaskDO;
import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.service.TagMetaService;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -81,13 +81,13 @@ public class DictUtils {
private final DimensionService dimensionService;
private final MetricService metricService;
private final QueryService queryService;
private final SemanticLayerService queryService;
private final ModelService modelService;
private final TagMetaService tagMetaService;
public DictUtils(DimensionService dimensionService,
MetricService metricService,
QueryService queryService,
SemanticLayerService queryService,
ModelService modelService,
@Lazy TagMetaService tagMetaService) {
this.dimensionService = dimensionService;

View File

@@ -19,7 +19,7 @@ import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.service.Catalog;
import com.tencent.supersonic.headless.server.service.CatalogService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Triple;
@@ -62,12 +62,12 @@ public class QueryStructUtils {
private final DateModeUtils dateModeUtils;
private final SqlFilterUtils sqlFilterUtils;
private final Catalog catalog;
private final CatalogService catalog;
private String variablePrefix = "'${";
public QueryStructUtils(
DateModeUtils dateModeUtils,
SqlFilterUtils sqlFilterUtils, @Lazy Catalog catalog) {
SqlFilterUtils sqlFilterUtils, @Lazy CatalogService catalog) {
this.dateModeUtils = dateModeUtils;
this.sqlFilterUtils = sqlFilterUtils;

View File

@@ -4,8 +4,8 @@ import com.tencent.supersonic.common.pojo.ColumnOrder;
import com.tencent.supersonic.headless.api.pojo.enums.AggOption;
import com.tencent.supersonic.headless.api.pojo.enums.EngineType;
import com.tencent.supersonic.headless.api.pojo.response.SqlParserResp;
import com.tencent.supersonic.headless.core.parser.calcite.planner.AggPlanner;
import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema;
import com.tencent.supersonic.headless.core.translator.calcite.planner.AggPlanner;
import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema;
import com.tencent.supersonic.headless.core.pojo.MetricQueryParam;
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager;