This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/LTS-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 242f3a051649962fc13061c53700922fa54ff97d Author: Lei Rui <[email protected]> AuthorDate: Mon Jan 29 01:07:03 2024 +0800 M4 --- .../resources/conf/iotdb-engine.properties | 2 +- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 2 +- .../groupby/GroupByWithoutValueFilterDataSet.java | 91 +++++++++++++++++++--- ...MinMax.java => LocalGroupByExecutorTri_M4.java} | 46 +++++++++-- .../groupby/LocalGroupByExecutorTri_MinMax.java | 8 +- .../iotdb/db/integration/tri/MyTest_ILTS.java | 18 ++--- .../iotdb/db/integration/tri/MyTest_LTTB.java | 11 +-- .../tri/{MyTest_MinMax.java => MyTest_M4.java} | 39 +++++----- .../iotdb/db/integration/tri/MyTest_MinMax.java | 4 +- .../db/integration/tri/MyTest_MinMaxLTTB.java | 3 +- 10 files changed, 159 insertions(+), 65 deletions(-) diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties b/server/src/assembly/resources/conf/iotdb-engine.properties index 417f7bca225..80b2c384466 100644 --- a/server/src/assembly/resources/conf/iotdb-engine.properties +++ b/server/src/assembly/resources/conf/iotdb-engine.properties @@ -19,7 +19,7 @@ #################### ### enable Tri #################### -# MinMax, MinMaxLTTB, M4LTTB, LTTB, ILTS +# MinMax, MinMaxLTTB, M4, LTTB, ILTS enable_Tri=MinMax p1t=0 diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index d008f656bc5..2ffc96bf2d0 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -433,7 +433,7 @@ public class IoTDBConfig { private boolean enableCPV = false; - private String enableTri = ""; // MinMax, MinMaxLTTB, M4LTTB, LTTB, ILTS + private String enableTri = ""; // MinMax, MinMaxLTTB, M4, LTTB, ILTS private long p1t; private double p1v; diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java index c349d9dc3c9..c34fd6af987 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java @@ -139,10 +139,9 @@ public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet { return nextWithoutConstraintTri_MinMax(); } else if (CONFIG.getEnableTri().equals("MinMaxLTTB")) { return nextWithoutConstraintTri_MinMaxLTTB(); - } - // } else if (CONFIG.getEnableTri().equals("M4LTTB")) { - // // TODO - else if (CONFIG.getEnableTri().equals("LTTB") || CONFIG.getEnableTri().equals("ILTS")) { + } else if (CONFIG.getEnableTri().equals("M4")) { + return nextWithoutConstraintTri_M4(); + } else if (CONFIG.getEnableTri().equals("LTTB") || CONFIG.getEnableTri().equals("ILTS")) { return nextWithoutConstraintTri_LTTB(); } else { return nextWithoutConstraint_raw(); @@ -165,9 +164,12 @@ public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet { // all bucket results as string in value of MinValueAggrResult List<AggregateResult> aggregations = executor.calcResult(startTime, startTime + interval, startTime, endTime, interval); - series.append(aggregations.get(0).getResult()); + MinMaxInfo minMaxInfo = (MinMaxInfo) aggregations.get(0).getResult(); + series.append(minMaxInfo.val); // 对于LTTB来说,MinValueAggrResult的[t]也无意义,因为只需要val // MIN_MAX_INT64 this type for field.setBinaryV(new Binary(value.toString())) + // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 record.addField(series, TSDataType.MIN_MAX_INT64); } catch (QueryProcessException e) { @@ -347,6 +349,77 @@ public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet { series.append(pnv).append("[").append(pnt).append("]").append(","); // MIN_MAX_INT64 this type for field.setBinaryV(new Binary(value.toString())) + // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 + record.addField(series, TSDataType.MIN_MAX_INT64); + + } catch (QueryProcessException e) { + logger.error("GroupByWithoutValueFilterDataSet execute has error", e); + throw new IOException(e.getMessage(), e); + } + + // in the end, make the next hasNextWithoutConstraint() false + // as we already fetch all here + curStartTime = endTime; + hasCachedTimeInterval = false; + + return record; + } + + public RowRecord nextWithoutConstraintTri_M4() throws IOException { + RowRecord record; + try { + GroupByExecutor executor = null; + for (Entry<PartialPath, GroupByExecutor> pathToExecutorEntry : pathExecutors.entrySet()) { + executor = pathToExecutorEntry.getValue(); // assume only one series here + break; + } + + // concat results into a string + record = new RowRecord(0); + StringBuilder series = new StringBuilder(); + + for (long localCurStartTime = startTime; + localCurStartTime + interval <= endTime; + // 注意有等号!因为左闭右开 + // + interval to make the last bucket complete + // e.g, T=11,nout=3,interval=floor(11/3)=3, + // [0,3),[3,6),[6,9), no need incomplete [9,11) + // then the number of buckets must be Math.floor((endTime-startTime)/interval) + localCurStartTime += interval) { // not change real curStartTime&curEndTime + // attention the returned aggregations need deep copy if using directly + List<AggregateResult> aggregations = + executor.calcResult( + localCurStartTime, + localCurStartTime + interval, + startTime, + endTime, + interval); // attention + + // min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), last_value(s0) + // minValue[bottomTime] + series.append(aggregations.get(0).getResult()).append(","); + // maxValue[topTime] + series.append(aggregations.get(1).getResult()).append(","); + // firstValue[firstTime] + series + .append(aggregations.get(4).getResult()) + .append("[") + .append(aggregations.get(2).getResult()) + .append("]") + .append(","); + // lastValue[lastTime] + series + .append(aggregations.get(5).getResult()) + .append("[") + .append(aggregations.get(3).getResult()) + .append("]") + .append(","); + } + + // MIN_MAX_INT64 this type for field.setBinaryV(new Binary(value.toString())) + // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 record.addField(series, TSDataType.MIN_MAX_INT64); } catch (QueryProcessException e) { @@ -398,6 +471,8 @@ public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet { } // MIN_MAX_INT64 this type for field.setBinaryV(new Binary(value.toString())) + // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 record.addField(series, TSDataType.MIN_MAX_INT64); } catch (QueryProcessException e) { @@ -484,15 +559,13 @@ public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet { if (CONFIG.getEnableTri().equals("MinMax") || CONFIG.getEnableTri().equals("MinMaxLTTB")) { return new LocalGroupByExecutorTri_MinMax( path, allSensors, dataType, context, timeFilter, fileFilter, ascending); - } else if (CONFIG.getEnableTri().equals("M4LTTB")) { - // TODO - return new LocalGroupByExecutor( + } else if (CONFIG.getEnableTri().equals("M4")) { + return new LocalGroupByExecutorTri_M4( path, allSensors, dataType, context, timeFilter, fileFilter, ascending); } else if (CONFIG.getEnableTri().equals("LTTB")) { return new LocalGroupByExecutorTri_LTTB( path, allSensors, dataType, context, timeFilter, fileFilter, ascending); } else if (CONFIG.getEnableTri().equals("ILTS")) { - // TODO return new LocalGroupByExecutorTri_ILTS( path, allSensors, dataType, context, timeFilter, fileFilter, ascending); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_M4.java similarity index 90% copy from server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java copy to server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_M4.java index 445af4d839c..2978c748b54 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_M4.java @@ -57,7 +57,7 @@ import java.util.List; import java.util.ListIterator; import java.util.Set; -public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { +public class LocalGroupByExecutorTri_M4 implements GroupByExecutor { private static final Logger M4_CHUNK_METADATA = LoggerFactory.getLogger("M4_CHUNK_METADATA"); @@ -69,7 +69,7 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { private Filter timeFilter; - public LocalGroupByExecutorTri_MinMax( + public LocalGroupByExecutorTri_M4( PartialPath path, Set<String> allSensors, TSDataType dataType, @@ -275,14 +275,14 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { } // start = System.nanoTime(); - calculateMinMax(currentChunkList, curStartTime, curEndTime); + calculateM4(currentChunkList, curStartTime, curEndTime); // IOMonitor2.addMeasure(Operation.M4_LSM_FP, System.nanoTime() - start); return results; } - private void calculateMinMax( - List<ChunkSuit4Tri> currentChunkList, long curStartTime, long curEndTime) throws IOException { + private void calculateM4(List<ChunkSuit4Tri> currentChunkList, long curStartTime, long curEndTime) + throws IOException { for (ChunkSuit4Tri chunkSuit4Tri : currentChunkList) { Statistics statistics = chunkSuit4Tri.chunkMetadata.getStatistics(); @@ -302,6 +302,10 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { long bottomTime = -1; double maxVal = Double.MIN_VALUE; long topTime = -1; + long firstTime = -1; + double firstValue = 0; + long lastTime = -1; + double lastValue = 0; // 1. load page data if it hasn't been loaded TSDataType dataType = chunkSuit4Tri.chunkMetadata.getDataType(); @@ -335,6 +339,12 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { // 4. update MinMax by traversing points fallen within this bucket ByteBuffer valueBuffer = pageReader.valueBuffer; double v = valueBuffer.getDouble(pageReader.timeBufferLength + i * 8); + if (firstTime < 0) { + firstTime = timestamp; + firstValue = v; + } + lastTime = timestamp; + lastValue = v; if (v < minVal) { minVal = v; bottomTime = timestamp; @@ -347,6 +357,24 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { } // 4. update MinMax by traversing points fallen within this bucket if (topTime >= 0) { + // min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), + // last_value(s0) + // update min_time + results + .get(2) + .updateResultUsingValues(new long[] {firstTime}, 1, new Object[] {firstValue}); + // update first_value + results + .get(4) + .updateResultUsingValues(new long[] {firstTime}, 1, new Object[] {firstValue}); + // update max_time + results + .get(3) + .updateResultUsingValues(new long[] {lastTime}, 1, new Object[] {lastValue}); + // update last_value + results + .get(5) + .updateResultUsingValues(new long[] {lastTime}, 1, new Object[] {lastValue}); // update BP MinValueAggrResult minValueAggrResult = (MinValueAggrResult) results.get(0); minValueAggrResult.updateResult(new MinMaxInfo<>(minVal, bottomTime)); @@ -359,9 +387,11 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { } public boolean canUseStatistics(ChunkSuit4Tri chunkSuit4Tri, long curStartTime, long curEndTime) { - long TP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getTopTimestamp(); - long BP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getBottomTimestamp(); - return TP_t >= curStartTime && TP_t < curEndTime && BP_t >= curStartTime && BP_t < curEndTime; + return false; + // long TP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getTopTimestamp(); + // long BP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getBottomTimestamp(); + // return TP_t >= curStartTime && TP_t < curEndTime && BP_t >= curStartTime && BP_t < + // curEndTime; } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java index 445af4d839c..7cc73b0ac0d 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_MinMax.java @@ -359,9 +359,11 @@ public class LocalGroupByExecutorTri_MinMax implements GroupByExecutor { } public boolean canUseStatistics(ChunkSuit4Tri chunkSuit4Tri, long curStartTime, long curEndTime) { - long TP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getTopTimestamp(); - long BP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getBottomTimestamp(); - return TP_t >= curStartTime && TP_t < curEndTime && BP_t >= curStartTime && BP_t < curEndTime; + return false; + // long TP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getTopTimestamp(); + // long BP_t = chunkSuit4Tri.chunkMetadata.getStatistics().getBottomTimestamp(); + // return TP_t >= curStartTime && TP_t < curEndTime && BP_t >= curStartTime && BP_t < + // curEndTime; } @Override diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java index 7f489adee45..87bba5c8603 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java @@ -42,7 +42,11 @@ import static org.junit.Assert.fail; public class MyTest_ILTS { /* - * Sql format: SELECT min_value(s0), max_value(s0) ROM root.xx group by ([tqs,tqe),IntervalLength). + * Sql format: SELECT min_value(s0) FROM root.vehicle.d0 group by ([2,102),20ms) + * not real min_value here, actually controlled by enableTri="ILTS" + * 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + * 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 + * * Requirements: * (1) Don't change the sequence of the above two aggregates * (2) Assume each chunk has only one page. @@ -112,9 +116,6 @@ public class MyTest_ILTS { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } @@ -146,9 +147,6 @@ public class MyTest_ILTS { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } @@ -214,9 +212,6 @@ public class MyTest_ILTS { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } @@ -251,9 +246,6 @@ public class MyTest_ILTS { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java index c9ff3e446b5..0354dcb57cf 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java @@ -42,7 +42,10 @@ import static org.junit.Assert.fail; public class MyTest_LTTB { /* - * Sql format: SELECT min_value(s0), max_value(s0) ROM root.xx group by ([tqs,tqe),IntervalLength). + * Sql format: SELECT min_value(s0) FROM root.vehicle.d0 group by ([2,106),26ms) + * not real min_value here, actually controlled by enableTri="LTTB" + * 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + * 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 * Requirements: * (1) Don't change the sequence of the above two aggregates * (2) Assume each chunk has only one page. @@ -111,9 +114,6 @@ public class MyTest_LTTB { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } @@ -178,9 +178,6 @@ public class MyTest_LTTB { int i = 0; while (resultSet.next()) { String ans = resultSet.getString(2); - // for LTTB all results are in the value string of MinValueAggrResult - // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义 - ans = ans.substring(0, ans.length() - 3); System.out.println(ans); Assert.assertEquals(res, ans); } diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java similarity index 87% copy from server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java copy to server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java index 88d5bda26df..4cc39f797d3 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java @@ -24,7 +24,6 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.CompactionStrategy; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.jdbc.Config; -import org.apache.iotdb.jdbc.IoTDBStatement; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.junit.After; @@ -40,10 +39,14 @@ import java.util.Locale; import static org.junit.Assert.fail; -public class MyTest_MinMax { +public class MyTest_M4 { /* - * Sql format: SELECT min_value(s0), max_value(s0) ROM root.xx group by ([tqs,tqe),IntervalLength). + * Sql format: SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), + * last_value(s0) FROM root.vehicle.d0 group by ([0,100),25ms) + * enableTri="M4" + * 注意sql第一项一定要是min_value因为以后会用到record.addField(series, TSDataType.MIN_MAX_INT64) + * 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。 * Requirements: * (1) Don't change the sequence of the above two aggregates * (2) Assume each chunk has only one page. @@ -73,7 +76,7 @@ public class MyTest_MinMax { config.setTimestampPrecision("ms"); config.setCompactionStrategy(CompactionStrategy.NO_COMPACTION); - config.setEnableTri("MinMax"); + config.setEnableTri("M4"); // 但是如果走的是unpackOneChunkMetaData(firstChunkMetadata)就没问题, // 因为它直接用chunk元数据去构造pageReader, @@ -98,17 +101,17 @@ public class MyTest_MinMax { @Test public void test1() throws Exception { prepareData1(); - // String[] res = new String[]{"0,1[20],15[2]", "25,8[25],8[25]", "50,3[54],3[54]", - // "75,null,null"}; - String res = "1.0[20],15.0[2],8.0[25],8.0[25],3.0[54],3.0[54],null,null,"; - // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,... + String res = + "1.0[20],15.0[2],5.0[1],1.0[20],8.0[25],8.0[25],8.0[25],8.0[25],3.0[54],3.0[54],3.0[54],3.0[54],null,null,null[null],null[null],"; try (Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); Statement statement = connection.createStatement()) { boolean hasResultSet = statement.execute( - "SELECT min_value(s0), max_value(s0)" + "SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), last_value(s0)" + " FROM root.vehicle.d0 group by ([0,100),25ms)"); + // 注意需要第一项是min_value因为以后会用到record.addField(series, + // TSDataType.MIN_MAX_INT64)把所有序列组装成string放在第一行第二列里 Assert.assertTrue(hasResultSet); try (ResultSet resultSet = statement.getResultSet()) { int i = 0; @@ -119,7 +122,7 @@ public class MyTest_MinMax { Assert.assertEquals(res, ans); } } - System.out.println(((IoTDBStatement) statement).executeFinish()); + // System.out.println(((IoTDBStatement) statement).executeFinish()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); @@ -157,16 +160,14 @@ public class MyTest_MinMax { public void test3() { prepareData3(); - // String[] res = new String[]{"0,1[10],10[2]", "25,2[40],8[30]", "50,4[72],20[62]", - // "75,1[90],11[80]"}; - String res = "1.0[10],10.0[2],2.0[40],8.0[30],4.0[72],20.0[62],1.0[90],11.0[80],"; - // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,... + String res = + "1.0[10],10.0[2],5.0[1],4.0[22],2.0[40],8.0[30],8.0[30],2.0[40],4.0[72],20.0[62],5.0[55],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],"; try (Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); Statement statement = connection.createStatement()) { boolean hasResultSet = statement.execute( - "SELECT min_value(s0), max_value(s0)" + "SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), last_value(s0)" + " FROM root.vehicle.d0 group by ([0,100),25ms)"); // don't change the // sequence!!! @@ -229,16 +230,14 @@ public class MyTest_MinMax { public void test3_2() { prepareData3_2(); - // String[] res = new String[]{"0,1[10],10[2]", "25,null,null", "50,4[72],20[62]", - // "75,1[90],11[80]"}; - String res = "1.0[10],10.0[2],null,null,4.0[72],20.0[62],1.0[90],11.0[80],"; - // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,... + String res = + "1.0[10],10.0[2],5.0[1],5.0[20],null,null,null[null],null[null],4.0[72],20.0[62],15.0[60],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],"; try (Connection connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); Statement statement = connection.createStatement()) { boolean hasResultSet = statement.execute( - "SELECT min_value(s0), max_value(s0)" + "SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), first_value(s0), last_value(s0)" + " FROM root.vehicle.d0 group by ([0,100),25ms)"); // don't change the // sequence!!! diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java index 88d5bda26df..06b0432142d 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java @@ -24,7 +24,6 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.compaction.CompactionStrategy; import org.apache.iotdb.db.utils.EnvironmentUtils; import org.apache.iotdb.jdbc.Config; -import org.apache.iotdb.jdbc.IoTDBStatement; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.junit.After; @@ -44,6 +43,7 @@ public class MyTest_MinMax { /* * Sql format: SELECT min_value(s0), max_value(s0) ROM root.xx group by ([tqs,tqe),IntervalLength). + * enableTri="MinMax" * Requirements: * (1) Don't change the sequence of the above two aggregates * (2) Assume each chunk has only one page. @@ -119,7 +119,7 @@ public class MyTest_MinMax { Assert.assertEquals(res, ans); } } - System.out.println(((IoTDBStatement) statement).executeFinish()); + // System.out.println(((IoTDBStatement) statement).executeFinish()); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); diff --git a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java index 2dfdd40ea95..3d3491cccb7 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java @@ -42,7 +42,8 @@ import static org.junit.Assert.fail; public class MyTest_MinMaxLTTB { /* - * Sql format: SELECT min_value(s0), max_value(s0) ROM root.xx group by ([tqs,tqe),IntervalLength). + * Sql format: SELECT min_value(s0), max_value(s0) FROM root.vehicle.d0 group by ([100,2100),250ms) + * enableTri="MinMaxLTTB" * Requirements: * (1) Don't change the sequence of the above two aggregates * (2) Assume each chunk has only one page.
