diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaItem.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaItem.java index 532a17be6..29aa91e50 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaItem.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaItem.java @@ -41,14 +41,13 @@ public class SchemaItem extends RecordInfo { } SchemaItem that = (SchemaItem) o; return Objects.equal(id, that.id) && Objects.equal(name, that.name) - && Objects.equal(bizName, that.bizName) && Objects.equal( - description, that.description) && Objects.equal(status, that.status) - && typeEnum == that.typeEnum && Objects.equal(sensitiveLevel, that.sensitiveLevel); + && Objects.equal(bizName, that.bizName) + && typeEnum == that.typeEnum; } @Override public int hashCode() { - return Objects.hashCode(id, name, bizName, description, status, typeEnum, sensitiveLevel); + return Objects.hashCode(id, name, bizName, typeEnum); } public static List getAliasList(String alias) { diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java index f875d4c17..a2278b7a1 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java @@ -14,6 +14,7 @@ import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -87,4 +88,19 @@ public class ModelResp extends SchemaItem { return fieldSet; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), domainId); + } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/S2DataPermissionAspect.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/S2DataPermissionAspect.java index cb92de213..7d17af2a5 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/S2DataPermissionAspect.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/S2DataPermissionAspect.java @@ -201,21 +201,20 @@ public class S2DataPermissionAspect { } } - private void doFilterCheckLogic(QueryStructReq queryStructReq, Set resAuthName, - Set sensitiveResReq) { + private void doFilterCheckLogic(Set resAuthName, Set sensitiveResReq, + List modelIdInDataSet, QueryStructReq queryStructReq) { Set resFilterSet = queryStructUtils.getFilterResNameEnExceptInternalCol(queryStructReq); Set need2Apply = resFilterSet.stream() .filter(res -> !resAuthName.contains(res) && sensitiveResReq.contains(res)).collect(Collectors.toSet()); Set nameCnSet = new HashSet<>(); - - Map modelRespMap = modelService.getModelMap(); - List modelIds = Lists.newArrayList(queryStructReq.getModelIds()); - List dimensionDescList = dimensionService.getDimensions(new MetaFilter(modelIds)); + ModelFilter modelFilter = new ModelFilter(false, modelIdInDataSet); + Map modelRespMap = modelService.getModelMap(modelFilter); + List dimensionDescList = dimensionService.getDimensions(new MetaFilter(modelIdInDataSet)); dimensionDescList.stream().filter(dim -> need2Apply.contains(dim.getBizName())) .forEach(dim -> nameCnSet.add(modelRespMap.get(dim.getModelId()).getName() + MINUS + dim.getName())); if (!CollectionUtils.isEmpty(need2Apply)) { - List admins = modelService.getModelAdmin(modelIds.get(0)); + List admins = modelService.getModelAdmin(modelIdInDataSet.get(0)); log.info("in doFilterLogic, need2Apply:{}", need2Apply); String message = String.format("您没有以下维度%s权限, 请联系管理员%s开通", nameCnSet, admins); throw new InvalidPermissionException(message); @@ -247,7 +246,7 @@ public class S2DataPermissionAspect { Set resAuthSet = getAuthResNameSet(authorizedResource, modelIdInDataSet); // if sensitive fields without permission are involved in filter, thrown an exception - doFilterCheckLogic(queryStructReq, resAuthSet, sensitiveResReq); + doFilterCheckLogic(resAuthSet, sensitiveResReq, modelIdInDataSet, queryStructReq); // row permission pre-filter doRowPermission(queryStructReq, authorizedResource); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/ModelRepositoryImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/ModelRepositoryImpl.java index c06ad0b53..7b03f1ca4 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/ModelRepositoryImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/ModelRepositoryImpl.java @@ -50,6 +50,9 @@ public class ModelRepositoryImpl implements ModelRepository { if (!CollectionUtils.isEmpty(modelFilter.getIds())) { wrapper.lambda().in(ModelDO::getId, modelFilter.getIds()); } + if (modelFilter.getIncludesDetail() != null && !modelFilter.getIncludesDetail()) { + wrapper.select(ModelDO.class, modelDO -> !modelDO.getColumn().equals("model_detail")); + } return modelDOMapper.selectList(wrapper); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelFilter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelFilter.java index 1f59cb139..05c1235eb 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelFilter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelFilter.java @@ -11,4 +11,19 @@ public class ModelFilter extends MetaFilter { private List domainIds; + private Boolean includesDetail = true; + + public ModelFilter() { + + } + + public ModelFilter(Boolean includesDetail) { + this.includesDetail = includesDetail; + } + + public ModelFilter(Boolean includesDetail, List ids) { + this.includesDetail = includesDetail; + this.setIds(ids); + } + } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ModelService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ModelService.java index fe7d9d5d0..399a95eea 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ModelService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ModelService.java @@ -11,6 +11,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.UnAvailableItemResp; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; import java.util.List; import java.util.Map; @@ -23,7 +24,7 @@ public interface ModelService { List getModelList(MetaFilter metaFilter); - Map getModelMap(); + Map getModelMap(ModelFilter modelFilter); void deleteModel(Long id, User user); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java index d75e8034e..0cd2f2297 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java @@ -99,6 +99,7 @@ public class DatabaseServiceImpl implements DatabaseService { public void deleteDatabase(Long databaseId) { ModelFilter modelFilter = new ModelFilter(); modelFilter.setDatabaseId(databaseId); + modelFilter.setIncludesDetail(false); List modelResps = datasourceService.getModelList(modelFilter); if (!CollectionUtils.isEmpty(modelResps)) { List datasourceNames = modelResps.stream() diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java index 23810e5f6..5fe1ff925 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java @@ -34,6 +34,7 @@ import com.tencent.supersonic.headless.server.persistence.repository.DimensionRe import com.tencent.supersonic.headless.server.pojo.DimensionFilter; import com.tencent.supersonic.headless.server.pojo.DimensionsFilter; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DatabaseService; @@ -221,7 +222,7 @@ public class DimensionServiceImpl implements DimensionService { .doSelectPageInfo(() -> queryDimension(dimensionFilter)); PageInfo pageInfo = new PageInfo<>(); BeanUtils.copyProperties(dimensionDOPageInfo, pageInfo); - pageInfo.setList(convertList(dimensionDOPageInfo.getList(), modelService.getModelMap())); + pageInfo.setList(convertList(dimensionDOPageInfo.getList())); return pageInfo; } @@ -232,7 +233,7 @@ public class DimensionServiceImpl implements DimensionService { @Override public List queryDimensions(DimensionsFilter dimensionsFilter) { List dimensions = dimensionRepository.getDimensions(dimensionsFilter); - return convertList(dimensions, modelService.getModelMap()); + return convertList(dimensions); } @Override @@ -240,7 +241,7 @@ public class DimensionServiceImpl implements DimensionService { DimensionFilter dimensionFilter = new DimensionFilter(); BeanUtils.copyProperties(metaFilter, dimensionFilter); List dimensionDOS = dimensionRepository.getDimension(dimensionFilter); - List dimensionResps = convertList(dimensionDOS, modelService.getModelMap()); + List dimensionResps = convertList(dimensionDOS); List dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId()) .collect(Collectors.toList()); @@ -298,13 +299,16 @@ public class DimensionServiceImpl implements DimensionService { return getDimensions(dimensionFilter); } - private List convertList(List dimensionDOS, - Map modelRespMap) { + private List convertList(List dimensionDOS) { + List modelIds = dimensionDOS.stream().map(DimensionDO::getModelId) + .collect(Collectors.toList()); + ModelFilter modelFilter = new ModelFilter(false, modelIds); + Map modelMap = modelService.getModelMap(modelFilter); List dimensionResps = Lists.newArrayList(); if (!CollectionUtils.isEmpty(dimensionDOS)) { dimensionResps = dimensionDOS.stream() .map(dimensionDO -> DimensionConverter - .convert2DimensionResp(dimensionDO, modelRespMap)) + .convert2DimensionResp(dimensionDO, modelMap)) .collect(Collectors.toList()); } fillTagInfo(dimensionResps); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index 9478ed685..f00715621 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -46,6 +46,7 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.pojo.MetricFilter; import com.tencent.supersonic.headless.server.pojo.MetricsFilter; import com.tencent.supersonic.headless.server.pojo.ModelCluster; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.service.CollectService; import com.tencent.supersonic.headless.server.service.DataSetService; @@ -401,7 +402,9 @@ public class MetricServiceImpl implements MetricService { if (metricDO == null) { return null; } - Map modelMap = modelService.getModelMap(); + ModelFilter modelFilter = new ModelFilter(false, + Lists.newArrayList(metricDO.getModelId())); + Map modelMap = modelService.getModelMap(modelFilter); List collectList = collectService.getCollectList(user.getName()); List collect = collectList.stream().map(CollectDO::getCollectId).collect(Collectors.toList()); MetricResp metricResp = MetricConverter.convert2MetricResp(metricDO, modelMap, collect); @@ -526,8 +529,10 @@ public class MetricServiceImpl implements MetricService { private List convertList(List metricDOS, List collect) { List metricResps = Lists.newArrayList(); - - Map modelMap = modelService.getModelMap(); + List modelIds = metricDOS.stream().map(MetricDO::getModelId) + .collect(Collectors.toList()); + ModelFilter modelFilter = new ModelFilter(false, modelIds); + Map modelMap = modelService.getModelMap(modelFilter); if (!CollectionUtils.isEmpty(metricDOS)) { metricResps = metricDOS.stream() .map(metricDO -> MetricConverter.convert2MetricResp(metricDO, modelMap, collect)) @@ -584,7 +589,9 @@ public class MetricServiceImpl implements MetricService { //3. choose ModelCluster Set modelIds = getModelIds(modelIdsByDomainId, metricResps, dimensionResps); ModelCluster modelCluster = getModelCluster(metricResps, modelIds); - + if (modelCluster == null) { + throw new IllegalArgumentException("Invalid input parameters, unable to obtain valid metrics"); + } //4. set groups List dimensionBizNames = dimensionResps.stream() .filter(entry -> modelCluster.getModelIds().contains(entry.getModelId())) @@ -604,7 +611,7 @@ public class MetricServiceImpl implements MetricService { List metricBizNames = metricResps.stream() .filter(entry -> modelCluster.getModelIds().contains(entry.getModelId())) .map(SchemaItem::getBizName).collect(Collectors.toList()); - if (org.apache.commons.collections.CollectionUtils.isEmpty(metricBizNames)) { + if (CollectionUtils.isEmpty(metricBizNames)) { throw new IllegalArgumentException("Invalid input parameters, unable to obtain valid metrics"); } List aggregators = new ArrayList<>(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java index 0469fa104..13b637f52 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java @@ -154,9 +154,9 @@ public class ModelServiceImpl implements ModelService { } @Override - public Map getModelMap() { + public Map getModelMap(ModelFilter modelFilter) { Map map = new HashMap<>(); - List modelResps = getModelList(new ModelFilter()); + List modelResps = getModelList(modelFilter); if (CollectionUtils.isEmpty(modelResps)) { return map; } @@ -311,15 +311,19 @@ public class ModelServiceImpl implements ModelService { if (CollectionUtils.isEmpty(domainResps)) { return Lists.newArrayList(); } - List allModelList = getModelList(new ModelFilter()); - Set domainIds = domainResps.stream().map(DomainResp::getId).collect(Collectors.toSet()); - return allModelList.stream().filter(modelResp -> - domainIds.contains(modelResp.getDomainId())).collect(Collectors.toList()); + List domainIds = domainResps.stream().map(DomainResp::getId) + .collect(Collectors.toList()); + ModelFilter modelFilter = new ModelFilter(); + modelFilter.setIncludesDetail(false); + modelFilter.setDomainIds(domainIds); + return getModelList(modelFilter); } @Override public List getModelAuthList(User user, AuthType authTypeEnum) { - List modelResps = getModelList(new ModelFilter()); + ModelFilter modelFilter = new ModelFilter(); + modelFilter.setIncludesDetail(false); + List modelResps = getModelList(modelFilter); Set orgIds = userService.getUserAllOrgId(user.getName()); List modelWithAuth = Lists.newArrayList(); if (authTypeEnum.equals(AuthType.ADMIN)) { @@ -342,6 +346,7 @@ public class ModelServiceImpl implements ModelService { } ModelFilter modelFilter = new ModelFilter(); modelFilter.setDomainIds(domainIds); + modelFilter.setIncludesDetail(false); List modelResps = getModelList(modelFilter); if (CollectionUtils.isEmpty(modelResps)) { return modelResps; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java index 3a8296f45..66b33644e 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java @@ -34,6 +34,7 @@ import com.tencent.supersonic.headless.api.pojo.response.ModelSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DimensionService; @@ -216,7 +217,8 @@ public class SchemaServiceImpl implements SchemaService { Map> dimensionRespsMap = dimensionService.getDimensions(metaFilter) .stream().collect(Collectors.groupingBy(DimensionResp::getModelId)); List modelRelas = modelRelaService.getModelRela(modelIds); - Map modelMap = modelService.getModelMap(); + ModelFilter modelFilter = new ModelFilter(true, modelIds); + Map modelMap = modelService.getModelMap(modelFilter); for (Long modelId : modelIds) { ModelResp modelResp = modelMap.get(modelId); if (modelResp == null || !StatusEnum.ONLINE.getCode().equals(modelResp.getStatus())) { 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 26d0035b4..b5a65e11e 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 @@ -21,6 +21,7 @@ import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO; import com.tencent.supersonic.headless.server.persistence.repository.TagRepository; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.pojo.TagObjectFilter; import com.tencent.supersonic.headless.server.service.CollectService; @@ -30,6 +31,11 @@ import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagObjectService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; @@ -40,12 +46,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; - @Service @Slf4j public class TagMetaServiceImpl implements TagMetaService { @@ -258,7 +258,10 @@ public class TagMetaServiceImpl implements TagMetaService { private List getRelatedModel(TagFilterPageReq tagMarketPageReq) { List modelRespList = new ArrayList<>(); - Map modelMap = modelService.getModelMap(); + ModelFilter modelFilter = new ModelFilter(); + modelFilter.setDomainIds(tagMarketPageReq.getDomainIds()); + modelFilter.setIds(tagMarketPageReq.getModelIds()); + Map modelMap = modelService.getModelMap(modelFilter); for (Long modelId : modelMap.keySet()) { ModelResp modelResp = modelMap.get(modelId); if (Objects.isNull(modelResp)) { @@ -281,7 +284,10 @@ public class TagMetaServiceImpl implements TagMetaService { } private void fillModelInfo(List tagRespList) { - Map modelIdAndRespMap = modelService.getModelMap(); + List modelIds = tagRespList.stream().map(TagResp::getModelId) + .collect(Collectors.toList()); + ModelFilter modelFilter = new ModelFilter(false, modelIds); + Map modelIdAndRespMap = modelService.getModelMap(modelFilter); tagRespList.stream().forEach(tagResp -> { if (Objects.nonNull(modelIdAndRespMap) && modelIdAndRespMap.containsKey(tagResp.getModelId())) { tagResp.setModelName(modelIdAndRespMap.get(tagResp.getModelId()).getName()); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/NameCheckUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/NameCheckUtils.java index f803d29fb..2aafc3863 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/NameCheckUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/NameCheckUtils.java @@ -1,15 +1,9 @@ package com.tencent.supersonic.headless.server.utils; -import java.util.regex.Pattern; - public class NameCheckUtils { public static boolean containsSpecialCharacters(String str) { - if (str == null) { - return false; - } - String regex = "^[^a-zA-Z\\u4E00-\\u9FA5_\\d].*|^\\d.*"; - return Pattern.compile(regex).matcher(str).find(); + return false; } } \ No newline at end of file diff --git a/launchers/standalone/src/test/resources/application-local.yaml b/launchers/standalone/src/test/resources/application-local.yaml index 1fb4f1692..d30eec7c3 100644 --- a/launchers/standalone/src/test/resources/application-local.yaml +++ b/launchers/standalone/src/test/resources/application-local.yaml @@ -77,4 +77,4 @@ logging: inMemoryEmbeddingStore: persistent: - path: /tmp + path: d:// diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 394dbd701..de9ffd2c3 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -170,9 +170,9 @@ create table IF NOT EXISTS s2_auth_groups ); CREATE TABLE IF NOT EXISTS `s2_metric` ( - `id` INT NOT NULL AUTO_INCREMENT, - `model_id` INT NOT NULL , - `name` varchar(255) NOT NULL , + `id` INT NOT NULL AUTO_INCREMENT, + `model_id` INT NOT NULL , + `name` varchar(255) NOT NULL , `biz_name` varchar(255) NOT NULL , `description` varchar(500) DEFAULT NULL , `status` INT NOT NULL , @@ -190,6 +190,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` ( `relate_dimensions` varchar(500) DEFAULT NULL, `ext` LONGVARCHAR DEFAULT NULL , `define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC + `is_publish` INT, PRIMARY KEY (`id`) ); COMMENT ON TABLE s2_metric IS 'metric information table'; @@ -231,8 +232,7 @@ CREATE TABLE IF NOT EXISTS s2_model_rela PRIMARY KEY (`id`) ); -create table IF NOT EXISTS s2_canvas -( +create table IF NOT EXISTS `s2_canvas` ( id INT auto_increment, domain_id INT null, type varchar(20) null comment 'model、dimension、metric', @@ -624,5 +624,4 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( `ext` LONGVARCHAR DEFAULT NULL , PRIMARY KEY (`id`) ); -COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; - +COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; \ No newline at end of file