{"record":{"id":"17ff75bfbd6cb9bd","repo":"apache/druid","slug":"received-a-non-applicable-rewrite-s-filter-s-di-17ff75","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/RangeFilter.java","lineNumber":377,"sourceCode":"  @Override\n  public Set<String> getRequiredColumns()\n  {\n    return ImmutableSet.of(column);\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(column);\n\n    if (rewriteDimensionTo == null) {\n      throw new IAE(\n          \"Received a non-applicable rewrite: %s, filter's dimension: %s\",\n          columnRewrites,\n          column\n      );\n    }\n    return new RangeFilter(\n        rewriteDimensionTo,\n        matchValueType,\n        lower,\n        upper,\n        lowerOpen,\n        upperOpen,\n        filterTuning\n    );\n  }\n\n  public boolean isEquality()\n  {","sourceCodeStart":359,"sourceCodeEnd":395,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/filter/RangeFilter.java#L359-L395","documentation":"RangeFilter.rewriteRequiredColumns() rewrites the range filter's column from a columnRewrites map. When the map does not contain the filter's column, the rewrite is non-applicable and Druid throws this IAE including the map and the filter's column (this source correctly passes 'column' as the second arg).","triggerScenarios":"Calling rewriteRequiredColumns on a RangeFilter with a columnRewrites map lacking the filter's column key.","commonSituations":"Range/time-bound filters in rewritten join or subtotal queries; rewrite maps generated for a subset of the query's columns.","solutions":["Add the RangeFilter's column mapping to the columnRewrites map before rewriting","Guard with columnRewrites.containsKey(filter.getColumn()) prior to the call","Apply rewrites at the query level (Query.filter rewrite) so applicability is handled per-filter"],"exampleFix":"// before\nrangeFilter.rewriteRequiredColumns(Map.of(\"other\", \"other2\")); // filter column is \"__time\"\n// after\nrangeFilter.rewriteRequiredColumns(Map.of(\"__time\", \"__time_renamed\"));","handlingStrategy":"validation","validationCode":"if (!columnRewrites.containsKey(rangeFilter.getColumn())) {\n  throw new IllegalArgumentException(\"rewrite map missing column: \" + rangeFilter.getColumn());\n}","typeGuard":"boolean applicable = columnRewrites != null && columnRewrites.containsKey(rangeFilter.getColumn());","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 range/time-bound columns in rewrite maps","Check the filter's getColumn() against the map keys before rewriting","Regenerate rewrite maps whenever the datasource schema changes"],"tags":["filter","query-rewrite","range-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"}