diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index b52e9bbea..2aaef6b52 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -47,12 +47,16 @@ public class SqlQueryParser implements QueryParser { SqlQuery sqlQuery = queryStatement.getSqlQuery(); List queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); Set queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); + Set ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet()); queryFields.removeAll(queryAliases); Ontology ontology = queryStatement.getOntology(); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); + Set queryFieldsSet = new HashSet<>(queryFields); + ontologyQuery.getMetrics().forEach(m -> ontologyMetricsDimensions.add(m.getName())); + ontologyQuery.getDimensions().forEach(d -> ontologyMetricsDimensions.add(d.getName())); // check if there are fields not matched with any metric or dimension - if (queryFields.size() > ontologyQuery.getMetrics().size() - + ontologyQuery.getDimensions().size()) { + + if (!queryFieldsSet.containsAll(ontologyMetricsDimensions)) { List semanticFields = Lists.newArrayList(); ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName())); ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName()));