(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;
}
private String getDateWhereClause(DateConf dateInfo, ItemDateResp dateDate) {
public String getDateWhereClause(DateConf dateInfo, ItemDateResp dateDate) {
if (Objects.isNull(dateDate)
|| Strings.isEmpty(dateDate.getStartDate())
&& Strings.isEmpty(dateDate.getEndDate())) {

View File

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