{"record":{"id":"821f98f294744e3a","repo":"apache/druid","slug":"received-a-non-applicable-rewrite-s-filter-s-di-821f98","errorCode":null,"errorMessage":"Received a non-applicable rewrite: %s, filter's dimension: %s","messagePattern":"Received a non-applicable rewrite: (.+?), filter's dimension: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java","lineNumber":361,"sourceCode":"\n  @Override\n  public boolean canVectorizeMatcher(ColumnInspector inspector)\n  {\n    return true;\n  }\n\n  @Override\n  public boolean supportsRequiredColumnRewrite()\n  {\n    return true;\n  }\n\n  @Override\n  public Filter rewriteRequiredColumns(Map<String, String> columnRewrites)\n  {\n    String rewriteDimensionTo = columnRewrites.get(dimension);\n    if (rewriteDimensionTo == null) {\n      throw new IAE(\"Received a non-applicable rewrite: %s, filter's dimension: %s\", columnRewrites, dimension);\n    }\n\n    if (rewriteDimensionTo.equals(dimension)) {\n      return this;\n    } else {\n      return new InDimFilter(\n          rewriteDimensionTo,\n          values,\n          extractionFn,\n          filterTuning,\n          predicateFactory\n      );\n    }\n  }\n\n  @Override\n  public String toString()\n  {","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java#L343-L379","documentation":"InDimFilter.rewriteRequiredColumns() rewrites the filter's dimension using a columnRewrites map during query rewriting. If the map lacks an entry for the filter's dimension, the rewrite is non-applicable and Druid throws this IAE naming the map and the dimension. Called by callers such as rewrittenFilter when rewriting filter trees.","triggerScenarios":"Calling rewriteRequiredColumns on an InDimFilter whose dimension is not a key in the supplied columnRewrites map.","commonSituations":"Query rewrite passes (joins, subtotals, query migrations) where the map covers other columns; constructing the rewrite map from a partial set of columns.","solutions":["Add a mapping for the InDimFilter's dimension to columnRewrites","Guard with columnRewrites.containsKey(filter.getDimension()) before rewriting","Use rewrite() with the appropriate rewriter if the rewrite should be conditional"],"exampleFix":"// before\ninFilter.rewriteRequiredColumns(Map.of(\"colA\", \"colA2\")); // dimension is \"colB\"\n// after\ninFilter.rewriteRequiredColumns(Map.of(\"colB\", \"colB2\"));","handlingStrategy":"validation","validationCode":"if (!columnRewrites.containsKey(inFilter.getDimension())) {\n  throw new IllegalArgumentException(\"rewrite map missing dimension: \" + inFilter.getDimension());\n}","typeGuard":"boolean applicable = columnRewrites != null && columnRewrites.containsKey(inFilter.getDimension());","tryCatchPattern":"try {\n  return filter.rewriteRequiredColumns(columnRewrites);\n} catch (IAE e) {\n  if (e.getMessage().contains(\"non-applicable rewrite\")) { return filter; }\n  throw e;\n}","preventionTips":["Include InDimFilter dimensions in any column rewrite map","Verify rewritten queries with a dry-run before submission","Use filter-tree traversal to construct complete rewrite maps"],"tags":["filter","query-rewrite","in-filter"],"backgroundTag":"invalid-argument-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T20:17:13.540Z"}