From c220ca69c2721d68b9908901730f6ba0f5149b8c Mon Sep 17 00:00:00 2001 From: Scott Date: Sun, 3 Dec 2023 20:22:02 +0800 Subject: [PATCH] fix:convert name or alias to schema element (#465) --- .../chat/api/pojo/SemanticSchema.java | 17 +++++++++-------- .../chat/processor/MetricCheckProcessor.java | 4 ++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticSchema.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticSchema.java index b7ec83076..dda6ee609 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticSchema.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticSchema.java @@ -57,19 +57,19 @@ public class SemanticSchema implements Serializable { switch (elementType) { case ENTITY: - element = getElementsByName(name, getEntities()); + element = getElementsByNameOrAlias(name, getEntities()); break; case MODEL: - element = getElementsByName(name, getModels()); + element = getElementsByNameOrAlias(name, getModels()); break; case METRIC: - element = getElementsByName(name, getMetrics()); + element = getElementsByNameOrAlias(name, getMetrics()); break; case DIMENSION: - element = getElementsByName(name, getDimensions()); + element = getElementsByNameOrAlias(name, getDimensions()); break; case VALUE: - element = getElementsByName(name, getDimensionValues()); + element = getElementsByNameOrAlias(name, getDimensionValues()); break; default: } @@ -151,10 +151,11 @@ public class SemanticSchema implements Serializable { .findFirst(); } - private Optional getElementsByName(String name, List elements) { + private Optional getElementsByNameOrAlias(String name, List elements) { return elements.stream() - .filter(schemaElement -> name.equals(schemaElement.getName())) - .findFirst(); + .filter(schemaElement -> + name.equals(schemaElement.getName()) || schemaElement.getAlias().contains(name) + ).findFirst(); } public List getModels() { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/MetricCheckProcessor.java b/chat/core/src/main/java/com/tencent/supersonic/chat/processor/MetricCheckProcessor.java index e0d61d994..0e335655c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/MetricCheckProcessor.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/processor/MetricCheckProcessor.java @@ -15,8 +15,10 @@ import com.tencent.supersonic.chat.service.SemanticService; import com.tencent.supersonic.common.pojo.QueryType; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.jsqlparser.SqlParserRemoveHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -30,6 +32,7 @@ import java.util.stream.Collectors; * MetricCheckProcessor verifies whether the dimensions * involved in the query in metric mode can drill down on the metric. */ +@Slf4j public class MetricCheckProcessor implements ParseResultProcessor { @Override @@ -43,6 +46,7 @@ public class MetricCheckProcessor implements ParseResultProcessor { continue; } String correctSqlProcessed = processCorrectSql(parseInfo, semanticSchema); + log.info("correct sql:{}", correctSqlProcessed); parseInfo.getSqlInfo().setCorrectS2SQL(correctSqlProcessed); } semanticQueries.removeIf(semanticQuery -> {