mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:51:00 +00:00
(improvement)(semantic) If the field of the "AS" statement is equal to the alias, then do not replace the alias (#304)
This commit is contained in:
@@ -23,6 +23,7 @@ import com.tencent.supersonic.common.util.JsonUtil;
|
||||
import com.tencent.supersonic.knowledge.service.SchemaService;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@@ -134,18 +135,18 @@ public class LLMRequestService {
|
||||
}
|
||||
|
||||
public LLMResp requestLLM(LLMReq llmReq, Long modelId) {
|
||||
String questUrl = llmParserConfig.getUrl() + llmParserConfig.getQueryToSqlPath();
|
||||
long startTime = System.currentTimeMillis();
|
||||
log.info("requestLLM request, modelId:{},llmReq:{}", modelId, llmReq);
|
||||
try {
|
||||
URL url = new URL(new URL(llmParserConfig.getUrl()), llmParserConfig.getQueryToSqlPath());
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
HttpEntity<String> entity = new HttpEntity<>(JsonUtil.toString(llmReq), headers);
|
||||
ResponseEntity<LLMResp> responseEntity = restTemplate.exchange(questUrl, HttpMethod.POST, entity,
|
||||
ResponseEntity<LLMResp> responseEntity = restTemplate.exchange(url.toString(), HttpMethod.POST, entity,
|
||||
LLMResp.class);
|
||||
|
||||
log.info("requestLLM response,cost:{}, questUrl:{} \n entity:{} \n body:{}",
|
||||
System.currentTimeMillis() - startTime, questUrl, entity, responseEntity.getBody());
|
||||
System.currentTimeMillis() - startTime, url.toString(), entity, responseEntity.getBody());
|
||||
return responseEntity.getBody();
|
||||
} catch (Exception e) {
|
||||
log.error("requestLLM error", e);
|
||||
|
||||
@@ -15,7 +15,11 @@ public class FunctionAliasReplaceVisitor extends SelectItemVisitorAdapter {
|
||||
public void visit(SelectExpressionItem selectExpressionItem) {
|
||||
if (selectExpressionItem.getExpression() instanceof Function) {
|
||||
Function function = (Function) selectExpressionItem.getExpression();
|
||||
if (Objects.nonNull(selectExpressionItem.getAlias())) {
|
||||
String columnName = SqlParserSelectHelper.getColumnName(function);
|
||||
//1.exist alias. as
|
||||
//2.alias's fieldName not equal. "sum(pv) as pv" cannot be replaced.
|
||||
if (Objects.nonNull(selectExpressionItem.getAlias()) && !selectExpressionItem.getAlias().getName()
|
||||
.equalsIgnoreCase(columnName)) {
|
||||
aliasToActualExpression.put(selectExpressionItem.getAlias().getName(), function.toString());
|
||||
selectExpressionItem.setAlias(null);
|
||||
}
|
||||
|
||||
@@ -203,6 +203,18 @@ class SqlParserAddHelperTest {
|
||||
"SELECT department, sum(pv) FROM t_1 WHERE (sum(pv) > 1 AND department = 'HR') AND "
|
||||
+ "sys_imp_date = '2023-09-11' GROUP BY department ORDER BY sum(pv) DESC LIMIT 10",
|
||||
replaceSql);
|
||||
|
||||
sql = "select department, sum(pv) as pv from t_1 where sys_imp_date = '2023-09-11' GROUP BY "
|
||||
+ "department order by pv desc limit 10";
|
||||
replaceSql = SqlParserReplaceHelper.replaceAlias(sql);
|
||||
replaceSql = SqlParserAddHelper.addAggregateToField(replaceSql, filedNameToAggregate);
|
||||
replaceSql = SqlParserAddHelper.addGroupBy(replaceSql, groupByFields);
|
||||
|
||||
Assert.assertEquals(
|
||||
"SELECT department, sum(pv) AS pv "
|
||||
+ "FROM t_1 WHERE sys_imp_date = '2023-09-11' GROUP BY department "
|
||||
+ "ORDER BY sum(pv) DESC LIMIT 10",
|
||||
replaceSql);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -396,6 +396,16 @@ class SqlParserReplaceHelperTest {
|
||||
+ "GROUP BY 部门 ORDER BY sum(访问次数) DESC LIMIT 10",
|
||||
replaceSql);
|
||||
|
||||
sql = "select 部门, sum(访问次数) as 访问次数 from 超音数 where "
|
||||
+ "(datediff('day', 数据日期, '2023-09-05') <= 3) and 数据日期 = '2023-10-10' "
|
||||
+ "group by 部门 order by 访问次数 desc limit 10";
|
||||
replaceSql = SqlParserReplaceHelper.replaceAlias(sql);
|
||||
System.out.println(replaceSql);
|
||||
Assert.assertEquals(
|
||||
"SELECT 部门, sum(访问次数) AS 访问次数 FROM 超音数 WHERE (datediff('day', 数据日期, "
|
||||
+ "'2023-09-05') <= 3) AND 数据日期 = '2023-10-10' GROUP BY 部门 ORDER BY 访问次数 DESC LIMIT 10",
|
||||
replaceSql);
|
||||
|
||||
}
|
||||
|
||||
private Map<String, String> initParams() {
|
||||
|
||||
Reference in New Issue
Block a user