From a0a9dad854646e9ffcfe1655ca9f839cee14b43e Mon Sep 17 00:00:00 2001 From: daikon <1059907724@qq.com> Date: Wed, 13 Mar 2024 19:05:27 +0800 Subject: [PATCH] (improvement)(headless) add checkTag when query tagValue and opt tag convert (#814) --- .../supersonic/headless/api/pojo/request/QuerySqlReq.java | 3 ++- .../headless/api/pojo/request/SemanticQueryReq.java | 3 --- .../headless/server/service/impl/TagMetaServiceImpl.java | 1 - .../headless/server/service/impl/TagQueryServiceImpl.java | 8 ++++++++ .../supersonic/headless/server/utils/DictUtils.java | 3 +++ .../supersonic/headless/server/utils/TagConverter.java | 1 + .../java/com/tencent/supersonic/headless/TagTest.java | 4 ++-- 7 files changed, 16 insertions(+), 7 deletions(-) diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QuerySqlReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QuerySqlReq.java index c2a3c378d..a1304f04b 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QuerySqlReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/QuerySqlReq.java @@ -1,12 +1,13 @@ package com.tencent.supersonic.headless.api.pojo.request; +import com.tencent.supersonic.common.pojo.enums.QueryType; import lombok.Data; import lombok.ToString; @Data @ToString public class QuerySqlReq extends SemanticQueryReq { - + private QueryType queryType; private String sql; @Override diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/SemanticQueryReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/SemanticQueryReq.java index 3f2ab6e21..19976b134 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/SemanticQueryReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/SemanticQueryReq.java @@ -1,7 +1,6 @@ package com.tencent.supersonic.headless.api.pojo.request; import com.google.common.collect.Lists; -import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.headless.api.pojo.Cache; import com.tencent.supersonic.headless.api.pojo.Param; import lombok.Data; @@ -24,8 +23,6 @@ public abstract class SemanticQueryReq { protected String dataSetName; - protected QueryType queryType; - protected Set modelIds = new HashSet<>(); protected List params = new ArrayList<>(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java index 96e39764f..e28c44004 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java @@ -240,7 +240,6 @@ public class TagMetaServiceImpl implements TagMetaService { num += loadDimTagBatch(tagLoadReq, dimensions, user); } if (Objects.isNull(tagLoadReq.getType()) || SchemaElementType.METRIC.equals(tagLoadReq.getType())) { - List metrics = metricService.getMetrics(metaFilter); num += loadMetricTagBatch(tagLoadReq, metrics, user); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java index 5a5345ed0..d9c383232 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java @@ -8,6 +8,7 @@ import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; 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.QueryTagReq; @@ -62,6 +63,7 @@ public class TagQueryServiceImpl implements TagQueryService { itemValueResp.setItemId(itemValueReq.getItemId()); itemValueResp.setType(SchemaElementType.TAG); TagResp tag = tagMetaService.getTag(itemValueReq.getItemId(), user); + checkTag(tag); itemValueResp.setName(tag.getName()); itemValueResp.setBizName(tag.getBizName()); correctDateConf(itemValueReq, tag, user); @@ -74,6 +76,12 @@ public class TagQueryServiceImpl implements TagQueryService { return itemValueResp; } + private void checkTag(TagResp tag) throws Exception { + if (Objects.nonNull(tag) && TagDefineType.METRIC.equals(tag.getTagDefineType())) { + throw new Exception("do not support value distribution query for tag: " + tag.getBizName()); + } + } + private void correctDateConf(ItemValueReq itemValueReq, TagResp tag, User user) throws Exception { if (Objects.nonNull(itemValueReq.getDateConf())) { return; 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 7bbf66779..2529a9d09 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 @@ -9,6 +9,7 @@ import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; +import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; @@ -241,10 +242,12 @@ 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"); 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 096a54eb7..720e94f6f 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 @@ -101,6 +101,7 @@ public class TagConverter { // covert to QueryReqConverter QueryStructReq queryStructReq = new QueryStructReq(); BeanUtils.copyProperties(queryTagReq, queryStructReq); + queryStructReq.setModelIds(queryTagReq.getModelIdSet()); if (!CollectionUtils.isEmpty(queryTagReq.getTagFilters())) { queryStructReq.setDimensionFilters(queryTagReq.getTagFilters()); } 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 b8c01eb3e..54926be70 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 @@ -96,13 +96,13 @@ public class TagTest extends BaseTest { } @Test - void testTagValue() throws Exception { + void testTagValue() { TagReq tagReq = newTagReq(); tagMetaService.create(tagReq, User.getFakeUser()); TagResp tag = queryTagRespByBizName(bizName); ItemValueReq itemValueReq = new ItemValueReq(); itemValueReq.setItemId(tag.getId()); - // tagQueryService.queryTagValue(itemValueReq, User.getFakeUser()); + // ItemValueResp itemValueResp = tagQueryService.queryTagValue(itemValueReq, User.getFakeUser()); tagMetaService.delete(tag.getId(), User.getFakeUser()); }