mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 03:58:14 +00:00
(improvement)(Headless) Development of the queryTagValue interface. (#837)
This commit is contained in:
@@ -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())) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user