{"record":{"id":"c01574974d5a4454","repo":"apache/druid","slug":"vectorized-groupbys-on-array-columns-are-not-yet-i","errorCode":null,"errorMessage":"Vectorized groupBys on ARRAY columns are not yet implemented","messagePattern":"Vectorized groupBys on ARRAY columns 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":112,"sourceCode":"    return new NullableDoubleGroupByVectorColumnSelector(selector);\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeLongProcessor(\n      final ColumnCapabilities capabilities,\n      final VectorValueSelector selector\n  )\n  {\n    if (capabilities.hasNulls().isFalse()) {\n      return new LongGroupByVectorColumnSelector(selector);\n    }\n    return new NullableLongGroupByVectorColumnSelector(selector);\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeArrayProcessor(ColumnCapabilities capabilities, VectorObjectSelector selector)\n  {\n    throw new UnsupportedOperationException(\n        \"Vectorized groupBys on ARRAY columns are not yet implemented\"\n    );\n  }\n\n  @Override\n  public GroupByVectorColumnSelector makeObjectProcessor(\n      final ColumnCapabilities capabilities,\n      final VectorObjectSelector selector\n  )\n  {\n    if (capabilities.is(ValueType.STRING)) {\n      if (capabilities.hasMultipleValues().isTrue()) {\n        throw new UnsupportedOperationException(\n            \"Vectorized groupBys on multi-value dictionary-encoded dimensions are not yet implemented\"\n        );\n      }\n      return new DictionaryBuildingSingleValueStringGroupByVectorColumnSelector(selector);\n    } else if (capabilities.is(ValueType.COMPLEX)) {","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/vector/GroupByVectorColumnProcessorFactory.java#L94-L130","documentation":"GroupByVectorColumnProcessorFactory.makeArrayProcessor unconditionally throws UnsupportedOperationException: grouping on ARRAY-typed columns is not supported by the vectorized group-by engine. Any vectorized query grouping by an ARRAY column reaches this factory method and fails.","triggerScenarios":"A vectorized groupBy query with a grouping key whose column capabilities report ValueType.ARRAY, routed to the vector column processor factory's makeArrayProcessor.","commonSituations":"Druid 28+ ARRAY types used in groupBy dimensions; users experimenting with new ARRAY columns in aggregations; auto-vectorization picking up an array-typed virtual column.","solutions":["Disable vectorization for the query (context {\"vectorize\":\"false\"}).","Convert the array to a scalar before grouping, e.g. via array_to_string or element access in an expression virtual column.","Normalize arrays into separate rows/columns at ingestion if grouping per element is the goal."],"exampleFix":"// before: GROUP BY arrayCol (vectorized)\n// after: query context\n{\"vectorize\":\"false\"}\n// or group by expression: array_to_string(arrayCol, ',')","handlingStrategy":"type-guard","validationCode":"ColumnCapabilities caps = pool.getColumnCapabilities(column);\nif (caps != null && caps.is(ValueType.ARRAY)) { /* route to non-vectorized engine */ }","typeGuard":"boolean isArrayColumn(ColumnCapabilities caps) {\n  return caps != null && caps.is(ValueType.ARRAY);\n}","tryCatchPattern":"try {\n  runVectorized(query);\n} catch (UnsupportedOperationException e) {\n  return runWithVectorizeDisabled(query);\n}","preventionTips":["Disable vectorization for queries grouping by ARRAY columns","Convert arrays to strings/scalars before grouping","Review ARRAY-typed virtual columns used as group-by keys"],"tags":["druid","group-by","vectorization","array"],"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"}