[improvement][chat]Introduce AllFieldMapper to increase parsing robustness when normal pipeline fails.

This commit is contained in:
jerryjzhang
2024-12-26 21:33:40 +08:00
parent 8e03531424
commit d834e98a66
20 changed files with 163 additions and 42 deletions

View File

@@ -30,6 +30,9 @@ public class DefaultSemanticTranslator implements SemanticTranslator {
if (parser.accept(queryStatement)) {
log.debug("QueryConverter accept [{}]", parser.getClass().getName());
parser.parse(queryStatement);
if (queryStatement.getStatus() != 0) {
break;
}
}
}
mergeOntologyQuery(queryStatement);

View File

@@ -45,6 +45,14 @@ public class SqlQueryParser implements QueryParser {
List<String> queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql());
Ontology ontology = queryStatement.getOntology();
OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields);
// check if there are fields not matched with any metric or dimension
if (queryFields.size() > ontologyQuery.getMetrics().size()
+ ontologyQuery.getDimensions().size()) {
queryStatement
.setErrMsg("There are fields in the SQL not matched with any semantic column.");
queryStatement.setStatus(1);
return;
}
queryStatement.setOntologyQuery(ontologyQuery);
AggOption sqlQueryAggOption = getAggOption(sqlQuery.getSql(), ontologyQuery.getMetrics());