[improvement][Headless] Fix the caching issue in struct queries and add headless test cases. (#689)

This commit is contained in:
lexluo09
2024-01-25 11:31:15 +08:00
committed by GitHub
parent 922201c181
commit 841db25198
23 changed files with 214 additions and 113 deletions

View File

@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.integration;
import com.tencent.supersonic.StandaloneLauncher;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.server.service.QueryService;
import java.util.HashSet;
@@ -29,7 +30,11 @@ public class BaseTest {
return queryService.queryByReq(buildQuerySqlReq(sql), user);
}
protected QuerySqlReq buildQuerySqlReq(String sql) {
protected SemanticQueryResp queryByReq(SemanticQueryReq queryReq, User user) throws Exception {
return queryService.queryByReq(queryReq, user);
}
protected SemanticQueryReq buildQuerySqlReq(String sql) {
QuerySqlReq querySqlCmd = new QuerySqlReq();
querySqlCmd.setSql(sql);
Set<Long> modelIds = new HashSet<>();

View File

@@ -0,0 +1,10 @@
package com.tencent.supersonic.headless.integration;
import org.junit.Test;
public class ExplainTest extends BaseTest {
@Test
public void testSumExplain() {
}
}

View File

@@ -0,0 +1,86 @@
package com.tencent.supersonic.headless.integration;
import static java.time.LocalDate.now;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.DateConf.DateMode;
import com.tencent.supersonic.common.pojo.Order;
import com.tencent.supersonic.common.pojo.QueryColumn;
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;
public class QueryByStructTest extends BaseTest {
@Test
public void testSumQuery() throws Exception {
QueryStructReq queryStructReq = buildQueryStructReq(null);
SemanticQueryResp semanticQueryResp = queryByReq(queryStructReq, User.getFakeUser());
assertEquals(1, semanticQueryResp.getColumns().size());
QueryColumn queryColumn = semanticQueryResp.getColumns().get(0);
assertEquals("访问次数", queryColumn.getName());
assertEquals(1, semanticQueryResp.getResultList().size());
}
@Test
public void testGroupByQuery() throws Exception {
QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("department"));
SemanticQueryResp result = queryByReq(queryStructReq, User.getFakeUser());
assertEquals(2, result.getColumns().size());
QueryColumn firstColumn = result.getColumns().get(0);
QueryColumn secondColumn = result.getColumns().get(1);
assertEquals("部门", firstColumn.getName());
assertEquals("访问次数", secondColumn.getName());
assertNotNull(result.getResultList().size());
}
@Test
public void testCacheQuery() throws Exception {
QueryStructReq queryStructReq1 = buildQueryStructReq(Arrays.asList("department"));
QueryStructReq queryStructReq2 = buildQueryStructReq(Arrays.asList("department"));
SemanticQueryResp result1 = queryByReq(queryStructReq1, User.getFakeUser());
SemanticQueryResp result2 = queryByReq(queryStructReq2, User.getFakeUser());
assertEquals(result1, result2);
}
private QueryStructReq buildQueryStructReq(List<String> groups) {
QueryStructReq queryStructReq = new QueryStructReq();
queryStructReq.addModelId(1L);
queryStructReq.addModelId(2L);
queryStructReq.addModelId(3L);
queryStructReq.setQueryType(QueryType.METRIC);
Aggregator aggregator = new Aggregator();
aggregator.setFunc(AggOperatorEnum.SUM);
aggregator.setColumn("pv");
queryStructReq.setAggregators(Arrays.asList(aggregator));
if (CollectionUtils.isNotEmpty(groups)) {
queryStructReq.setGroups(groups);
queryStructReq.setGroups(Arrays.asList("department"));
}
DateConf dateConf = new DateConf();
dateConf.setDateMode(DateMode.BETWEEN);
dateConf.setStartDate(now().plusDays(-1).toString());
dateConf.setEndDate(now().plusDays(-10).toString());
queryStructReq.setDateInfo(dateConf);
List<Order> orders = new ArrayList<>();
Order order = new Order();
order.setColumn("pv");
orders.add(order);
queryStructReq.setOrders(orders);
return queryStructReq;
}
}