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