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]