mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-14 22:25:19 +00:00
(improvement)(chat) support show sum metric in chinese name and support multiple conditions in having and if not exist metirc than not addAggregateToMetric (#165)
This commit is contained in:
@@ -100,7 +100,7 @@ public class QueryReqConverter {
|
||||
Map<String, String> fieldNameToBizNameMap = getFieldNameToBizNameMap(modelSchemaResp);
|
||||
String sql = databaseReq.getSql();
|
||||
log.info("convert name to bizName before:{}", sql);
|
||||
String replaceFields = SqlParserUpdateHelper.replaceFields(sql, fieldNameToBizNameMap, true);
|
||||
String replaceFields = SqlParserUpdateHelper.replaceFields(sql, fieldNameToBizNameMap, false);
|
||||
log.info("convert name to bizName after:{}", replaceFields);
|
||||
databaseReq.setSql(replaceFields);
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@ package com.tencent.supersonic.semantic.query.utils;
|
||||
import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE;
|
||||
import static com.tencent.supersonic.common.pojo.Constants.UNIONALL;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import com.tencent.supersonic.common.pojo.Aggregator;
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||
import com.tencent.supersonic.common.util.cache.CacheUtils;
|
||||
import com.tencent.supersonic.semantic.api.model.enums.TimeDimensionEnum;
|
||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||
import com.tencent.supersonic.semantic.api.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.MetricResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.QueryResultWithSchemaResp;
|
||||
@@ -22,6 +22,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.PostConstruct;
|
||||
@@ -36,10 +37,13 @@ import org.springframework.util.CollectionUtils;
|
||||
@Component
|
||||
public class QueryUtils {
|
||||
|
||||
private static final String pattern = "\\(`(.*?)`\\)";
|
||||
|
||||
private static final String no_quotation_pattern = "\\((.*?)\\)";
|
||||
|
||||
private final Set<Pattern> patterns = new HashSet<>();
|
||||
@Value("${query.cache.enable:true}")
|
||||
private Boolean cacheEnable;
|
||||
|
||||
private final CacheUtils cacheUtils;
|
||||
private final StatUtils statUtils;
|
||||
|
||||
@@ -86,6 +90,15 @@ public class QueryUtils {
|
||||
}
|
||||
if (namePair.containsKey(nameEn)) {
|
||||
column.setName(namePair.get(nameEn));
|
||||
} else {
|
||||
String nameEnByRegex = getNameEnByRegex(nameEn, pattern);
|
||||
if (StringUtils.isEmpty(nameEnByRegex)) {
|
||||
nameEnByRegex = getNameEnByRegex(nameEn, no_quotation_pattern);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(nameEnByRegex) && StringUtils.isNotEmpty(namePair.get(nameEnByRegex))) {
|
||||
String filedName = namePair.get(nameEnByRegex);
|
||||
column.setName(nameEn.replaceAll(nameEnByRegex, filedName));
|
||||
}
|
||||
}
|
||||
if (nameTypePair.containsKey(nameEn)) {
|
||||
column.setShowType(nameTypePair.get(nameEn));
|
||||
@@ -103,6 +116,7 @@ public class QueryUtils {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void fillItemNameInfo(QueryResultWithSchemaResp queryResultWithColumns,
|
||||
QueryMultiStructReq queryMultiStructCmd) {
|
||||
List<Aggregator> aggregators = queryMultiStructCmd.getQueryStructReqs().stream()
|
||||
@@ -142,6 +156,17 @@ public class QueryUtils {
|
||||
});
|
||||
}
|
||||
|
||||
private String getNameEnByRegex(String nameEn, String pattern) {
|
||||
Pattern p = Pattern.compile(pattern);
|
||||
Matcher m = p.matcher(nameEn);
|
||||
|
||||
if (m.find()) {
|
||||
String result = m.group(1);
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isNumberType(String type) {
|
||||
if (StringUtils.isBlank(type)) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user