apache/druid · error · ISE
Invalid input [%s] of type [%s] for [%s] aggregator [%s]
Error message
Invalid input [%s] of type [%s] for [%s] aggregator [%s]
What it means
HllSketchBuildAggregatorFactory.validateInputs throws IllegalStateException when the input column's capabilities report ValueType.COMPLEX, i.e. the field already contains serialized HLL sketches. Building a new sketch from an already-sketch column is invalid; use the merge-type aggregator (HllSketchMergeFactory) for that. It is invoked while factorizing vectorized/SQL aggregators.
Source
Thrown at extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchBuildAggregatorFactory.java:155
@Override
public AggregatorFactory withName(String newName)
{
return new HllSketchBuildAggregatorFactory(
newName,
getFieldName(),
getLgK(),
getTgtHllType(),
getStringEncoding(),
isShouldFinalize(),
isRound()
);
}
private void validateInputs(@Nullable ColumnCapabilities capabilities)
{
if (capabilities != null) {
if (capabilities.is(ValueType.COMPLEX)) {
throw new ISE(
"Invalid input [%s] of type [%s] for [%s] aggregator [%s]",
getFieldName(),
capabilities.asTypeString(),
HllSketchModule.BUILD_TYPE_NAME,
getName()
);
}
}
}
private HllSketchUpdater formulateSketchUpdater(ColumnSelectorFactory columnSelectorFactory)
{
final ColumnCapabilities capabilities = columnSelectorFactory.getColumnCapabilities(getFieldName());
validateInputs(capabilities);
HllSketchUpdater updater = null;
if (capabilities != null &&
StringEncoding.UTF8.equals(getStringEncoding()) && ValueType.STRING.equals(capabilities.getType())) {View on GitHub (pinned to 9b90983fd2)
Solutions
- Switch the aggregator type from HLLSketchBuild to HLLSketchMerge when the input column already holds sketches.
- Point the build aggregator at the raw string/numeric column that should be sketched.
- Fix ingestion spec so the source column stored is raw data, not a serialized sketch, if raw building is intended.
- In SQL use APPROX_COUNT_DISTINCT_DS_HLL on raw values and DS_HLL(...) on sketch columns appropriately.
Example fix
// before
{"type": "HLLSketchBuild", "name": "s", "fieldName": "sketch_col"}
// after
{"type": "HLLSketchMerge", "name": "s", "fieldName": "sketch_col"} Defensive patterns
Strategy: validation
Validate before calling
ColumnCapabilities caps = columnCapabilities(fieldName); if (caps != null && caps.is(ValueType.COMPLEX) && factory.getType().equals("HLLSketchBuild")) { throw new IllegalArgumentException("use HLLSketchMerge for sketch columns"); } Type guard
boolean isComplexColumn = caps != null && caps.is(ValueType.COMPLEX);
Try / catch
try { factory.factorize(...) } catch (ISE e) { /* switch to HLLSketchMerge */ } Prevention
- Match aggregator type to column type: build for raw, merge for sketch columns
- Inspect column schema (segment metadata) before composing queries
- In SQL prefer DS_HLL()/APPROX_COUNT_DISTINCT_DS_HLL which pick correct modes
When it happens
Trigger: Configuring an HLLSketchBuild aggregator whose fieldName points to a COMPLEX column (e.g. an HLLSketch-typed column produced by ingestion or another sketch), during query factorizeVector or formulateSketchUpdater.
Common situations: Mistakenly using 'HLLSketchBuild' on a column ingested as sketch (should be 'HLLSketchMerge'); copying a query spec that had sketch output columns and feeding them back as build inputs; schema drift after switching ingestion to store sketches.
Understand the failure class
Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.
Related errors
- Unsupported type %s
- Not implemented
- Object is not of a type[%s] that can be deserialized to sket
- Expected a number or an instance of DDSketch, but received [
- Expected a number or an instance of DDSketch, but received [
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/118f66a6cf4d19a5.
Report an issue: GitHub.