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 5f781f9072ba06656e7ce7aa219af731a368ec4e Author: Lei Rui <[email protected]> AuthorDate: Wed Jan 31 19:15:02 2024 +0800 add avg meta acc --- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 6 ++-- .../groupby/LocalGroupByExecutorTri_ILTS.java | 37 ++++++++++++++-------- .../groupby/LocalGroupByExecutorTri_LTTB.java | 2 +- .../iotdb/db/integration/tri/MyTest_ILTS.java | 34 +++++++++++++++++++- 4 files changed, 60 insertions(+), 19 deletions(-) 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 902b48ad0b6..9d749c88d3b 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 @@ -440,7 +440,7 @@ public class IoTDBConfig { private long pnt; private double pnv; - private int rps = 2; // fixed + private int rps = 2; // fixed, do not change public int getNumIterations() { return numIterations; @@ -450,7 +450,7 @@ public class IoTDBConfig { this.numIterations = numIterations; } - private int numIterations = 8; + private int numIterations = 4; public boolean isAcc_avg() { return acc_avg; @@ -476,7 +476,7 @@ public class IoTDBConfig { this.acc_convex = acc_convex; } - private boolean acc_avg = false; + private boolean acc_avg = true; private boolean acc_rectangle = true; private boolean acc_convex = false; diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java index e44150548ab..81f9af04262 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java @@ -70,8 +70,8 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { private final long pnt = CONFIG.getPnt(); private final double pnv = CONFIG.getPnv(); - private long lt = p1t; - private double lv = p1v; + private long lt; + private double lv; private final int N1; // 分桶数 @@ -179,12 +179,17 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { long[] lastIter_t = new long[N1]; // N1不包括全局首尾点 double[] lastIter_v = new double[N1]; // N1不包括全局首尾点 for (int num = 0; num < numIterations; num++) { - // StringBuilder series = new StringBuilder(); + // NOTE: init lt&lv at the start of each iteration is a must, because they are modified in + // each iteration + lt = CONFIG.getP1t(); + lv = CONFIG.getP1v(); + + StringBuilder series = new StringBuilder(); // TODO debug // 全局首点 - // series.append(p1v).append("[").append(p1t).append("]").append(","); + series.append(p1v).append("[").append(p1t).append("]").append(","); // TODO debug // 遍历分桶 Assume no empty buckets for (int b = 0; b < N1; b++) { - long rt = 0; // must initialize as zero, because may be used as sum for average + double rt = 0; // must initialize as zero, because may be used as sum for average double rv = 0; // must initialize as zero, because may be used as sum for average // 计算右边桶的固定点 if (b == N1 - 1) { // 最后一个桶 @@ -212,9 +217,13 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { if (CONFIG.isAcc_avg()) { if (chunkSuit4Tri.chunkMetadata.getStartTime() >= rightStartTime && chunkSuit4Tri.chunkMetadata.getEndTime() < rightEndTime) { - // TODO 元数据增加sum of timestamps! - rt += chunkSuit4Tri.chunkMetadata.getStatistics().getSumDoubleValue(); - + System.out.println("herehere"); + // TODO 以后元数据可以增加sum of timestamps,目前就基于时间戳均匀间隔1的假设来处理 + rt += + (chunkSuit4Tri.chunkMetadata.getStartTime() + + chunkSuit4Tri.chunkMetadata.getEndTime()) + * chunkSuit4Tri.chunkMetadata.getStatistics().getCount() + / 2.0; rv += chunkSuit4Tri.chunkMetadata.getStatistics().getSumDoubleValue(); cnt += chunkSuit4Tri.chunkMetadata.getStatistics().getCount(); continue; @@ -379,10 +388,11 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { chunkSuit4Tri.pageReader = null; // TODO 但是这样有可能导致下一轮迭代到这个桶的时候又要读一遍这个chunk // 但是不这样做的话相当于一轮迭代之后几乎所有的点都加载到内存留着了 + // 还要注意的是如果被rectangle提前剪枝掉了就不会走到这一步,也就是说那个chunk的pageReader可能还留着 } } - // 记录结果 - // series.append(select_v).append("[").append(select_t).append("]").append(","); + // 记录结果 // TODO debug + series.append(select_v).append("[").append(select_t).append("]").append(","); // 更新lt,lv // 下一个桶自然地以select_t, select_v作为左桶固定点 @@ -393,10 +403,9 @@ public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor { lastIter_v[b] = select_v; } // 遍历分桶结束 - // 全局尾点 - // series.append(pnv).append("[").append(pnt).append("]").append(","); - // System.out.println(series); - + // 全局尾点 // TODO debug + series.append(pnv).append("[").append(pnt).append("]").append(","); + System.out.println(series); } // end Iterations // 全局首点 diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_LTTB.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_LTTB.java index 525c9ca78ca..f29956c7b8d 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_LTTB.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_LTTB.java @@ -165,7 +165,7 @@ public class LocalGroupByExecutorTri_LTTB implements GroupByExecutor { // Assume no empty buckets for (int b = 0; b < N1; b++) { - long rt = 0; // must initialize as zero, because may be used as sum for average + double rt = 0; // must initialize as zero, because may be used as sum for average double rv = 0; // must initialize as zero, because may be used as sum for average // 计算右边桶的固定点 if (b == N1 - 1) { // 最后一个桶 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 7889107f8fd..ccef5e9fa84 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 @@ -78,7 +78,7 @@ public class MyTest_ILTS { config.setEnableTri("ILTS"); // config.setNumIterations(4); - config.setAcc_avg(false); + config.setAcc_avg(true); config.setAcc_rectangle(true); config.setAcc_convex(false); @@ -159,6 +159,38 @@ public class MyTest_ILTS { } } + @Test + public void test1_3() { + prepareData1(); + config.setNumIterations(2); + String res = "5.0[1],2.0[40],20.0[62],7.0[102],"; + 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)" + // TODO not real min_value here, actually controlled by enableTri + + ",max_value(s0),min_time(s0), max_time(s0), first_value(s0), last_value(s0)" + + " FROM root.vehicle.d0 group by ([2,102),40ms)"); + // (102-2)/(7-2)=20ms + // note keep no empty buckets + + Assert.assertTrue(hasResultSet); + try (ResultSet resultSet = statement.getResultSet()) { + int i = 0; + while (resultSet.next()) { + String ans = resultSet.getString(2); + System.out.println(ans); + Assert.assertEquals(res, ans); + } + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + private static void prepareData1() { // data: // https://user-images.githubusercontent.com/33376433/152003603-6b4e7494-00ff-47e4-bf6e-cab3c8600ce2.png
