mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:51:00 +00:00
This commit is contained in:
@@ -28,4 +28,5 @@ public class QueryResult {
|
||||
private EntityInfo entityInfo;
|
||||
private List<SchemaElement> recommendedDimensions;
|
||||
private AggregateInfo aggregateInfo;
|
||||
private String errorMsg;
|
||||
}
|
||||
|
||||
@@ -75,22 +75,26 @@ public class SqlExecutor implements ChatQueryExecutor {
|
||||
sqlReq.setDataSetId(parseInfo.getDataSetId());
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
SemanticQueryResp queryResp = semanticLayer.queryByReq(sqlReq, executeContext.getUser());
|
||||
QueryResult queryResult = new QueryResult();
|
||||
queryResult.setChatContext(parseInfo);
|
||||
queryResult.setQueryMode(parseInfo.getQueryMode());
|
||||
queryResult.setQueryTimeCost(System.currentTimeMillis() - startTime);
|
||||
if (queryResp != null) {
|
||||
queryResult.setQueryAuthorization(queryResp.getQueryAuthorization());
|
||||
queryResult.setQuerySql(queryResp.getSql());
|
||||
queryResult.setQueryResults(queryResp.getResultList());
|
||||
queryResult.setQueryColumns(queryResp.getColumns());
|
||||
queryResult.setQueryState(QueryState.SUCCESS);
|
||||
|
||||
chatCtx.setParseInfo(parseInfo);
|
||||
chatContextService.updateContext(chatCtx);
|
||||
} else {
|
||||
queryResult.setQueryState(QueryState.INVALID);
|
||||
try {
|
||||
SemanticQueryResp queryResp =
|
||||
semanticLayer.queryByReq(sqlReq, executeContext.getUser());
|
||||
if (queryResp != null) {
|
||||
queryResult.setQueryAuthorization(queryResp.getQueryAuthorization());
|
||||
queryResult.setQuerySql(queryResp.getSql());
|
||||
queryResult.setQueryResults(queryResp.getResultList());
|
||||
queryResult.setQueryColumns(queryResp.getColumns());
|
||||
queryResult.setQueryState(QueryState.SUCCESS);
|
||||
chatCtx.setParseInfo(parseInfo);
|
||||
chatContextService.updateContext(chatCtx);
|
||||
} else {
|
||||
queryResult.setQueryState(QueryState.INVALID);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
queryResult.setErrorMsg(e.getMessage());
|
||||
}
|
||||
return queryResult;
|
||||
}
|
||||
|
||||
@@ -105,6 +105,7 @@ public class NL2SQLParser implements ChatQueryParser {
|
||||
}
|
||||
parseResp.setState(text2SqlParseResp.getState());
|
||||
parseResp.getParseTimeCost().setSqlTime(text2SqlParseResp.getParseTimeCost().getSqlTime());
|
||||
parseResp.setErrorMsg(text2SqlParseResp.getErrorMsg());
|
||||
formatParseResult(parseResp);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -74,7 +75,7 @@ public class ChatWorkflowEngine {
|
||||
break;
|
||||
case TRANSLATING:
|
||||
long start = System.currentTimeMillis();
|
||||
performTranslating(queryCtx);
|
||||
performTranslating(queryCtx, parseResult);
|
||||
parseResult.getParseTimeCost().setSqlTime(System.currentTimeMillis() - start);
|
||||
queryCtx.setChatWorkflowState(ChatWorkflowState.PROCESSING);
|
||||
break;
|
||||
@@ -126,10 +127,13 @@ public class ChatWorkflowEngine {
|
||||
});
|
||||
}
|
||||
|
||||
private void performTranslating(ChatQueryContext chatQueryContext) {
|
||||
private void performTranslating(ChatQueryContext chatQueryContext, ParseResp parseResult) {
|
||||
List<SemanticParseInfo> semanticParseInfos = chatQueryContext.getCandidateQueries().stream()
|
||||
.map(SemanticQuery::getParseInfo).collect(Collectors.toList());
|
||||
|
||||
List<String> errorMsg = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(parseResult.getErrorMsg())) {
|
||||
errorMsg.add(parseResult.getErrorMsg());
|
||||
}
|
||||
semanticParseInfos.forEach(parseInfo -> {
|
||||
try {
|
||||
SemanticQuery semanticQuery = QueryManager.createQuery(parseInfo.getQueryMode());
|
||||
@@ -143,7 +147,9 @@ public class ChatWorkflowEngine {
|
||||
SemanticTranslateResp explain =
|
||||
queryService.translate(semanticQueryReq, chatQueryContext.getUser());
|
||||
parseInfo.getSqlInfo().setQuerySQL(explain.getQuerySQL());
|
||||
|
||||
if (StringUtils.isNotBlank(explain.getErrMsg())) {
|
||||
errorMsg.add(explain.getErrMsg());
|
||||
}
|
||||
keyPipelineLog.info(
|
||||
"SqlInfoProcessor results:\n"
|
||||
+ "Parsed S2SQL: {}\nCorrected S2SQL: {}\nQuery SQL: {}",
|
||||
@@ -152,7 +158,12 @@ public class ChatWorkflowEngine {
|
||||
StringUtils.normalizeSpace(parseInfo.getSqlInfo().getQuerySQL()));
|
||||
} catch (Exception e) {
|
||||
log.warn("get sql info failed:{}", parseInfo, e);
|
||||
errorMsg.add(String.format("S2SQL:%s %s", parseInfo.getSqlInfo().getParsedS2SQL(),
|
||||
e.getMessage()));
|
||||
}
|
||||
});
|
||||
if (!errorMsg.isEmpty()) {
|
||||
parseResult.setErrorMsg(errorMsg.stream().collect(Collectors.joining("\n")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user