2 Commits

Author SHA1 Message Date
jerryjzhang
08a2e889e7 [feature][headless]Introduce TranslatorConfig to make result limit configurable via system parameter.
Some checks are pending
supersonic CentOS CI / build (21) (push) Waiting to run
supersonic mac CI / build (21) (push) Waiting to run
supersonic ubuntu CI / build (21) (push) Waiting to run
supersonic windows CI / build (21) (push) Waiting to run
2025-02-19 23:25:56 +08:00
jerryjzhang
87fa778416 [fix][launcher]Fix S2VisitsDemo to avoid broken demo. 2025-02-19 22:00:55 +08:00
4 changed files with 35 additions and 6 deletions

View File

@@ -0,0 +1,24 @@
package com.tencent.supersonic.headless.core.translator;
import com.google.common.collect.Lists;
import com.tencent.supersonic.common.config.ParameterConfig;
import com.tencent.supersonic.common.pojo.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("HeadlessTranslatorConfig")
@Slf4j
public class TranslatorConfig extends ParameterConfig {
public static final Parameter TRANSLATOR_RESULT_LIMIT =
new Parameter("s2.query-optimizer.resultLimit", "1000", "查询最大返回数据行数",
"为了前端展示性能考虑,请不要设置过大", "number", "语义翻译配置");
@Override
public List<Parameter> getSysParameters() {
return Lists.newArrayList(TRANSLATOR_RESULT_LIMIT);
}
}

View File

@@ -16,6 +16,6 @@ public class ResultLimitOptimizer implements QueryOptimizer {
@Override
public void rewrite(QueryStatement queryStatement) {
queryStatement.setSql(queryStatement.getSql() + " limit " + queryStatement.getLimit());
queryStatement.setSql(queryStatement.getSql() + " LIMIT " + queryStatement.getLimit());
}
}

View File

@@ -24,6 +24,7 @@ import com.tencent.supersonic.headless.core.pojo.QueryStatement;
import com.tencent.supersonic.headless.core.pojo.SqlQuery;
import com.tencent.supersonic.headless.core.pojo.StructQuery;
import com.tencent.supersonic.headless.core.translator.SemanticTranslator;
import com.tencent.supersonic.headless.core.translator.TranslatorConfig;
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
import com.tencent.supersonic.headless.server.annotation.S2DataPermission;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
@@ -59,6 +60,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
private final KnowledgeBaseService knowledgeBaseService;
private final MetricService metricService;
private final DimensionService dimensionService;
private final TranslatorConfig translatorConfig;
private final QueryCache queryCache = ComponentFactory.getQueryCache();
private final List<QueryExecutor> queryExecutors = ComponentFactory.getQueryExecutors();
@@ -67,7 +69,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
SchemaService schemaService, SemanticTranslator semanticTranslator,
MetricDrillDownChecker metricDrillDownChecker,
KnowledgeBaseService knowledgeBaseService, MetricService metricService,
DimensionService dimensionService) {
DimensionService dimensionService, TranslatorConfig translatorConfig) {
this.statUtils = statUtils;
this.queryUtils = queryUtils;
this.semanticSchemaManager = semanticSchemaManager;
@@ -78,6 +80,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
this.knowledgeBaseService = knowledgeBaseService;
this.metricService = metricService;
this.dimensionService = dimensionService;
this.translatorConfig = translatorConfig;
}
public DataSetSchema getDataSetSchema(Long id) {
@@ -300,6 +303,8 @@ public class S2SemanticLayerService implements SemanticLayerService {
QueryStatement queryStatement = new QueryStatement();
queryStatement.setEnableOptimize(queryUtils.enableOptimize());
queryStatement.setLimit(Integer.parseInt(translatorConfig.getParameterValue(
TranslatorConfig.TRANSLATOR_RESULT_LIMIT)));
queryStatement.setDataSetId(queryReq.getDataSetId());
queryStatement.setDataSetName(queryReq.getDataSetName());
queryStatement.setSemanticSchema(semanticSchemaResp);

View File

@@ -192,14 +192,14 @@ public class S2VisitsDemo extends S2BaseDemo {
modelReq.setAdminOrgs(Collections.emptyList());
List<Identify> identifiers = new ArrayList<>();
ModelDetail modelDetail = new ModelDetail();
identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 0));
identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 1));
modelDetail.setIdentifiers(identifiers);
List<Dimension> dimensions = new ArrayList<>();
Dimension dimension1 = new Dimension("数据日期", "imp_date", DimensionType.partition_time, 1);
dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1);
Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 0);
Dimension dimension2 = new Dimension("", "page", DimensionType.categorical, 1);
dimension2.setExpr("page");
dimensions.add(dimension2);
modelDetail.setDimensions(dimensions);
@@ -227,11 +227,11 @@ public class S2VisitsDemo extends S2BaseDemo {
modelReq.setAdminOrgs(Collections.emptyList());
List<Identify> identifiers = new ArrayList<>();
ModelDetail modelDetail = new ModelDetail();
identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 0));
identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 1));
modelDetail.setIdentifiers(identifiers);
List<Dimension> dimensions = new ArrayList<>();
Dimension dimension1 = new Dimension("数据日期", "imp_date", DimensionType.partition_time, 0);
Dimension dimension1 = new Dimension("数据日期", "imp_date", DimensionType.partition_time, 1);
dimension1.setTypeParams(new DimensionTimeTypeParams());
dimensions.add(dimension1);
Dimension dimension2 = new Dimension("页面", "visits_page", DimensionType.categorical, 1);