{"record":{"id":"c85c8e92a7de294b","repo":"apache/druid","slug":"vectorized-groupbys-on-multi-value-dictionary-enco","errorCode":null,"errorMessage":"Vectorized groupBys on multi-value dictionary-encoded dimensions are not yet implemented","messagePattern":"Vectorized groupBys on multi-value dictionary-encoded dimensions are not yet implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"warning","filePath":"processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/GroupByVectorColumnProcessorFactory.java","lineNumber":68,"sourceCode":"  {\n    Preconditions.checkArgument(\n        capabilities.is(ValueType.STRING),\n        \"groupBy dimension processors must be STRING typed\"\n    );\n    return new SingleValueStringGroupByVectorColumnSelector(selector);\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeMultiValueDimensionProcessor(\n      final ColumnCapabilities capabilities,\n      final MultiValueDimensionVectorSelector selector\n  )\n  {\n    Preconditions.checkArgument(\n        capabilities.is(ValueType.STRING),\n        \"groupBy dimension processors must be STRING typed\"\n    );\n    throw new UnsupportedOperationException(\n        \"Vectorized groupBys on multi-value dictionary-encoded dimensions are not yet implemented\"\n    );\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeFloatProcessor(\n      final ColumnCapabilities capabilities,\n      final VectorValueSelector selector\n  )\n  {\n    if (capabilities.hasNulls().isFalse()) {\n      return new FloatGroupByVectorColumnSelector(selector);\n    }\n    return new NullableFloatGroupByVectorColumnSelector(selector);\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeDoubleProcessor(","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/GroupByVectorColumnProcessorFactory.java#L50-L86","documentation":"GroupByVectorColumnProcessorFactory.makeMultiValueDimensionProcessor always throws UnsupportedOperationException: the vectorized group-by engine has no selector implementation for multi-value (array-valued) dictionary-encoded STRING dimensions. Queries hitting this path must fall back to the non-vectorized engine.","triggerScenarios":"A vectorized groupBy query whose grouping dimension is a multi-value (repeated) string column, with vectorization enabled and the column capabilities reporting hasMultipleValues=true and type STRING.","commonSituations":"Grouping on a nested/JSON-extracted field or an ingestion dimension that sometimes contains arrays; users upgrading who expect MV support in the vectorized engine; auto-vectorization silently attempting an MV dimension.","solutions":["Disable vectorization for this query (set query context \"vectorize\":\"false\") or for the datasource so the non-vector engine handles it.","Flatten the multi-value dimension at ingestion (e.g. use a transform to join values into a single string, or explode rows).","Use an expression virtual column that picks a single value (e.g. array_element/array_ordinal) so the dimension becomes single-valued."],"exampleFix":"// before: dimension \"tags\" is multi-valued, query runs vectorized\n// after: context\n{\"vectorize\":\"false\"}\n// or at ingestion, transform: {\"type\":\"expression\",\"expression\":\"array_to_string(tags,',')\",\"name\":\"tagsFlat\"} and group by tagsFlat","handlingStrategy":"type-guard","validationCode":"ColumnCapabilities caps = pool.getColumnCapabilities(column);\nboolean mvSupported = caps == null || caps.getType() != ValueType.STRING || !caps.hasMultipleValues().isTrue();","typeGuard":"boolean isSingleValueString(ColumnCapabilities caps) {\n  return caps != null && caps.is(ValueType.STRING) && caps.hasMultipleValues().isNotTrue();\n}","tryCatchPattern":"try {\n  runVectorized(query);\n} catch (UnsupportedOperationException e) {\n  return runNonVectorized(query); // context vectorize=false\n}","preventionTips":["Set \"vectorize\":\"false\" in query context for queries grouping on multi-value dimensions","Flatten multi-value dimensions at ingestion time","Check ColumnCapabilities.hasMultipleValues before relying on vectorized groupBy"],"tags":["druid","group-by","vectorization","multi-value"],"backgroundTag":"method-not-implemented","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}