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

FrankChen021 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 32de6b9215b fix: Avoid duplicate aggregators when reusing T-Digest 
sketches (#20837)
32de6b9215b is described below

commit 32de6b9215b2cd251e8d1000198be472238c1d24
Author: Asuka <[email protected]>
AuthorDate: Thu Nov 5 12:23:39 2026 +0900

    fix: Avoid duplicate aggregators when reusing T-Digest sketches (#20837)
---
 .../sql/TDigestGenerateSketchSqlAggregator.java    |  7 ++---
 .../sql/TDigestSketchSqlAggregatorTest.java        | 34 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git 
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java
 
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java
index 936078cc15c..50e0d9d08d7 100644
--- 
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java
+++ 
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestGenerateSketchSqlAggregator.java
@@ -29,6 +29,7 @@ import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.type.SqlTypeFamily;
 import org.apache.calcite.util.Optionality;
 import org.apache.druid.query.aggregation.AggregatorFactory;
+import org.apache.druid.query.aggregation.post.FieldAccessPostAggregator;
 import org.apache.druid.query.aggregation.tdigestsketch.TDigestConfig;
 import 
org.apache.druid.query.aggregation.tdigestsketch.TDigestSketchAggregatorFactory;
 import org.apache.druid.query.aggregation.tdigestsketch.TDigestSketchUtils;
@@ -112,10 +113,8 @@ public class TDigestGenerateSketchSqlAggregator implements 
SqlAggregator
           );
 
           if (matches) {
-            // Found existing one. Use this.
-            return Aggregation.create(
-                theFactory
-            );
+            // Refer to the existing sketch without adding its aggregator 
again.
+            return Aggregation.create(new FieldAccessPostAggregator(name, 
theFactory.getName()));
           }
         }
       }
diff --git 
a/extensions-contrib/tdigestsketch/src/test/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchSqlAggregatorTest.java
 
b/extensions-contrib/tdigestsketch/src/test/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchSqlAggregatorTest.java
index 6e82d5caa37..cc9978bfe76 100644
--- 
a/extensions-contrib/tdigestsketch/src/test/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchSqlAggregatorTest.java
+++ 
b/extensions-contrib/tdigestsketch/src/test/java/org/apache/druid/query/aggregation/tdigestsketch/sql/TDigestSketchSqlAggregatorTest.java
@@ -278,6 +278,40 @@ public class TDigestSketchSqlAggregatorTest extends 
BaseCalciteQueryTest
     );
   }
 
+  @Test
+  public void testComputingSketchAfterQuantile()
+  {
+    cannotVectorize();
+
+    testQuery(
+        "SELECT TDIGEST_QUANTILE(m1, 0.5), TDIGEST_GENERATE_SKETCH(m1) FROM 
foo",
+        ImmutableList.of(
+            Druids.newTimeseriesQueryBuilder()
+                  .dataSource(CalciteTests.DATASOURCE1)
+                  .intervals(querySegmentSpec(Filtration.eternity()))
+                  .granularity(Granularities.ALL)
+                  .aggregators(
+                      new TDigestSketchAggregatorFactory(
+                          "a0:agg", "m1", 
TDigestSketchAggregatorFactory.DEFAULT_COMPRESSION, 
TDigestConfig.builder().build()
+                      )
+                  )
+                  .postAggregators(
+                      new TDigestSketchToQuantilePostAggregator("a0", 
makeFieldAccessPostAgg("a0:agg"), 0.5),
+                      new FieldAccessPostAggregator("a1", "a0:agg")
+                  )
+                  .context(QUERY_CONTEXT_DEFAULT)
+                  .build()
+        ),
+        ResultMatchMode.EQUALS_EPS,
+        ImmutableList.of(
+            new Object[]{
+                4.0,
+                
"\"AAAAAT/wAAAAAAAAQBgAAAAAAABAWQAAAAAAAAAAAAY/8AAAAAAAAD/wAAAAAAAAP/AAAAAAAABAAAAAAAAAAD/wAAAAAAAAQAgAAAAAAAA/8AAAAAAAAEAQAAAAAAAAP/AAAAAAAABAFAAAAAAAAD/wAAAAAAAAQBgAAAAAAAA=\""
+            }
+        )
+    );
+  }
+
   @Test
   public void testComputingQuantileOnPreAggregatedSketch()
   {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to