mirror of
https://github.com/tencentmusic/supersonic.git
synced 2026-04-28 20:04:27 +08:00
Compare commits
6 Commits
43c21979c4
...
4d8d801be2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d8d801be2 | ||
|
|
6f497b142e | ||
|
|
79a44b27ee | ||
|
|
76cc5ee111 | ||
|
|
320fcf04bd | ||
|
|
75fc83010c |
@@ -26,7 +26,6 @@ import org.springframework.boot.CommandLineRunner;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -110,6 +109,14 @@ public class MemoryServiceImpl implements MemoryService, CommandLineRunner {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void batchDelete(List<Long> ids) {
|
public void batchDelete(List<Long> ids) {
|
||||||
|
QueryWrapper<ChatMemoryDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().in(ChatMemoryDO::getId, ids);
|
||||||
|
List<ChatMemoryDO> chatMemoryDOS = chatMemoryRepository.getMemories(queryWrapper);
|
||||||
|
chatMemoryDOS.forEach(chatMemoryDO -> {
|
||||||
|
if (MemoryStatus.ENABLED.toString().equals(chatMemoryDO.getStatus().trim())) {
|
||||||
|
disableMemory(chatMemoryDO);
|
||||||
|
}
|
||||||
|
});
|
||||||
chatMemoryRepository.batchDelete(ids);
|
chatMemoryRepository.batchDelete(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.tencent.supersonic.headless.core.pojo;
|
package com.tencent.supersonic.headless.core.pojo;
|
||||||
|
|
||||||
|
import com.tencent.supersonic.common.pojo.User;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.QueryState;
|
import com.tencent.supersonic.headless.api.pojo.response.QueryState;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -24,6 +25,7 @@ public class QueryStatement {
|
|||||||
private SemanticSchemaResp semanticSchema;
|
private SemanticSchemaResp semanticSchema;
|
||||||
private Integer limit = 1000;
|
private Integer limit = 1000;
|
||||||
private Boolean isTranslated = false;
|
private Boolean isTranslated = false;
|
||||||
|
private User user;
|
||||||
|
|
||||||
public boolean isOk() {
|
public boolean isOk() {
|
||||||
return StringUtils.isBlank(errMsg) && StringUtils.isNotBlank(sql);
|
return StringUtils.isBlank(errMsg) && StringUtils.isNotBlank(sql);
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class DimValueAspect {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (DimensionResp dimension : dimensions) {
|
for (DimensionResp dimension : dimensions) {
|
||||||
if (!expression.getFieldName().equals(dimension.getName())
|
if (!expression.getFieldName().equals(dimension.getBizName())
|
||||||
|| CollectionUtils.isEmpty(dimension.getDimValueMaps())) {
|
|| CollectionUtils.isEmpty(dimension.getDimValueMaps())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -124,6 +124,7 @@ public class DimValueAspect {
|
|||||||
sql = SqlReplaceHelper.replaceValue(sql, filedNameToValueMap);
|
sql = SqlReplaceHelper.replaceValue(sql, filedNameToValueMap);
|
||||||
log.debug("correctorSql after replacing:{}", sql);
|
log.debug("correctorSql after replacing:{}", sql);
|
||||||
querySqlReq.setSql(sql);
|
querySqlReq.setSql(sql);
|
||||||
|
querySqlReq.getSqlInfo().setQuerySQL(sql);
|
||||||
Map<String, Map<String, String>> techNameToBizName = getTechNameToBizName(dimensions);
|
Map<String, Map<String, String>> techNameToBizName = getTechNameToBizName(dimensions);
|
||||||
|
|
||||||
SemanticQueryResp queryResultWithColumns = (SemanticQueryResp) joinPoint.proceed();
|
SemanticQueryResp queryResultWithColumns = (SemanticQueryResp) joinPoint.proceed();
|
||||||
|
|||||||
@@ -296,6 +296,9 @@ public class S2SemanticLayerService implements SemanticLayerService {
|
|||||||
queryStatement.setSql(semanticQueryReq.getSqlInfo().getQuerySQL());
|
queryStatement.setSql(semanticQueryReq.getSqlInfo().getQuerySQL());
|
||||||
queryStatement.setIsTranslated(true);
|
queryStatement.setIsTranslated(true);
|
||||||
}
|
}
|
||||||
|
if (queryStatement != null) {
|
||||||
|
queryStatement.setUser(user);
|
||||||
|
}
|
||||||
return queryStatement;
|
return queryStatement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,8 @@ public class ChatWorkflowEngine {
|
|||||||
// 如果物理SQL被修正了,更新querySQL为修正后的版本
|
// 如果物理SQL被修正了,更新querySQL为修正后的版本
|
||||||
SemanticParseInfo parseInfo = semanticQuery.getParseInfo();
|
SemanticParseInfo parseInfo = semanticQuery.getParseInfo();
|
||||||
if (StringUtils.isNotBlank(parseInfo.getSqlInfo().getCorrectedQuerySQL())) {
|
if (StringUtils.isNotBlank(parseInfo.getSqlInfo().getCorrectedQuerySQL())) {
|
||||||
parseInfo.getSqlInfo().setQuerySQL(parseInfo.getSqlInfo().getCorrectedQuerySQL());
|
parseInfo.getSqlInfo()
|
||||||
|
.setQuerySQL(parseInfo.getSqlInfo().getCorrectedQuerySQL());
|
||||||
log.info("Physical SQL corrected and updated querySQL: {}",
|
log.info("Physical SQL corrected and updated querySQL: {}",
|
||||||
parseInfo.getSqlInfo().getQuerySQL());
|
parseInfo.getSqlInfo().getQuerySQL());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,9 +19,10 @@ public class DataSetSchemaBuilder {
|
|||||||
public static DataSetSchema build(DataSetSchemaResp resp) {
|
public static DataSetSchema build(DataSetSchemaResp resp) {
|
||||||
DataSetSchema dataSetSchema = new DataSetSchema();
|
DataSetSchema dataSetSchema = new DataSetSchema();
|
||||||
dataSetSchema.setQueryConfig(resp.getQueryConfig());
|
dataSetSchema.setQueryConfig(resp.getQueryConfig());
|
||||||
SchemaElement dataSet = SchemaElement.builder().dataSetId(resp.getId())
|
SchemaElement dataSet =
|
||||||
.dataSetName(resp.getName()).id(resp.getId()).name(resp.getName())
|
SchemaElement.builder().dataSetId(resp.getId()).dataSetName(resp.getName())
|
||||||
.bizName(resp.getBizName()).type(SchemaElementType.DATASET).build();
|
.id(resp.getId()).name(resp.getName()).description(resp.getDescription())
|
||||||
|
.bizName(resp.getBizName()).type(SchemaElementType.DATASET).build();
|
||||||
dataSetSchema.setDataSet(dataSet);
|
dataSetSchema.setDataSet(dataSet);
|
||||||
dataSetSchema.setDatabaseType(resp.getDatabaseType());
|
dataSetSchema.setDatabaseType(resp.getDatabaseType());
|
||||||
dataSetSchema.setDatabaseVersion(resp.getDatabaseVersion());
|
dataSetSchema.setDatabaseVersion(resp.getDatabaseVersion());
|
||||||
|
|||||||
@@ -138,7 +138,8 @@ public class DictUtils {
|
|||||||
semanticQueryReq.setNeedAuth(false);
|
semanticQueryReq.setNeedAuth(false);
|
||||||
String bizName = dictItemResp.getBizName();
|
String bizName = dictItemResp.getBizName();
|
||||||
try {
|
try {
|
||||||
SemanticQueryResp semanticQueryResp = queryService.queryByReq(semanticQueryReq, null);
|
SemanticQueryResp semanticQueryResp =
|
||||||
|
queryService.queryByReq(semanticQueryReq, User.getDefaultUser());
|
||||||
if (Objects.isNull(semanticQueryResp)
|
if (Objects.isNull(semanticQueryResp)
|
||||||
|| CollectionUtils.isEmpty(semanticQueryResp.getResultList())) {
|
|| CollectionUtils.isEmpty(semanticQueryResp.getResultList())) {
|
||||||
return lines;
|
return lines;
|
||||||
@@ -274,6 +275,9 @@ public class DictUtils {
|
|||||||
private QuerySqlReq constructQuerySqlReq(DictItemResp dictItemResp) {
|
private QuerySqlReq constructQuerySqlReq(DictItemResp dictItemResp) {
|
||||||
|
|
||||||
ModelResp model = modelService.getModel(dictItemResp.getModelId());
|
ModelResp model = modelService.getModel(dictItemResp.getModelId());
|
||||||
|
String tableStr = StringUtils.isNotBlank(model.getModelDetail().getTableQuery())
|
||||||
|
? model.getModelDetail().getTableQuery()
|
||||||
|
: "(" + model.getModelDetail().getSqlQuery() + ")";
|
||||||
String sqlPattern =
|
String sqlPattern =
|
||||||
"select %s,count(1) from %s %s group by %s order by count(1) desc limit %d";
|
"select %s,count(1) from %s %s group by %s order by count(1) desc limit %d";
|
||||||
String dimBizName = dictItemResp.getBizName();
|
String dimBizName = dictItemResp.getBizName();
|
||||||
@@ -287,8 +291,7 @@ public class DictUtils {
|
|||||||
limit = Integer.MAX_VALUE;
|
limit = Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
String sql =
|
String sql = String.format(sqlPattern, dimBizName, tableStr, where, dimBizName, limit);
|
||||||
String.format(sqlPattern, dimBizName, model.getBizName(), where, dimBizName, limit);
|
|
||||||
Set<Long> modelIds = new HashSet<>();
|
Set<Long> modelIds = new HashSet<>();
|
||||||
modelIds.add(dictItemResp.getModelId());
|
modelIds.add(dictItemResp.getModelId());
|
||||||
QuerySqlReq querySqlReq = new QuerySqlReq();
|
QuerySqlReq querySqlReq = new QuerySqlReq();
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ public class QueryUtils {
|
|||||||
column.setModelId(metric.getModelId());
|
column.setModelId(metric.getModelId());
|
||||||
}
|
}
|
||||||
// if column nameEn contains metric alias, use metric dataFormatType
|
// if column nameEn contains metric alias, use metric dataFormatType
|
||||||
if (column.getDataFormatType() == null && StringUtils.isNotEmpty(metric.getAlias())) {
|
if (column.getDataFormatType() == null
|
||||||
|
&& StringUtils.isNotEmpty(metric.getAlias())) {
|
||||||
for (String alias : metric.getAlias().split(",")) {
|
for (String alias : metric.getAlias().split(",")) {
|
||||||
if (nameEn.contains(alias)) {
|
if (nameEn.contains(alias)) {
|
||||||
column.setDataFormatType(metric.getDataFormatType());
|
column.setDataFormatType(metric.getDataFormatType());
|
||||||
|
|||||||
Reference in New Issue
Block a user