blob: 30cd2d37d0e27e62cd205cb90a6f645f445d4346 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.kylin.metadata.query;
import static org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO.fillZeroForQueryStatistics;
import static org.apache.kylin.metadata.query.RDBMSQueryHistoryDAO.largeSplitToSmallTask;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
import org.apache.kylin.common.util.Pair;
import org.apache.kylin.common.util.TimeUtil;
import org.apache.kylin.junit.TimeZoneTestRunner;
import org.apache.kylin.metadata.query.util.QueryHisStoreUtil;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.kylin.guava30.shaded.common.collect.Lists;
@RunWith(TimeZoneTestRunner.class)
public class RDBMSQueryHistoryDaoTest extends NLocalFileMetadataTestCase {
String PROJECT = "default";
public static final String WEEK = "week";
public static final String DAY = "day";
public static final String MONTH = "month";
public static final String NORMAL_USER = "normal_user";
public static final String ADMIN = "ADMIN";
private RDBMSQueryHistoryDAO queryHistoryDAO;
@Before
public void setup() throws Exception {
createTestMetadata();
getTestConfig().setMetadataUrl(
"test@jdbc,driverClassName=org.h2.Driver,url=jdbc:h2:mem:db_default;DB_CLOSE_DELAY=-1,username=sa,password=");
queryHistoryDAO = RDBMSQueryHistoryDAO.getInstance();
}
@After
public void destroy() throws Exception {
queryHistoryDAO.deleteAllQueryHistory();
cleanupTestMetadata();
}
@Test
public void testInsert() {
List<QueryMetrics> queryMetricsList = Lists.newArrayList();
for (int i = 0; i < 100; i++) {
queryMetricsList.add(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
}
queryHistoryDAO.insert(queryMetricsList);
List<QueryHistory> queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 200, "default");
Assert.assertEquals(100, queryHistoryList.size());
}
@Test
public void testGetQueryHistoriesFilterByIsIndexHit() throws Exception {
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, false, "otherProject", true));
// filter all
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
// filter hit index
queryHistoryRequest.setRealizations(Lists.newArrayList("modelName"));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(1, queryHistoryList.size());
// filter not hit index
queryHistoryRequest.setRealizations(Lists.newArrayList("pushdown"));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(2, queryHistoryList.size());
// filter all
queryHistoryRequest.setRealizations(Lists.newArrayList("modelName", "pushdown"));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
}
@Test
public void testGetQueryHistoriesFilterByQueryTime() throws Exception {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 1L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 1L, false, PROJECT, true));
// 2021-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1611933912000L, 1L, false, PROJECT, true));
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setStartTimeFrom("1580397912000");
queryHistoryRequest.setStartTimeTo("1580484312000");
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(1, queryHistoryList.size());
}
@Test
public void testGetQueryHistoriesFilterByDuration() throws Exception {
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1000L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 2000L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 3000L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 4000L, false, PROJECT, true));
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setLatencyFrom("1");
queryHistoryRequest.setLatencyTo("4");
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
queryHistoryRequest.setLatencyFrom("2");
queryHistoryRequest.setLatencyTo("3");
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(1, queryHistoryList.size());
}
@Test
public void testGetQueryHistoriesFilterBySql() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSql("select 2 LIMIT 500\n");
queryHistoryDAO.insert(queryMetrics1);
QueryMetrics queryMetrics2 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics2.setSql("select 1 LIMIT 500\n");
queryHistoryDAO.insert(queryMetrics2);
QueryMetrics queryMetrics3 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics3.setSql("select count(*) from KYLIN_SALES group by BUYER_ID LIMIT 500");
queryHistoryDAO.insert(queryMetrics3);
QueryMetrics queryMetrics4 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics4.setSql("select count(*) from KYLIN_SALES");
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setSql("count");
List<QueryHistory> queryHistoryList1 = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10,
0);
Assert.assertEquals(2, queryHistoryList1.size());
queryHistoryRequest.setSql("LIMIT");
List<QueryHistory> queryHistoryList2 = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10,
0);
Assert.assertEquals(3, queryHistoryList2.size());
queryHistoryRequest.setSql("select 1");
List<QueryHistory> queryHistoryList3 = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10,
0);
Assert.assertEquals(1, queryHistoryList3.size());
queryHistoryRequest.setSql("6a9a151f");
List<QueryHistory> queryHistoryList4 = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10,
0);
Assert.assertEquals(4, queryHistoryList4.size());
for (int i = 0; i < 30; i++) {
queryHistoryDAO.insert(queryMetrics1);
}
Assert.assertEquals(10, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0).size());
Assert.assertEquals(10, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 1).size());
Assert.assertEquals(10, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 2).size());
Assert.assertEquals(4, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 3).size());
Assert.assertEquals(20, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 20, 0).size());
Assert.assertEquals(14, queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 20, 1).size());
}
@Test
public void getQueryHistoriesById() {
Assert.assertEquals(1, queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true)));
Assert.assertEquals(1, queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true)));
List<QueryHistory> queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 10, "default");
Assert.assertEquals(2, queryHistoryList.size());
Assert.assertEquals("6a9a151f-f992-4d52-a8ec-8ff3fd3de6b1", queryHistoryList.get(0).getQueryId());
Assert.assertNotNull(queryHistoryList.get(0).getQueryHistoryInfo());
}
@Test
public void testGetQueryHistoriesSize() throws Exception {
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
long queryHistoriesSize = queryHistoryDAO.getQueryHistoriesSize(queryHistoryRequest, PROJECT);
Assert.assertEquals(2, queryHistoriesSize);
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoriesSize = queryHistoryDAO.getQueryHistoriesSize(queryHistoryRequest, PROJECT);
Assert.assertEquals(5, queryHistoriesSize);
}
@Test
public void testGetQueryCountByTime() throws Exception {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 1L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 1L, false, PROJECT, true));
// 2021-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1611933912000L, 1L, false, PROJECT, true));
// filter from 2020-01-26 23:25:11 to 2020-01-31 23:25:13
List<QueryStatistics> dayQueryStatistics = queryHistoryDAO.getQueryCountByTime(1580052311000L, 1580484313000L,
"day", PROJECT);
Assert.assertEquals(3, dayQueryStatistics.size());
Assert.assertEquals("2020-01-31T00:00:00Z", dayQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(0).getCount());
Assert.assertEquals("2020-01-29T00:00:00Z", dayQueryStatistics.get(1).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(1).getCount());
Assert.assertEquals("2020-01-30T00:00:00Z", dayQueryStatistics.get(2).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(2).getCount());
fillZeroForQueryStatistics(dayQueryStatistics, 1580052311000L, 1580484313000L, DAY);
Assert.assertEquals("2020-01-31T00:00:00Z", dayQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(0).getCount());
Assert.assertEquals("2020-01-29T00:00:00Z", dayQueryStatistics.get(1).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(1).getCount());
Assert.assertEquals("2020-01-30T00:00:00Z", dayQueryStatistics.get(2).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(2).getCount());
Assert.assertEquals("2020-01-26T00:00:00Z", dayQueryStatistics.get(3).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(3).getCount());
Assert.assertEquals("2020-01-27T00:00:00Z", dayQueryStatistics.get(4).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(4).getCount());
Assert.assertEquals("2020-01-28T00:00:00Z", dayQueryStatistics.get(5).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(5).getCount());
List<QueryStatistics> weekQueryStatistics = queryHistoryDAO.getQueryCountByTime(1580052311000L, 1580484313000L,
"week", PROJECT);
Assert.assertEquals(1, weekQueryStatistics.size());
Assert.assertEquals("2020-01-26T00:00:00Z", weekQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(3, weekQueryStatistics.get(0).getCount());
fillZeroForQueryStatistics(weekQueryStatistics, 1580052311000L, 1580484313000L, WEEK);
Assert.assertEquals(1, weekQueryStatistics.size());
Assert.assertEquals("2020-01-26T00:00:00Z", weekQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(3, weekQueryStatistics.get(0).getCount());
List<QueryStatistics> monthQueryStatistics = queryHistoryDAO.getQueryCountByTime(1580052311000L, 1580484313000L,
"month", PROJECT);
Assert.assertEquals(1, monthQueryStatistics.size());
Assert.assertEquals(3, monthQueryStatistics.get(0).getCount());
fillZeroForQueryStatistics(monthQueryStatistics, 1580052311000L, 1580484313000L, "month");
Assert.assertEquals(3, monthQueryStatistics.get(0).getCount());
}
@Test
public void testGetQueryRealizationByTime() {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 1L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 1L, false, PROJECT, true));
// 2021-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1611933912000L, 1L, false, PROJECT, true));
// filter from 2020-01-26 23:25:11 to 2020-01-31 23:25:13
List<QueryStatistics> dayQueryStatistics = queryHistoryDAO.getQueryCountRealizationByTime(1580052311000L,
1580484313000L, DAY, PROJECT);
Assert.assertEquals(0, dayQueryStatistics.size());
List<QueryStatistics> weekQueryStatistics = queryHistoryDAO.getQueryCountRealizationByTime(1580052311000L,
1580484313000L, WEEK, PROJECT);
Assert.assertEquals(0, weekQueryStatistics.size());
List<QueryStatistics> monthQueryStatistics = queryHistoryDAO.getQueryCountRealizationByTime(1580052311000L,
1580484313000L, MONTH, PROJECT);
Assert.assertEquals(0, monthQueryStatistics.size());
dayQueryStatistics = queryHistoryDAO.getAvgDurationRealizationByTime(1580052311000L, 1580484313000L,
DAY, PROJECT);
Assert.assertEquals(0, dayQueryStatistics.size());
weekQueryStatistics = queryHistoryDAO.getAvgDurationRealizationByTime(1580052311000L, 1580484313000L,
WEEK, PROJECT);
Assert.assertEquals(0, weekQueryStatistics.size());
monthQueryStatistics = queryHistoryDAO.getAvgDurationRealizationByTime(1580052311000L, 1580484313000L,
WEEK, PROJECT);
Assert.assertEquals(0, monthQueryStatistics.size());
QueryStatistics statistics = queryHistoryDAO.getQueryCountAndAvgDurationRealization(1580052311000L, 1580484313000L,
PROJECT);
Assert.assertEquals(0, statistics.getCount());
Assert.assertEquals(0, statistics.getMeanDuration(), 0.1);
}
@Test
public void testGetAvgDurationByTime() throws Exception {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
// 2021-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1611933912000L, 1L, false, PROJECT, true));
// filter from 2020-01-26 23:25:11 to 2020-01-31 23:25:13
List<QueryStatistics> dayQueryStatistics = queryHistoryDAO.getAvgDurationByTime(1580052311000L, 1580484313000L,
"day", PROJECT);
Assert.assertEquals(3, dayQueryStatistics.size());
Assert.assertEquals("2020-01-31T00:00:00Z", dayQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(3, dayQueryStatistics.get(0).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-29T00:00:00Z", dayQueryStatistics.get(1).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(1).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-30T00:00:00Z", dayQueryStatistics.get(2).getTime().toString());
Assert.assertEquals(2, dayQueryStatistics.get(2).getMeanDuration(), 0.1);
fillZeroForQueryStatistics(dayQueryStatistics, 1580052311000L, 1580484313000L, DAY);
Assert.assertEquals("2020-01-31T00:00:00Z", dayQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(3, dayQueryStatistics.get(0).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-29T00:00:00Z", dayQueryStatistics.get(1).getTime().toString());
Assert.assertEquals(1, dayQueryStatistics.get(1).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-30T00:00:00Z", dayQueryStatistics.get(2).getTime().toString());
Assert.assertEquals(2, dayQueryStatistics.get(2).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-26T00:00:00Z", dayQueryStatistics.get(3).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(3).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-27T00:00:00Z", dayQueryStatistics.get(4).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(4).getMeanDuration(), 0.1);
Assert.assertEquals("2020-01-28T00:00:00Z", dayQueryStatistics.get(5).getTime().toString());
Assert.assertEquals(0, dayQueryStatistics.get(5).getMeanDuration(), 0.1);
List<QueryStatistics> weekQueryStatistics = queryHistoryDAO.getAvgDurationByTime(1580052311000L, 1580484313000L,
"week", PROJECT);
Assert.assertEquals(1, weekQueryStatistics.size());
Assert.assertEquals("2020-01-26T00:00:00Z", weekQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(2, weekQueryStatistics.get(0).getMeanDuration(), 0.1);
fillZeroForQueryStatistics(weekQueryStatistics, 1580052311000L, 1580484313000L, WEEK);
Assert.assertEquals(1, weekQueryStatistics.size());
Assert.assertEquals("2020-01-26T00:00:00Z", weekQueryStatistics.get(0).getTime().toString());
Assert.assertEquals(2, weekQueryStatistics.get(0).getMeanDuration(), 0.1);
List<QueryStatistics> monthQueryStatistics = queryHistoryDAO.getAvgDurationByTime(1580052311000L,
1580484313000L, "month", PROJECT);
Assert.assertEquals(1, monthQueryStatistics.size());
Assert.assertEquals(2, monthQueryStatistics.get(0).getMeanDuration(), 0.1);
fillZeroForQueryStatistics(monthQueryStatistics, 1580052311000L, 1580484313000L, "month");
Assert.assertEquals(2, monthQueryStatistics.get(0).getMeanDuration(), 0.1);
}
@Test
public void testDeleteQueryHistories() throws Exception {
overwriteSystemProp("kylin.query.queryhistory.max-size", "2");
overwriteSystemProp("kylin.query.queryhistory.project-max-size", "5");
String PROJECT_V1 = PROJECT + "_v1";
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
// 2030-01-28 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895844312000L, 3L, false, PROJECT_V1, true));
// 2030-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, PROJECT, true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(3, queryHistoryList.size());
// after delete
QueryHisStoreUtil.cleanQueryHistory();
queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT_V1);
Assert.assertEquals(1, queryHistoryList.size());
Assert.assertEquals(1895844312000L, queryHistoryList.get(0).getQueryTime());
queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(1, queryHistoryList.size());
Assert.assertEquals(1895930712000L, queryHistoryList.get(0).getQueryTime());
}
@Test
public void testDeleteQueryHistoriesIfRetainTimeReached() throws Exception {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
// 2030-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, PROJECT, true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(4, queryHistoryList.size());
// after delete
queryHistoryDAO.deleteQueryHistoriesIfRetainTimeReached();
queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(1, queryHistoryList.size());
Assert.assertEquals(1895930712000L, queryHistoryList.get(0).getQueryTime());
}
@Test
public void testDeleteQueryHistoriesIfMaxSizeReached() throws Exception {
overwriteSystemProp("kylin.query.queryhistory.max-size", "2");
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
// 2030-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, PROJECT, true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(4, queryHistoryList.size());
// after delete
queryHistoryDAO.deleteQueryHistoriesIfMaxSizeReached();
queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(2, queryHistoryList.size());
// test delete empty
queryHistoryDAO.deleteQueryHistoriesIfMaxSizeReached();
queryHistoryList = queryHistoryDAO.queryQueryHistoriesByIdOffset(0, 100, PROJECT);
Assert.assertEquals(2, queryHistoryList.size());
}
@Test
public void testDeleteQueryHistoriesIfProjectMaxSizeReached() throws Exception {
overwriteSystemProp("kylin.query.queryhistory.project-max-size", "2");
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
// 2030-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, PROJECT, true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(4, queryHistoryList.size());
// after delete
QueryHisStoreUtil.cleanQueryHistory(PROJECT, 4);
queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(2, queryHistoryList.size());
// test delete empty
QueryHisStoreUtil.cleanQueryHistory(PROJECT, 2);
queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(2, queryHistoryList.size());
}
@Test
public void testDropProjectMeasurement() throws Exception {
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, "other", true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(4, queryHistoryList.size());
// after delete
queryHistoryDAO.dropProjectMeasurement(PROJECT);
queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(1, queryHistoryList.size());
Assert.assertEquals("other", queryHistoryList.get(0).getProjectName());
}
@Test
public void testDeleteQueryHistoryForProject() throws Exception {
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1L, true, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3L, false, PROJECT, true));
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 1L, false, "other", true));
// before delete
List<QueryHistory> queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(4, queryHistoryList.size());
// after delete
queryHistoryDAO.deleteQueryHistoryByProject(PROJECT);
queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(1, queryHistoryList.size());
Assert.assertEquals("other", queryHistoryList.get(0).getProjectName());
}
@Test
public void testUpdateQueryHistoryInfo() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, false, PROJECT, true);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, "other", true);
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
List<Pair<Long, QueryHistoryInfo>> qhInfoList = Lists.newArrayList();
QueryHistoryInfo queryHistoryInfo1 = new QueryHistoryInfo(true, 3, true);
queryHistoryInfo1.setState(QueryHistoryInfo.HistoryState.SUCCESS);
qhInfoList.add(new Pair<>(queryMetrics1.id, queryHistoryInfo1));
QueryHistoryInfo queryHistoryInfo2 = new QueryHistoryInfo(true, 3, true);
queryHistoryInfo2.setState(QueryHistoryInfo.HistoryState.FAILED);
qhInfoList.add(new Pair<>(queryMetrics2.id, queryHistoryInfo2));
queryHistoryDAO.batchUpdateQueryHistoriesInfo(qhInfoList);
// after update
List<QueryHistory> queryHistoryList = queryHistoryDAO.getAllQueryHistories();
Assert.assertEquals(queryMetrics1.id, queryHistoryList.get(2).getId());
Assert.assertEquals(QueryHistoryInfo.HistoryState.SUCCESS,
queryHistoryList.get(2).getQueryHistoryInfo().getState());
Assert.assertEquals(queryMetrics2.id, queryHistoryList.get(3).getId());
Assert.assertEquals(QueryHistoryInfo.HistoryState.FAILED,
queryHistoryList.get(3).getQueryHistoryInfo().getState());
Assert.assertEquals(queryMetrics3.id, queryHistoryList.get(0).getId());
Assert.assertEquals(QueryHistoryInfo.HistoryState.PENDING,
queryHistoryList.get(0).getQueryHistoryInfo().getState());
Assert.assertEquals(queryMetrics4.id, queryHistoryList.get(1).getId());
Assert.assertEquals(QueryHistoryInfo.HistoryState.PENDING,
queryHistoryList.get(1).getQueryHistoryInfo().getState());
}
@Test
public void testGetByQueryId() throws Exception {
QueryMetrics queryMetrics = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryHistoryDAO.insert(queryMetrics);
QueryHistory queryHistory = queryHistoryDAO.getByQueryId("6a9a151f-f992-4d52-a8ec-8ff3fd3de6b1");
Assert.assertEquals(queryMetrics.id, queryHistory.getId());
}
@Test
public void testGetRetainTime() throws Exception {
long retainTime = RDBMSQueryHistoryDAO.getRetainTime();
long currentTime = System.currentTimeMillis();
Assert.assertEquals(30, (currentTime - retainTime) / (24 * 60 * 60 * 1000L));
}
@Test
public void testNonAdminUserGetQueryHistories() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSubmitter(ADMIN);
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setSubmitter(ADMIN);
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, false, PROJECT, true);
queryMetrics3.setSubmitter(NORMAL_USER);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, "other", true);
queryMetrics4.setSubmitter(NORMAL_USER);
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
// system-admin and project-admin can get all query history on current project
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(NORMAL_USER);
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
// non-admin can only get self query history on current project
queryHistoryRequest.setAdmin(false);
queryHistoryRequest.setUsername(NORMAL_USER);
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(1, queryHistoryList.size());
}
@Test
public void testQueryHistoryFilter() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSubmitter(ADMIN);
queryMetrics1.setEngineType("RDBMS");
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setSubmitter(NORMAL_USER);
queryMetrics2.setEngineType("HIVE");
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, true, PROJECT, true);
queryMetrics3.setSubmitter(NORMAL_USER);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, "other", true);
queryMetrics4.setSubmitter(NORMAL_USER);
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
// system-admin and project-admin can get all query history on current project
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setFilterSubmitter(Lists.newArrayList(NORMAL_USER));
queryHistoryRequest.setRealizations(Lists.newArrayList("RDBMS", "HIVE", "ut_inner_join_cube_partial"));
queryHistoryRequest.setFilterModelIds(Lists.newArrayList("82fa7671-a935-45f5-8779-85703601f49a.json"));
queryHistoryRequest.setSubmitterExactlyMatch(true);
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 3, 0);
Assert.assertEquals(2, queryHistoryList.size());
queryHistoryRequest.setRealizations(Lists.newArrayList("pushdown", "modelName"));
try {
queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 3, 0);
} catch (Exception e) {
Assert.assertTrue(e instanceof IllegalArgumentException);
}
queryHistoryRequest.setRealizations(Lists.newArrayList("HIVE", "modelName"));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 3, 0);
Assert.assertEquals(2, queryHistoryList.size());
queryHistoryRequest.setRealizations(Lists.newArrayList("HIVE", "pushdown"));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 3, 0);
Assert.assertEquals(2, queryHistoryList.size());
queryHistoryRequest.setFilterSubmitter(Lists.newArrayList(NORMAL_USER, ADMIN));
queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 3, 0);
Assert.assertEquals(3, queryHistoryList.size());
}
@Test
public void testGetQueryHistorySubmitters() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSubmitter(ADMIN);
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setSubmitter(ADMIN);
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, false, PROJECT, true);
queryMetrics3.setSubmitter(NORMAL_USER);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, "other", true);
queryMetrics4.setSubmitter(NORMAL_USER);
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
// system-admin and project-admin can get all query history on current project
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesSubmitters(queryHistoryRequest, 3);
Assert.assertEquals(2, queryHistoryList.size());
}
@Test
public void testGetQueryHistoryModelNames() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSubmitter(ADMIN);
queryMetrics1.setEngineType("RDBMS");
queryMetrics1.setQueryHistoryInfo(new QueryHistoryInfo());
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setSubmitter(ADMIN);
queryMetrics2.setEngineType("HIVE");
queryMetrics2.setQueryHistoryInfo(new QueryHistoryInfo());
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, false, PROJECT, true);
queryMetrics3.setSubmitter(NORMAL_USER);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, "other", true);
queryMetrics4.setSubmitter(NORMAL_USER);
queryMetrics4.setEngineType("CONSTANTS");
queryMetrics4.setQueryHistoryInfo(new QueryHistoryInfo());
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
// system-admin and project-admin can get all query history on current project
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
List<QueryStatistics> modelList = queryHistoryDAO.getQueryHistoriesModelIds(queryHistoryRequest);
Assert.assertEquals(2, modelList.size());
Assert.assertEquals("RDBMS", modelList.get(0).getEngineType());
Assert.assertEquals("HIVE", modelList.get(1).getEngineType());
}
@Test
public void testReadWriteJsonForQueryHistory() throws Exception {
// write
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setQueryHistoryInfo(new QueryHistoryInfo(true, 3, true));
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setQueryHistoryInfo(new QueryHistoryInfo(false, 5, false));
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
// read
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setProject(PROJECT);
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(2, queryHistoryList.size());
Assert.assertFalse(queryHistoryList.get(0).getQueryHistoryInfo().isExactlyMatch());
Assert.assertEquals(5, queryHistoryList.get(0).getQueryHistoryInfo().getScanSegmentNum());
Assert.assertEquals("PENDING", queryHistoryList.get(0).getQueryHistoryInfo().getState().toString());
Assert.assertFalse(queryHistoryList.get(0).getQueryHistoryInfo().isExecutionError());
Assert.assertTrue(queryHistoryList.get(1).getQueryHistoryInfo().isExactlyMatch());
Assert.assertEquals(3, queryHistoryList.get(1).getQueryHistoryInfo().getScanSegmentNum());
Assert.assertEquals("PENDING", queryHistoryList.get(1).getQueryHistoryInfo().getState().toString());
Assert.assertTrue(queryHistoryList.get(1).getQueryHistoryInfo().isExecutionError());
}
@Test
public void testGetQueryCountAndAvgDuration() throws Exception {
// 2020-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580311512000L, 1000L, true, PROJECT, true));
// 2020-01-30 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580397912000L, 2000L, false, PROJECT, true));
// 2020-01-31 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1580484312000L, 3000L, false, PROJECT, true));
// 2030-01-29 23:25:12
queryHistoryDAO.insert(createQueryMetrics(1895930712000L, 4000L, false, PROJECT, true));
// happy pass
QueryStatistics statistics = queryHistoryDAO.getQueryCountAndAvgDuration(1580311512000L, 1580484312000L,
PROJECT);
Assert.assertEquals(2, statistics.getCount());
Assert.assertEquals(1500, statistics.getMeanDuration(), 0.1);
// no query history for this time period
statistics = queryHistoryDAO.getQueryCountAndAvgDuration(1560311512000L, 1570311512000L, PROJECT);
Assert.assertEquals(0, statistics.getCount());
Assert.assertEquals(0, statistics.getMeanDuration(), 0.1);
}
@Test
public void testGetQueryHistoriesFilterExcludeRealization() throws Exception {
QueryMetrics queryMetrics1 = createQueryMetrics(1580311512000L, 1L, true, PROJECT, true);
queryMetrics1.setSubmitter(ADMIN);
queryMetrics1.setEngineType("RDBMS");
QueryMetrics queryMetrics2 = createQueryMetrics(1580397912000L, 2L, false, PROJECT, true);
queryMetrics2.setSubmitter(NORMAL_USER);
queryMetrics2.setEngineType("HIVE");
QueryMetrics queryMetrics3 = createQueryMetrics(1580484312000L, 3L, true, PROJECT, true);
queryMetrics3.setSubmitter(NORMAL_USER);
QueryMetrics queryMetrics4 = createQueryMetrics(1895930712000L, 1L, false, PROJECT, true);
queryMetrics4.setSubmitter(NORMAL_USER);
queryMetrics4.setEngineType("CONSTANTS");
queryHistoryDAO.insert(queryMetrics1);
queryHistoryDAO.insert(queryMetrics2);
queryHistoryDAO.insert(queryMetrics3);
queryHistoryDAO.insert(queryMetrics4);
QueryHistoryRequest queryHistoryRequest = new QueryHistoryRequest();
queryHistoryRequest.setProject(PROJECT);
queryHistoryRequest.setAdmin(true);
queryHistoryRequest.setUsername(ADMIN);
queryHistoryRequest.setRealizations(Lists.newArrayList("RDBMS", "HIVE", "CONSTANTS", "modelName"));
queryHistoryRequest.setExcludeRealization(Lists.newArrayList("ut_inner_join_cube_partial"));
queryHistoryRequest.setExcludeFilterModelIds(Lists.newArrayList("82fa7671-a935-45f5-8779-85703601f49a.json"));
List<QueryHistory> queryHistoryList = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10, 0);
Assert.assertEquals(3, queryHistoryList.size());
queryHistoryRequest.setExcludeRealization(null);
queryHistoryRequest.setExcludeFilterModelIds(null);
List<QueryHistory> queryHistoryList2 = queryHistoryDAO.getQueryHistoriesByConditions(queryHistoryRequest, 10,
0);
Assert.assertEquals(4, queryHistoryList2.size());
}
@Test
public void testGetQueryDailyStatistic() {
// 2022-05-13 10:00:00
queryHistoryDAO.insert(createQueryMetrics(1652407200000L, 1000L, true, PROJECT, true));
// 2022-05-13 16:00:00
queryHistoryDAO.insert(createQueryMetrics(1652428800000L, 2000L, true, PROJECT, true));
// 2022-05-12 16:00:00
queryHistoryDAO.insert(createQueryMetrics(1652342400000L, 5000L, true, PROJECT, true));
List<QueryDailyStatistic> queryDailyStatistic = queryHistoryDAO.getQueryDailyStatistic(Long.MIN_VALUE,
Long.MAX_VALUE);
Assert.assertEquals(2, queryDailyStatistic.size());
Assert.assertEquals(3000L, queryDailyStatistic.get(0).getTotalDuration());
Assert.assertEquals(2L, queryDailyStatistic.get(0).getTotalNum());
Assert.assertEquals(1L, queryDailyStatistic.get(1).getTotalNum());
Assert.assertEquals(2L, queryDailyStatistic.get(0).getLt3sNum());
}
@Test
public void testLargeSplitToSmallTask() {
AtomicInteger executions = new AtomicInteger(0);
AtomicInteger actualSize = new AtomicInteger(0);
largeSplitToSmallTask(105, 10, currentCount -> {
executions.incrementAndGet();
actualSize.addAndGet(currentCount);
if (currentCount < 10) {
return currentCount - 1;
} else {
return currentCount;
}
}, "Test LargeSplitToSmall Task");
Assert.assertEquals(105, actualSize.get());
Assert.assertEquals(11, executions.get());
}
public static QueryMetrics createQueryMetrics(long queryTime, long duration, boolean indexHit, String project,
boolean hitModel) {
QueryMetrics queryMetrics = new QueryMetrics("6a9a151f-f992-4d52-a8ec-8ff3fd3de6b1", "192.168.1.6:7070");
queryMetrics.setSql("select LSTG_FORMAT_NAME from KYLIN_SALES\nLIMIT 500");
queryMetrics.setSqlPattern("SELECT \"LSTG_FORMAT_NAME\"\nFROM \"KYLIN_SALES\"\nLIMIT 1");
queryMetrics.setQueryDuration(duration);
queryMetrics.setTotalScanBytes(863L);
queryMetrics.setTotalScanCount(4096L);
queryMetrics.setResultRowCount(500L);
queryMetrics.setSubmitter("ADMIN");
queryMetrics.setErrorType("");
queryMetrics.setCacheHit(true);
queryMetrics.setIndexHit(indexHit);
queryMetrics.setQueryTime(queryTime);
queryMetrics.setQueryFirstDayOfMonth(TimeUtil.getMonthStart(queryTime));
queryMetrics.setQueryFirstDayOfWeek(TimeUtil.getWeekStart(queryTime));
queryMetrics.setQueryDay(TimeUtil.getDayStart(queryTime));
queryMetrics.setProjectName(project);
queryMetrics.setQueryStatus("SUCCEEDED");
QueryHistoryInfo queryHistoryInfo = new QueryHistoryInfo(true, 5, true);
if (hitModel) {
QueryMetrics.RealizationMetrics realizationMetrics = new QueryMetrics.RealizationMetrics("20000000001",
"Table Index", "771157c2-e6e2-4072-80c4-8ec25e1a83ea",
Lists.newArrayList("[DEFAULT.TEST_ACCOUNT]"));
realizationMetrics.setQueryId("6a9a151f-f992-4d52-a8ec-8ff3fd3de6b1");
realizationMetrics.setDuration(4591L);
realizationMetrics.setQueryTime(1586405449387L);
realizationMetrics.setProjectName(project);
realizationMetrics.setModelId("82fa7671-a935-45f5-8779-85703601f49a.json");
realizationMetrics.setSnapshots(
Lists.newArrayList("DEFAULT.TEST_KYLIN_ACCOUNT", "DEFAULT.TEST_COUNTRY"));
List<QueryMetrics.RealizationMetrics> realizationMetricsList = Lists.newArrayList();
realizationMetricsList.add(realizationMetrics);
realizationMetricsList.add(realizationMetrics);
queryHistoryInfo.setRealizationMetrics(realizationMetricsList);
} else {
queryMetrics.setEngineType(QueryHistory.EngineType.CONSTANTS.toString());
}
queryMetrics.setQueryHistoryInfo(queryHistoryInfo);
return queryMetrics;
}
}