This is an automated email from the ASF dual-hosted git repository.

caogaofei pushed a commit to branch beyyes/add_table_model_agg_metrics
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d95be6a500e287c6d8c2362a7b80fadd7eec6e33
Author: Beyyes <[email protected]>
AuthorDate: Mon Feb 17 10:34:04 2025 +0800

    Add query metrics AGGREGATION_FROM_RAW_DATA and AGGREGATION_FROM_STATISTICS 
for table model
---
 .../relational/aggregation/TableAggregator.java    | 49 +++++++++++++++-------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableAggregator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableAggregator.java
index ea4095e418e..fbbc7083127 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableAggregator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableAggregator.java
@@ -34,7 +34,10 @@ import java.util.OptionalInt;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
+import static 
org.apache.iotdb.db.queryengine.execution.aggregation.TreeAggregator.QUERY_EXECUTION_METRICS;
 import static 
org.apache.iotdb.db.queryengine.execution.operator.source.relational.TableScanOperator.TIME_COLUMN_TEMPLATE;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryExecutionMetricSet.AGGREGATION_FROM_RAW_DATA;
+import static 
org.apache.iotdb.db.queryengine.metric.QueryExecutionMetricSet.AGGREGATION_FROM_STATISTICS;
 
 public class TableAggregator {
   private final TableAccumulator accumulator;
@@ -64,25 +67,33 @@ public class TableAggregator {
   }
 
   public void processBlock(TsBlock block) {
-    Column[] arguments = block.getColumns(inputChannels);
+    long startTime = System.nanoTime();
+    try {
+      Column[] arguments = block.getColumns(inputChannels);
+
+      // process count(*)
+      if (arguments.length == 0) {
+        arguments =
+            new Column[] {
+              new RunLengthEncodedColumn(TIME_COLUMN_TEMPLATE, 
block.getPositionCount())
+            };
+      }
 
-    // process count(*)
-    if (arguments.length == 0) {
-      arguments =
-          new Column[] {new RunLengthEncodedColumn(TIME_COLUMN_TEMPLATE, 
block.getPositionCount())};
-    }
+      if (step.isInputRaw()) {
+        // Use select-all AggregationMask here because filter of Agg-Function 
is not supported now
+        AggregationMask mask = 
AggregationMask.createSelectAll(block.getPositionCount());
 
-    if (step.isInputRaw()) {
-      // Use select-all AggregationMask here because filter of Agg-Function is 
not supported now
-      AggregationMask mask = 
AggregationMask.createSelectAll(block.getPositionCount());
+        if (maskChannel.isPresent()) {
+          mask.applyMaskBlock(block.getColumn(maskChannel.getAsInt()));
+        }
 
-      if (maskChannel.isPresent()) {
-        mask.applyMaskBlock(block.getColumn(maskChannel.getAsInt()));
+        accumulator.addInput(arguments, mask);
+      } else {
+        accumulator.addIntermediate(arguments[0]);
       }
-
-      accumulator.addInput(arguments, mask);
-    } else {
-      accumulator.addIntermediate(arguments[0]);
+    } finally {
+      QUERY_EXECUTION_METRICS.recordExecutionCost(
+          AGGREGATION_FROM_RAW_DATA, System.nanoTime() - startTime);
     }
   }
 
@@ -95,7 +106,13 @@ public class TableAggregator {
   }
 
   public void processStatistics(Statistics[] statistics) {
-    accumulator.addStatistics(statistics);
+    long startTime = System.nanoTime();
+    try {
+      accumulator.addStatistics(statistics);
+    } finally {
+      QUERY_EXECUTION_METRICS.recordExecutionCost(
+          AGGREGATION_FROM_STATISTICS, System.nanoTime() - startTime);
+    }
   }
 
   public boolean hasFinalResult() {

Reply via email to