mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
(improvement)(headless)Refactor headless to abstract SemanticTranslator explicitly.
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user