(improvement)(Headless) Development of the queryTagValue interface. (#837)

This commit is contained in:
lexluo09
2024-03-20 17:52:10 +08:00
committed by GitHub
parent ef298e8e85
commit 7fccc8d414
2 changed files with 39 additions and 39 deletions

View File

@@ -184,7 +184,7 @@ public class SqlGenerateUtils {
return whereClauseFromFilter; return whereClauseFromFilter;
} }
private String getDateWhereClause(DateConf dateInfo, ItemDateResp dateDate) { public String getDateWhereClause(DateConf dateInfo, ItemDateResp dateDate) {
if (Objects.isNull(dateDate) if (Objects.isNull(dateDate)
|| Strings.isEmpty(dateDate.getStartDate()) || Strings.isEmpty(dateDate.getStartDate())
&& Strings.isEmpty(dateDate.getEndDate())) { && Strings.isEmpty(dateDate.getEndDate())) {

View File

@@ -1,23 +1,19 @@
package com.tencent.supersonic.headless.server.service.impl; package com.tencent.supersonic.headless.server.service.impl;
import static com.tencent.supersonic.common.pojo.Constants.DESC_UPPER;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dim;
import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.ValueDistribution; import com.tencent.supersonic.headless.api.pojo.ValueDistribution;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType; import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.ItemValueReq; import com.tencent.supersonic.headless.api.pojo.request.ItemValueReq;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.response.ItemValueResp; import com.tencent.supersonic.headless.api.pojo.response.ItemValueResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; 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.ModelService;
import com.tencent.supersonic.headless.server.service.QueryService; import com.tencent.supersonic.headless.server.service.QueryService;
import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagMetaService;
@@ -25,7 +21,6 @@ import com.tencent.supersonic.headless.server.service.TagQueryService;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -48,12 +43,14 @@ public class TagQueryServiceImpl implements TagQueryService {
private final TagMetaService tagMetaService; private final TagMetaService tagMetaService;
private final QueryService queryService; private final QueryService queryService;
private final ModelService modelService; private final ModelService modelService;
private final SqlGenerateUtils sqlGenerateUtils;
public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService, public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService,
ModelService modelService) { ModelService modelService, SqlGenerateUtils sqlGenerateUtils) {
this.tagMetaService = tagMetaService; this.tagMetaService = tagMetaService;
this.queryService = queryService; this.queryService = queryService;
this.modelService = modelService; this.modelService = modelService;
this.sqlGenerateUtils = sqlGenerateUtils;
} }
@Override @Override
@@ -72,8 +69,8 @@ public class TagQueryServiceImpl implements TagQueryService {
// tag total count // tag total count
Long totalCount = queryTagTotalCount(tag, itemValueReq, user); Long totalCount = queryTagTotalCount(tag, itemValueReq, user);
// tag value // tag value
QueryStructReq queryStructReq = generateReq(tag, itemValueReq); QuerySqlReq querySqlReq = generateReq(tag, itemValueReq);
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, user); SemanticQueryResp semanticQueryResp = queryService.queryByReq(querySqlReq, user);
fillTagValueInfo(itemValueResp, semanticQueryResp, totalCount); fillTagValueInfo(itemValueResp, semanticQueryResp, totalCount);
return itemValueResp; return itemValueResp;
} }
@@ -111,7 +108,7 @@ public class TagQueryServiceImpl implements TagQueryService {
private String queryTagDateFromDbBySql(Dim dim, TagResp tag, User user) throws Exception { private String queryTagDateFromDbBySql(Dim dim, TagResp tag, User user) throws Exception {
String sqlPattern = "select max(%s) as %s from tbl where %s is not null"; String sqlPattern = "select max(%s) as %s from tbl where %s is not null";
String sql = String.format(sqlPattern, dim.getBizName(), maxDateAlias, tag.getBizName()); String sql = String.format(sqlPattern, TimeDimensionEnum.DAY.getName(), maxDateAlias, tag.getBizName());
Set<Long> modelIds = new HashSet<>(); Set<Long> modelIds = new HashSet<>();
modelIds.add(tag.getModelId()); modelIds.add(tag.getModelId());
QuerySqlReq querySqlReq = new QuerySqlReq(); QuerySqlReq querySqlReq = new QuerySqlReq();
@@ -137,17 +134,17 @@ public class TagQueryServiceImpl implements TagQueryService {
} }
private Long queryTagTotalCount(TagResp tag, ItemValueReq itemValueReq, User user) throws Exception { private Long queryTagTotalCount(TagResp tag, ItemValueReq itemValueReq, User user) throws Exception {
String sqlPattern = "select count(1) as %s from tbl where %s is not null %s";
String dateFilter = getDateFilter(itemValueReq);
String sql = String.format(sqlPattern, tagValueAlias, tag.getBizName(), dateFilter);
Set<Long> modelIds = new HashSet<>();
modelIds.add(tag.getModelId());
QuerySqlReq querySqlReq = new QuerySqlReq();
querySqlReq.setSql(sql);
querySqlReq.setNeedAuth(false);
querySqlReq.setModelIds(modelIds);
QueryStructReq queryStructReq = new QueryStructReq(); SemanticQueryResp semanticQueryResp = queryService.queryByReq(querySqlReq, user);
queryStructReq.addModelId(tag.getModelId());
queryStructReq.setLimit(1L);
List<Aggregator> aggregators = new ArrayList<>();
aggregators.add(new Aggregator(tag.getBizName(), AggOperatorEnum.COUNT, tagValueAlias));
queryStructReq.setAggregators(aggregators);
DateConf dateConf = generateDateConf(itemValueReq);
queryStructReq.setDateInfo(dateConf);
SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, user);
if (!CollectionUtils.isEmpty(semanticQueryResp.getResultList())) { if (!CollectionUtils.isEmpty(semanticQueryResp.getResultList())) {
Object total = semanticQueryResp.getResultList().get(0).get(tagValueAlias); Object total = semanticQueryResp.getResultList().get(0).get(tagValueAlias);
if (Objects.nonNull(total)) { if (Objects.nonNull(total)) {
@@ -159,6 +156,14 @@ public class TagQueryServiceImpl implements TagQueryService {
throw new RuntimeException("queryTagTotalCount error"); throw new RuntimeException("queryTagTotalCount error");
} }
private String getDateFilter(ItemValueReq itemValueReq) {
if (Objects.isNull(itemValueReq.getDateConf())) {
return "";
}
String dateWhereClause = sqlGenerateUtils.getDateWhereClause(itemValueReq.getDateConf(), null);
return " and " + dateWhereClause;
}
private void fillTagValueInfo(ItemValueResp itemValueResp, SemanticQueryResp semanticQueryResp, Long totalCount) { private void fillTagValueInfo(ItemValueResp itemValueResp, SemanticQueryResp semanticQueryResp, Long totalCount) {
List<ValueDistribution> valueDistributionList = new ArrayList<>(); List<ValueDistribution> valueDistributionList = new ArrayList<>();
List<Map<String, Object>> resultList = semanticQueryResp.getResultList(); List<Map<String, Object>> resultList = semanticQueryResp.getResultList();
@@ -176,24 +181,19 @@ public class TagQueryServiceImpl implements TagQueryService {
itemValueResp.setValueDistributionList(valueDistributionList); itemValueResp.setValueDistributionList(valueDistributionList);
} }
private QueryStructReq generateReq(TagResp tag, ItemValueReq itemValueReq) { private QuerySqlReq generateReq(TagResp tag, ItemValueReq itemValueReq) {
QueryStructReq queryStructReq = new QueryStructReq(); String sqlPattern = "select %s, count(1) as %s from tbl where %s is not null %s "
queryStructReq.addModelId(tag.getModelId()); + "group by %s order by %s desc";
queryStructReq.setGroups(new ArrayList<>(Arrays.asList(tag.getBizName()))); String sql = String.format(sqlPattern, tag.getBizName(), tagValueAlias, tag.getBizName(),
queryStructReq.setLimit(itemValueReq.getLimit()); getDateFilter(itemValueReq), tag.getBizName(), tag.getBizName());
List<Aggregator> aggregators = new ArrayList<>(); Set<Long> modelIds = new HashSet<>();
aggregators.add(new Aggregator(tag.getBizName(), AggOperatorEnum.COUNT, tagValueAlias)); modelIds.add(tag.getModelId());
queryStructReq.setAggregators(aggregators); QuerySqlReq querySqlReq = new QuerySqlReq();
querySqlReq.setSql(sql);
List<Order> orders = new ArrayList<>(); querySqlReq.setNeedAuth(false);
orders.add(new Order(String.format("count(%s)", tag.getBizName()), DESC_UPPER)); querySqlReq.setModelIds(modelIds);
queryStructReq.setOrders(orders); return querySqlReq;
DateConf dateConf = generateDateConf(itemValueReq);
queryStructReq.setDateInfo(dateConf);
return queryStructReq;
} }
private DateConf generateDateConf(ItemValueReq itemValueReq) { private DateConf generateDateConf(ItemValueReq itemValueReq) {