diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/DimensionConstants.java b/common/src/main/java/com/tencent/supersonic/common/pojo/DimensionConstants.java index 7ea5ecbdf..a4b40bbc6 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/DimensionConstants.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/DimensionConstants.java @@ -5,4 +5,6 @@ public class DimensionConstants { public static final String DIMENSION_TIME_FORMAT = "time_format"; public static final String DIMENSION_TYPE = "dimension_type"; + + public static final String DIMENSION_DATA_TYPE = "dimension_data_type"; } diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java index 8cf15a01d..3ce5f4b80 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/parser/llm/PromptHelper.java @@ -17,6 +17,7 @@ import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; +import static com.tencent.supersonic.common.pojo.DimensionConstants.*; import static com.tencent.supersonic.headless.chat.parser.ParserConfig.*; @Component @@ -142,6 +143,9 @@ public class PromptHelper { dimension.getAlias().forEach(a -> alias.append(a).append(";")); dimensionStr.append(" ALIAS '").append(alias).append("'"); } + if (Objects.nonNull(dimension.getExtInfo().get(DIMENSION_DATA_TYPE))) { + dimensionStr.append(" DATATYPE '").append(dimension.getExtInfo().get(DIMENSION_DATA_TYPE)).append("'"); + } if (StringUtils.isNotEmpty(dimension.getTimeFormat())) { dimensionStr.append(" FORMAT '").append(dimension.getTimeFormat()).append("'"); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java index 8325a8a35..6bf4b975c 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java @@ -1,11 +1,13 @@ package com.tencent.supersonic.headless.server.utils; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.tencent.supersonic.common.pojo.DimensionConstants; import com.tencent.supersonic.headless.api.pojo.*; import com.tencent.supersonic.headless.api.pojo.response.DataSetSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.DimSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.TermResp; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -92,6 +94,12 @@ public class DataSetSchemaBuilder { private static Set getDimensions(DataSetSchemaResp resp) { Set dimensions = new HashSet<>(); + Map> dataTypeMap = Maps.newHashMap(); + for (ModelResp modelResp : resp.getModelResps()) { + dataTypeMap.put(modelResp.getId(), modelResp.getModelDetail().getFields().stream() + .collect(Collectors.toMap(Field::getFieldName, Field::getDataType, (k1, k2) -> k2))); + } + for (DimSchemaResp dim : resp.getDimensions()) { List alias = SchemaItem.getAliasList(dim.getAlias()); List dimValueMaps = dim.getDimValueMaps(); @@ -109,7 +117,13 @@ public class DataSetSchemaBuilder { .alias(alias).schemaValueMaps(schemaValueMaps).isTag(dim.getIsTag()) .description(dim.getDescription()).type(SchemaElementType.DIMENSION).build(); dimToAdd.getExtInfo().put(DimensionConstants.DIMENSION_TYPE, dim.getType()); - + // data type + if (dim.getDataType() != null) { + dimToAdd.getExtInfo().put(DimensionConstants.DIMENSION_DATA_TYPE, dim.getDataType()); + } else { + dimToAdd.getExtInfo().put(DimensionConstants.DIMENSION_DATA_TYPE, + dataTypeMap.get(dim.getModelId()).get(dim.getBizName())); + } if (dim.isTimeDimension()) { String timeFormat = String.valueOf(dim.getExt().get(DimensionConstants.DIMENSION_TIME_FORMAT));