[improvement][headless]Support count(1) as metric calculation expression.

This commit is contained in:
jerryjzhang
2024-12-17 16:36:12 +08:00
parent b4c19533a4
commit 84944fa341
4 changed files with 21 additions and 18 deletions

View File

@@ -17,26 +17,27 @@ import java.util.Set;
public class TableView { public class TableView {
private Set<String> fields = Sets.newHashSet(); private Set<String> fields = Sets.newHashSet();
private List<SqlNode> dimension = new ArrayList<>(); private List<SqlNode> select = Lists.newArrayList();
private List<SqlNode> metric = new ArrayList<>();
private SqlNodeList order; private SqlNodeList order;
private SqlNode fetch; private SqlNode fetch;
private SqlNode offset; private SqlNode offset;
private SqlNode table; private SqlNode table;
private List<SqlNode> select = Lists.newArrayList();
private String alias; private String alias;
private List<String> primary; private List<String> primary;
private ModelResp dataModel; private ModelResp dataModel;
public SqlNode build() { public SqlNode build() {
List<SqlNode> selectNodeList = new ArrayList<>(); List<SqlNode> selectNodeList = new ArrayList<>();
selectNodeList.addAll(metric); if (select.isEmpty()) {
selectNodeList.addAll(dimension); return new SqlSelect(SqlParserPos.ZERO, null,
selectNodeList.addAll(select); new SqlNodeList(SqlNodeList.SINGLETON_STAR, SqlParserPos.ZERO), table, null,
return new SqlSelect(SqlParserPos.ZERO, null, null, null, null, null, order, offset, fetch, null);
new SqlNodeList(selectNodeList, SqlParserPos.ZERO), table, null, null, null, null, } else {
null, order, offset, fetch, null); selectNodeList.addAll(select);
return new SqlSelect(SqlParserPos.ZERO, null,
new SqlNodeList(selectNodeList, SqlParserPos.ZERO), table, null, null, null,
null, null, order, offset, fetch, null);
}
} }
} }

View File

@@ -292,10 +292,10 @@ public class S2VisitsDemo extends S2BaseDemo {
metricReq.setBizName("pv"); metricReq.setBizName("pv");
metricReq.setDescription("一段时间内用户的访问次数"); metricReq.setDescription("一段时间内用户的访问次数");
MetricDefineByFieldParams metricTypeParams = new MetricDefineByFieldParams(); MetricDefineByFieldParams metricTypeParams = new MetricDefineByFieldParams();
metricTypeParams.setExpr("count(imp_date)"); metricTypeParams.setExpr("count(1)");
List<FieldParam> fieldParams = new ArrayList<>(); // List<FieldParam> fieldParams = new ArrayList<>();
fieldParams.add(new FieldParam("imp_date")); // fieldParams.add(new FieldParam("imp_date"));
metricTypeParams.setFields(fieldParams); // metricTypeParams.setFields(fieldParams);
metricReq.setMetricDefineByFieldParams(metricTypeParams); metricReq.setMetricDefineByFieldParams(metricTypeParams);
metricReq.setMetricDefineType(MetricDefineType.FIELD); metricReq.setMetricDefineType(MetricDefineType.FIELD);
metricReq.setRelateDimension(getRelateDimension( metricReq.setRelateDimension(getRelateDimension(

View File

@@ -7,6 +7,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.util.DataUtils; import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junitpioneer.jupiter.SetSystemProperty;
import static java.time.LocalDate.now; import static java.time.LocalDate.now;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -29,6 +30,7 @@ public class QueryBySqlTest extends BaseTest {
} }
@Test @Test
@SetSystemProperty(key = "s2.test", value = "true")
public void testSumQuery() throws Exception { public void testSumQuery() throws Exception {
SemanticQueryResp semanticQueryResp = SemanticQueryResp semanticQueryResp =
queryBySql("SELECT SUM(访问次数) AS 总访问次数 FROM 超音数PVUV统计 "); queryBySql("SELECT SUM(访问次数) AS 总访问次数 FROM 超音数PVUV统计 ");

View File

@@ -47,7 +47,7 @@ public class TranslatorTest extends BaseTest {
.translate(QueryReqBuilder.buildS2SQLReq(sql, dataSetId), User.getDefaultUser()); .translate(QueryReqBuilder.buildS2SQLReq(sql, dataSetId), User.getDefaultUser());
assertNotNull(explain); assertNotNull(explain);
assertNotNull(explain.getQuerySQL()); assertNotNull(explain.getQuerySQL());
assertTrue(explain.getQuerySQL().contains("count(imp_date)")); assertTrue(explain.getQuerySQL().contains("count(1)"));
executeSql(explain.getQuerySQL()); executeSql(explain.getQuerySQL());
} }
@@ -59,7 +59,7 @@ public class TranslatorTest extends BaseTest {
assertNotNull(explain); assertNotNull(explain);
assertNotNull(explain.getQuerySQL()); assertNotNull(explain.getQuerySQL());
assertTrue(explain.getQuerySQL().contains("department")); assertTrue(explain.getQuerySQL().contains("department"));
assertTrue(explain.getQuerySQL().contains("count(imp_date)")); assertTrue(explain.getQuerySQL().contains("count(1)"));
executeSql(explain.getQuerySQL()); executeSql(explain.getQuerySQL());
} }
@@ -73,7 +73,7 @@ public class TranslatorTest extends BaseTest {
assertNotNull(explain); assertNotNull(explain);
assertNotNull(explain.getQuerySQL()); assertNotNull(explain.getQuerySQL());
assertTrue(explain.getQuerySQL().toLowerCase().contains("department")); assertTrue(explain.getQuerySQL().toLowerCase().contains("department"));
assertTrue(explain.getQuerySQL().toLowerCase().contains("count(imp_date)")); assertTrue(explain.getQuerySQL().toLowerCase().contains("count(1)"));
executeSql(explain.getQuerySQL()); executeSql(explain.getQuerySQL());
} }
@@ -87,7 +87,7 @@ public class TranslatorTest extends BaseTest {
assertNotNull(explain); assertNotNull(explain);
assertNotNull(explain.getQuerySQL()); assertNotNull(explain.getQuerySQL());
assertTrue(explain.getQuerySQL().toLowerCase().contains("department")); assertTrue(explain.getQuerySQL().toLowerCase().contains("department"));
assertTrue(explain.getQuerySQL().toLowerCase().contains("count(imp_date)")); assertTrue(explain.getQuerySQL().toLowerCase().contains("count(1)"));
executeSql(explain.getQuerySQL()); executeSql(explain.getQuerySQL());
} }