{"record":{"id":"f58d4e88dcf0e6b6","repo":"apache/druid","slug":"vectorized-matcher-cannot-make-string-matcher-for","errorCode":null,"errorMessage":"Vectorized matcher cannot make string matcher for ARRAY types","messagePattern":"Vectorized matcher cannot make string matcher for ARRAY types","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/query/filter/vector/ArrayVectorValueMatcher.java","lineNumber":48,"sourceCode":"\npublic class ArrayVectorValueMatcher implements VectorValueMatcherFactory\n{\n  protected final TypeSignature<ValueType> columnType;\n  protected final VectorObjectSelector selector;\n\n  public ArrayVectorValueMatcher(\n      TypeSignature<ValueType> columnType,\n      VectorObjectSelector selector\n  )\n  {\n    this.columnType = columnType;\n    this.selector = selector;\n  }\n\n  @Override\n  public VectorValueMatcher makeMatcher(@Nullable String value)\n  {\n    throw new UnsupportedOperationException(\n        \"Vectorized matcher cannot make string matcher for ARRAY types\"\n    );\n  }\n\n  @Override\n  public VectorValueMatcher makeMatcher(Object matchValue, ColumnType matchValueType)\n  {\n    throw new UnsupportedOperationException(\n        \"Vectorized matcher cannot make object matcher for ARRAY types\"\n    );\n  }\n\n  @Override\n  public VectorValueMatcher makeMatcher(DruidPredicateFactory predicateFactory)\n  {\n    final DruidObjectPredicate<Object[]> predicate = predicateFactory.makeArrayPredicate(columnType);\n    return new BaseVectorValueMatcher(selector)\n    {","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/filter/vector/ArrayVectorValueMatcher.java#L30-L66","documentation":"ArrayVectorValueMatcher backs vectorized matching for ARRAY-typed columns. String equality matching is not supported for array columns because a vector of arrays cannot be compared to a single string, so makeMatcher(String) always throws UnsupportedOperationException.","triggerScenarios":"A vectorized filter on an ARRAY column attempts a string-value matcher (e.g. a selector filter with a string value applied to an array-typed column via the vector engine).","commonSituations":"Queries filtering array columns with equality to a string while vectorization is enabled; queries written for multi-value string columns now stored as ARRAY types.","solutions":["Filter array columns with array-typed values or predicate-factory matchers (makeMatcher(DruidPredicateFactory)) instead of a string value.","Disable vectorization for the query (vectorize=false in query context) so the row-based path handles the array filter.","Use UNNEST or ARRAY_CONTAINS-style semantics (e.g. filter on the unnested output column) rather than direct array equality."],"exampleFix":"// before\nnew SelectorDimFilter(\"arrayCol\", \"value\", null); // vectorized on ARRAY\n// after\n// run with query context {\"vectorize\":\"false\"} or use a predicate-based filter\nnew InDimFilter(\"arrayCol\", Collections.singletonList(\"value\"), null); // non-vector path, or unnest first","handlingStrategy":"validation","validationCode":"if (columnType.isArray()) { /* avoid string-value matcher; use predicate factory or disable vectorization */ }","typeGuard":"boolean supportsStringMatcher = !ColumnType.ofArrayOrNot(colType).isArray();","tryCatchPattern":"try { matcher = arrayMatcher.makeMatcher(value); } catch (UnsupportedOperationException e) { /* disable vectorization or use predicate matcher */ }","preventionTips":["Check column type is not ARRAY before applying string-value vector filters","Use DruidPredicateFactory matchers for array columns","Set vectorize=false for queries filtering ARRAY columns by value"],"tags":["druid","vectorization","array","unsupported-operation"],"backgroundTag":"unsupported-operation","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"}