fix:convert name or alias to schema element (#465)

This commit is contained in:
Scott
2023-12-03 20:22:02 +08:00
committed by GitHub
parent 4280aad0a7
commit c220ca69c2
2 changed files with 13 additions and 8 deletions

View File

@@ -57,19 +57,19 @@ public class SemanticSchema implements Serializable {
switch (elementType) { switch (elementType) {
case ENTITY: case ENTITY:
element = getElementsByName(name, getEntities()); element = getElementsByNameOrAlias(name, getEntities());
break; break;
case MODEL: case MODEL:
element = getElementsByName(name, getModels()); element = getElementsByNameOrAlias(name, getModels());
break; break;
case METRIC: case METRIC:
element = getElementsByName(name, getMetrics()); element = getElementsByNameOrAlias(name, getMetrics());
break; break;
case DIMENSION: case DIMENSION:
element = getElementsByName(name, getDimensions()); element = getElementsByNameOrAlias(name, getDimensions());
break; break;
case VALUE: case VALUE:
element = getElementsByName(name, getDimensionValues()); element = getElementsByNameOrAlias(name, getDimensionValues());
break; break;
default: default:
} }
@@ -151,10 +151,11 @@ public class SemanticSchema implements Serializable {
.findFirst(); .findFirst();
} }
private Optional<SchemaElement> getElementsByName(String name, List<SchemaElement> elements) { private Optional<SchemaElement> getElementsByNameOrAlias(String name, List<SchemaElement> elements) {
return elements.stream() return elements.stream()
.filter(schemaElement -> name.equals(schemaElement.getName())) .filter(schemaElement ->
.findFirst(); name.equals(schemaElement.getName()) || schemaElement.getAlias().contains(name)
).findFirst();
} }
public List<SchemaElement> getModels() { public List<SchemaElement> getModels() {

View File

@@ -15,8 +15,10 @@ import com.tencent.supersonic.chat.service.SemanticService;
import com.tencent.supersonic.common.pojo.QueryType; import com.tencent.supersonic.common.pojo.QueryType;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.common.util.ContextUtils; 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.SqlParserRemoveHelper;
import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -30,6 +32,7 @@ import java.util.stream.Collectors;
* MetricCheckProcessor verifies whether the dimensions * MetricCheckProcessor verifies whether the dimensions
* involved in the query in metric mode can drill down on the metric. * involved in the query in metric mode can drill down on the metric.
*/ */
@Slf4j
public class MetricCheckProcessor implements ParseResultProcessor { public class MetricCheckProcessor implements ParseResultProcessor {
@Override @Override
@@ -43,6 +46,7 @@ public class MetricCheckProcessor implements ParseResultProcessor {
continue; continue;
} }
String correctSqlProcessed = processCorrectSql(parseInfo, semanticSchema); String correctSqlProcessed = processCorrectSql(parseInfo, semanticSchema);
log.info("correct sql:{}", correctSqlProcessed);
parseInfo.getSqlInfo().setCorrectS2SQL(correctSqlProcessed); parseInfo.getSqlInfo().setCorrectS2SQL(correctSqlProcessed);
} }
semanticQueries.removeIf(semanticQuery -> { semanticQueries.removeIf(semanticQuery -> {