Skip to content
Draft
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6e1048c
Metrics in GroupByQueryMetrics
GWphua Nov 26, 2025
0c97263
Time to remove PerQueryStats P1
GWphua Nov 27, 2025
34431e7
Time to remove PerQueryStats P2: Removed in QueryToolChest + Limited…
GWphua Nov 27, 2025
7c8f2c4
Time to remove PerQueryStats P3: Removed in Groupers, GroupByRowProc…
GWphua Nov 27, 2025
4ce8fec
GroupByRowProcessor Helps
GWphua Nov 27, 2025
cc105dc
RowBasedGrouperHelper
GWphua Nov 27, 2025
515a1aa
Tests
GWphua Nov 27, 2025
e5cd850
Javadocs
GWphua Nov 27, 2025
f69de58
Add metrics emitter in query runner
GWphua Nov 28, 2025
40aa119
TODOs for groupby-metrics
GWphua Nov 28, 2025
13973f1
Checkstyle
GWphua Nov 28, 2025
82018eb
forbidden-api for DefaultGroupByQueryMetrics#toString
GWphua Nov 28, 2025
e163c37
Remove NotNull annotation
GWphua Nov 28, 2025
f4c6048
Fix NPE in initAndMergeGroupByResults
GWphua Nov 28, 2025
80cf3af
Add MetricKey
GWphua Dec 3, 2025
37cc8b2
GroupingEngine reversion
GWphua Dec 4, 2025
3c7d3e4
Migrating to response context
GWphua Dec 4, 2025
906e823
Response Context Long Key
GWphua Dec 4, 2025
f2a8028
GroupByResponseContextKey
GWphua Dec 4, 2025
9d3e6fc
LimitedTemporaryStorage signature change
GWphua Dec 4, 2025
63e80be
QueryPlus -> GroupByQuery
GWphua Dec 4, 2025
d0989ba
SpillingGrouper will not see GroupByMetrics
GWphua Dec 4, 2025
1b87250
ConcurrentGrouper will not see GroupByMetrics
GWphua Dec 4, 2025
8c2f007
Find place to emit metrics
GWphua Dec 4, 2025
1beb2b1
GroupByStatsProvider in right place
GWphua Dec 4, 2025
2532a84
Unify method signatures and usage across all files
GWphua Dec 4, 2025
6cdfef9
Track grouper + temporaryStorage in GroupByRowProcessor
GWphua Dec 4, 2025
05c1f2b
Javadocs for GroupingEngine
GWphua Dec 4, 2025
cda3e51
If responseContext keys are null.....
GWphua Dec 4, 2025
0141b70
Working GroupByQueryMetrics
GWphua Dec 4, 2025
89b28d0
Fix GroupByStatsProvider Tests
GWphua Dec 5, 2025
0aeea7a
GroupByQueryRunnerTests
GWphua Dec 5, 2025
6017144
GroupByQueries
GWphua Dec 5, 2025
bdc1adb
Fix UnionTest failures
GWphua Dec 5, 2025
d6bf57a
Fix queryMetrics logging
GWphua Dec 5, 2025
b5284e5
Remove unnecessary queryMetrics logging
GWphua Dec 5, 2025
da290a9
Fix tests in SqlResourceTest
GWphua Dec 5, 2025
99ea400
Checkstyle
GWphua Dec 5, 2025
17e5700
Cleanup
GWphua Dec 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import org.apache.druid.query.groupby.GroupByQuery;
import org.apache.druid.query.groupby.GroupByQueryConfig;
import org.apache.druid.query.groupby.GroupByQueryQueryToolChest;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.segment.TestHelper;
import org.apache.druid.segment.column.ColumnType;
Expand Down Expand Up @@ -114,7 +113,7 @@ public boolean isIntermediateResultAsMapCompat()
},
null,
null,
new GroupByStatsProvider()
null
);

decoratedMapper = groupByQueryQueryToolChest.decorateObjectMapper(undecoratedMapper, sqlQuery);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
import org.apache.druid.query.groupby.GroupByQueryQueryToolChest;
import org.apache.druid.query.groupby.GroupByQueryRunnerFactory;
import org.apache.druid.query.groupby.GroupByResourcesReservationPool;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.GroupingEngine;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.query.spec.MultipleIntervalSegmentSpec;
Expand Down Expand Up @@ -369,7 +368,6 @@ public String getFormatString()
};

final Supplier<GroupByQueryConfig> configSupplier = Suppliers.ofInstance(config);
final GroupByStatsProvider groupByStatsProvider = new GroupByStatsProvider();
final GroupByResourcesReservationPool groupByResourcesReservationPool =
new GroupByResourcesReservationPool(mergePool, config);
final GroupingEngine groupingEngine = new GroupingEngine(
Expand All @@ -378,8 +376,7 @@ public String getFormatString()
groupByResourcesReservationPool,
TestHelper.makeJsonMapper(),
new ObjectMapper(new SmileFactory()),
QueryBenchmarkUtil.NOOP_QUERYWATCHER,
groupByStatsProvider
QueryBenchmarkUtil.NOOP_QUERYWATCHER
);

factory = new GroupByQueryRunnerFactory(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@
import org.apache.druid.query.groupby.GroupByQueryRunnerFactory;
import org.apache.druid.query.groupby.GroupByQueryRunnerTest;
import org.apache.druid.query.groupby.GroupByResourcesReservationPool;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.GroupingEngine;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.query.spec.MultipleIntervalSegmentSpec;
Expand Down Expand Up @@ -346,7 +345,6 @@ private static GroupByQueryRunnerFactory makeGroupByQueryRunnerFactory(
bufferSupplier,
processingConfig.getNumMergeBuffers()
);
final GroupByStatsProvider groupByStatsProvider = new GroupByStatsProvider();
final GroupByResourcesReservationPool groupByResourcesReservationPool =
new GroupByResourcesReservationPool(mergeBufferPool, config);
final GroupingEngine groupingEngine = new GroupingEngine(
Expand All @@ -355,8 +353,7 @@ private static GroupByQueryRunnerFactory makeGroupByQueryRunnerFactory(
groupByResourcesReservationPool,
mapper,
mapper,
QueryRunnerTestHelper.NOOP_QUERYWATCHER,
groupByStatsProvider
QueryRunnerTestHelper.NOOP_QUERYWATCHER
);
final GroupByQueryQueryToolChest toolChest = new GroupByQueryQueryToolChest(groupingEngine, groupByResourcesReservationPool);
return new GroupByQueryRunnerFactory(groupingEngine, toolChest, bufferPool);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@
import org.apache.druid.query.groupby.GroupByQueryQueryToolChest;
import org.apache.druid.query.groupby.GroupByQueryRunnerFactory;
import org.apache.druid.query.groupby.GroupByResourcesReservationPool;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.GroupingEngine;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.query.groupby.orderby.DefaultLimitSpec;
Expand Down Expand Up @@ -486,7 +485,6 @@ public String getFormatString()
};

final Supplier<GroupByQueryConfig> configSupplier = Suppliers.ofInstance(config);
final GroupByStatsProvider groupByStatsProvider = new GroupByStatsProvider();
final GroupByResourcesReservationPool groupByResourcesReservationPool =
new GroupByResourcesReservationPool(mergePool, config);
final GroupingEngine groupingEngine = new GroupingEngine(
Expand All @@ -495,8 +493,7 @@ public String getFormatString()
groupByResourcesReservationPool,
TestHelper.makeJsonMapper(),
new ObjectMapper(new SmileFactory()),
QueryBenchmarkUtil.NOOP_QUERYWATCHER,
groupByStatsProvider
QueryBenchmarkUtil.NOOP_QUERYWATCHER
);

factory = new GroupByQueryRunnerFactory(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
import org.apache.druid.query.groupby.GroupByQueryQueryToolChest;
import org.apache.druid.query.groupby.GroupByQueryRunnerFactory;
import org.apache.druid.query.groupby.GroupByResourcesReservationPool;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.GroupingEngine;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.query.spec.MultipleIntervalSegmentSpec;
Expand Down Expand Up @@ -74,7 +73,6 @@ public void setup() throws IOException

final BlockingPool<ByteBuffer> mergePool =
new DefaultBlockingPool<>(() -> ByteBuffer.allocate(1024), 1);
final GroupByStatsProvider groupByStatsProvider = new GroupByStatsProvider();

final GroupByResourcesReservationPool groupByResourcesReservationPool =
new GroupByResourcesReservationPool(mergePool, config);
Expand Down Expand Up @@ -110,8 +108,7 @@ public int getNumThreads()
groupByResourcesReservationPool,
TestHelper.makeJsonMapper(),
new DefaultObjectMapper(),
QueryRunnerTestHelper.NOOP_QUERYWATCHER,
groupByStatsProvider
QueryRunnerTestHelper.NOOP_QUERYWATCHER
);

final GroupByQueryRunnerFactory factory = new GroupByQueryRunnerFactory(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@
import org.apache.druid.query.groupby.GroupByQuery;
import org.apache.druid.query.groupby.GroupByQueryConfig;
import org.apache.druid.query.groupby.GroupByResourcesReservationPool;
import org.apache.druid.query.groupby.GroupByStatsProvider;
import org.apache.druid.query.groupby.GroupingEngine;
import org.apache.druid.query.groupby.ResultRow;
import org.apache.druid.segment.column.ColumnType;
Expand Down Expand Up @@ -279,8 +278,7 @@ public DatasketchesProjectionTest(
TestHelper.makeJsonMapper(),
TestHelper.makeSmileMapper(),
(query, future) -> {
},
new GroupByStatsProvider()
}
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
*/
public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
{
public static final ObjLongConsumer<QueryMetrics<?>> NOOP_METRIC_REPORTER = (metrics, value) -> { };

private final ServiceEmitter emitter;
private final QueryToolChest<T, ? extends Query<T>> queryToolChest;
private final QueryRunner<T> queryRunner;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public Set<String> getTableNames()
}

@JsonProperty
public Query getQuery()
public Query<?> getQuery()
{
return query;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ public Object mergeValues(Object oldValue, Object newValue)
*/
public static class LongKey extends AbstractKey
{
LongKey(String name, boolean inHeader)
public LongKey(String name, boolean inHeader)
{
super(name, inHeader, false, Long.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,14 @@
import org.apache.druid.query.DefaultQueryMetrics;
import org.apache.druid.query.DruidMetrics;

import java.util.concurrent.atomic.LongAdder;

public class DefaultGroupByQueryMetrics extends DefaultQueryMetrics<GroupByQuery> implements GroupByQueryMetrics
{
private final LongAdder mergeBufferAcquisitonTime = new LongAdder();
private final LongAdder bytesSpilledToStorage = new LongAdder();
private final LongAdder mergeDictionarySize = new LongAdder();

@Override
public void query(GroupByQuery query)
{
Expand Down Expand Up @@ -58,4 +64,50 @@ public void granularity(GroupByQuery query)
{
//Don't emit by default
}

@Override
public void mergeBufferAcquisitionTime(long mergeBufferAcquisitionTime)
{
reportMetric("mergeBufferAcquisitonTime", mergeBufferAcquisitionTime);
}

@Override
public void bytesSpilledToStorage(long bytesSpilledToStorage)
{
reportMetric("bytesSpilledToStorage", bytesSpilledToStorage);
}

@Override
public void mergeDictionarySize(long mergeDictionarySize)
{
reportMetric("mergeDictionarySize", mergeDictionarySize);
}

@Override
public long getSpilledBytes()
{
return bytesSpilledToStorage.longValue();
}

@Override
public long getMergeDictionarySize()
{
return mergeDictionarySize.longValue();
}

@Override
public long getMergeBufferAcquisitionTime()
{
return mergeBufferAcquisitonTime.longValue();
}

// TODO: Delete after debugging...
@Override
public String toString()
{
return "bytesSpilledToStorage[" + bytesSpilledToStorage.longValue()
+ "], mergeDictionarySize[" + mergeDictionarySize.longValue()
+ "], mergeBufferAcquisitonTime[" + mergeBufferAcquisitonTime.longValue()
+ ']';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,22 @@ public interface GroupByQueryMetrics extends QueryMetrics<GroupByQuery>
*/
@PublicApi
void granularity(GroupByQuery query);

@PublicApi
void mergeBufferAcquisitionTime(long mergeBufferAcquisitionTime);

@PublicApi
void bytesSpilledToStorage(long bytesSpilledToStorage);

@PublicApi
void mergeDictionarySize(long mergeDictionarySize);

@PublicApi
long getSpilledBytes();

@PublicApi
long getMergeDictionarySize();

@PublicApi
long getMergeBufferAcquisitionTime();
}
Loading
Loading