From 6c3370b0d23a3a4dfca654ce48f74f18c3089dfd Mon Sep 17 00:00:00 2001 From: daikon <1059907724@qq.com> Date: Wed, 13 Mar 2024 10:26:09 +0800 Subject: [PATCH] fix queryType error (#811) --- .../headless/server/utils/DictUtils.java | 18 ++++++++++++------ .../headless/server/utils/TagConverter.java | 7 ++++++- .../tencent/supersonic/headless/TagTest.java | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java index 4e4ba2485..b56def8ac 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java @@ -59,6 +59,14 @@ import static com.tencent.supersonic.common.pojo.Constants.COMMA; import static com.tencent.supersonic.common.pojo.Constants.POUND; import static com.tencent.supersonic.common.pojo.Constants.SPACE; +import com.tencent.supersonic.headless.server.service.TagMetaService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + @Slf4j @Component public class DictUtils { @@ -242,12 +250,10 @@ public class DictUtils { private SemanticQueryReq constructQueryReq(DictItemResp dictItemResp) { if (TypeEnums.DIMENSION.equals(dictItemResp.getType())) { QuerySqlReq querySqlReq = constructDimQueryReq(dictItemResp); - querySqlReq.setQueryType(QueryType.METRIC); return querySqlReq; } if (TypeEnums.TAG.equals(dictItemResp.getType())) { QuerySqlReq querySqlReq = constructTagQueryReq(dictItemResp); - querySqlReq.setQueryType(QueryType.TAG); return querySqlReq; } log.warn("constructQueryReq failed"); @@ -265,16 +271,17 @@ public class DictUtils { dictItemResp.getConfig().getLimit(); // todo 自定义指标 + Set modelIds = new HashSet<>(); String metric = "count(1)"; if (Objects.nonNull(dictItemResp.getConfig()) && Objects.nonNull(dictItemResp.getConfig().getMetricId())) { Long metricId = dictItemResp.getConfig().getMetricId(); MetricResp metricResp = metricService.getMetric(metricId); String metricBizName = metricResp.getBizName(); metric = String.format("sum(%s)", metricBizName); + modelIds.add(metricResp.getModelId()); } String sql = String.format(sqlPattern, bizName, metric, where, bizName, metric, limit); - Set modelIds = new HashSet<>(); modelIds.add(dictItemResp.getModelId()); QuerySqlReq querySqlReq = new QuerySqlReq(); querySqlReq.setSql(sql); @@ -295,7 +302,6 @@ public class DictUtils { } private QuerySqlReq constructQuerySqlReq(DictItemResp dictItemResp) { - // todo tag String sqlPattern = "select %s,count(1) from tbl %s group by %s order by count(1) desc limit %d"; String bizName = dictItemResp.getBizName(); @@ -319,8 +325,6 @@ public class DictUtils { QueryStructReq queryStructReq = new QueryStructReq(); Set modelIds = new HashSet<>(Arrays.asList(dictItemResp.getModelId())); - queryStructReq.setModelIds(modelIds); - List groups = new ArrayList<>(Arrays.asList(dictItemResp.getBizName())); queryStructReq.setGroups(groups); @@ -333,6 +337,8 @@ public class DictUtils { String metricBizName = metric.getBizName(); aggregators.add(new Aggregator(metricBizName, AggOperatorEnum.SUM)); queryStructReq.setAggregators(aggregators); + modelIds.add(metric.getModelId()); + queryStructReq.setModelIds(modelIds); List orders = new ArrayList<>(); orders.add(new Order(metricBizName, Constants.DESC_UPPER)); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/TagConverter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/TagConverter.java index ad2282232..7ab966b26 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/TagConverter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/TagConverter.java @@ -44,7 +44,12 @@ public class TagConverter { SemanticSchemaResp semanticSchemaResp) throws Exception { QueryStatement queryStatement = new QueryStatement(); // covert to QueryReqConverter - BeanUtils.copyProperties(queryStructReq.convert(), queryStructReq); + QueryStructReq queryStructReq = new QueryStructReq(); + BeanUtils.copyProperties(queryTagReq, queryStructReq); + // queryStructReq.setModelIds(queryTagReq.getModelIdSet()); + if (!CollectionUtils.isEmpty(queryTagReq.getTagFilters())) { + queryStructReq.setDimensionFilters(queryTagReq.getTagFilters()); + } QuerySqlReq querySqlReq = queryStructReq.convert(); convert(querySqlReq, semanticSchemaResp, queryStatement, queryStructReq); QueryParam queryParam = new QueryParam(); diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java index 3d9384fce..b8c01eb3e 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java @@ -102,6 +102,7 @@ public class TagTest extends BaseTest { TagResp tag = queryTagRespByBizName(bizName); ItemValueReq itemValueReq = new ItemValueReq(); itemValueReq.setItemId(tag.getId()); + // tagQueryService.queryTagValue(itemValueReq, User.getFakeUser()); tagMetaService.delete(tag.getId(), User.getFakeUser()); }