{"record":{"id":"b5ae01aaa9b25828","repo":"apache/druid","slug":"input-format-type-s-is-not-registered","errorCode":null,"errorMessage":"Input format type %s is not registered","messagePattern":"Input format type (.+?) is not registered","errorType":"validation","errorClass":"IAE","httpStatus":null,"severity":"error","filePath":"server/src/main/java/org/apache/druid/catalog/model/table/ResolvedExternalTable.java","lineNumber":97,"sourceCode":"   * Note, for resolution to work, the name of each definition must be the same as\n   * that used as the type key in the serialized JSON.\n   */\n  public ResolvedExternalTable resolve(TableDefnRegistry registry)\n  {\n    String inputSourceType = CatalogUtils.getString(inputSourceMap, InputSource.TYPE_PROPERTY);\n    if (inputSourceType == null) {\n      throw new IAE(\"Input source type %s is required\", InputSource.TYPE_PROPERTY);\n    }\n    inputSourceDefn = registry.inputSourceDefnFor(inputSourceType);\n    if (inputSourceDefn == null) {\n      throw new IAE(\"Input source type %s is not registered\", inputSourceType);\n    }\n    if (inputFormatMap != null) {\n      String inputFormatType = CatalogUtils.getString(inputFormatMap, InputFormat.TYPE_PROPERTY);\n      if (inputFormatType != null) {\n        inputFormatDefn = registry.inputFormatDefnFor(inputFormatType);\n        if (inputFormatDefn == null) {\n          throw new IAE(\"Input format type %s is not registered\", inputFormatType);\n        }\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Validate that the table spec is correct by resolving the definitions, then\n   * converting the JSON to the desired object type. Note that this path requires\n   * special handling: the table spec may be partial, which means it is missing information\n   * needed to create a complete input source. The input source definition defines which\n   * values can be omitted, and defined later in SQL via function parameters. If those\n   * values are missing, then the input source defn should provide dummy values so that\n   * the validation will succeed (assuming that the properties that are provided are valid.)\n   */\n  public void validate(TableDefnRegistry registry)\n  {\n    resolve(registry);","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/catalog/model/table/ResolvedExternalTable.java#L79-L115","documentation":"Thrown by ResolvedExternalTable.resolve() when a table spec declares an input format whose 'type' property is not known to the input-format registry. The catalog can only resolve external table definitions whose input format has a registered InputFormatDefn. This is a definition/config error on the table spec, not a runtime data issue.","triggerScenarios":"Calling validate() on an external table whose spec contains an inputFormat map whose TYPE_PROPERTY value does not match any registered input format definition (typo, uninstalled extension, or custom format not registered via InputFormatModule).","commonSituations":"Typo in the inputFormat type string in a catalog table spec; using a format provided by an extension that is not loaded on the coordinator; writing table specs by hand or via scripts that bypass the UI's format dropdown.","solutions":["Fix the inputFormat 'type' value in the table spec to a registered format name (e.g. 'csv', 'json', 'delimited', 'avro', 'orc', 'parquet').","Ensure the Druid extension that provides the input format is loaded (add it to druid.extensions.loadList).","If using a custom InputFormatDefn, register it by including the Guice module that binds it into the input-format registry."],"exampleFix":"// before\n\"inputFormat\": { \"type\": \"jsn\", \"flattenSpec\": {} }\n// after\n\"inputFormat\": { \"type\": \"json\", \"flattenSpec\": {} }","handlingStrategy":"validation","validationCode":"String type = (String) inputFormatMap.get(\"type\");\nif (type == null || registry.inputFormatDefnFor(type) == null) {\n  throw new IllegalArgumentException(\"Unregistered input format: \" + type);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a known-good list of format type strings from a shared constant/enum.","Ensure required Druid extensions are in druid.extensions.loadList.","Validate table specs in CI before pushing them to the catalog."],"tags":["druid","catalog","input-format","configuration"],"backgroundTag":"invalid-enum-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}