apache/druid · error · IAE

Input format type %s is not registered

Error message

Input format type %s is not registered

What it means

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.

Source

Thrown at server/src/main/java/org/apache/druid/catalog/model/table/ResolvedExternalTable.java:97

   * Note, for resolution to work, the name of each definition must be the same as
   * that used as the type key in the serialized JSON.
   */
  public ResolvedExternalTable resolve(TableDefnRegistry registry)
  {
    String inputSourceType = CatalogUtils.getString(inputSourceMap, InputSource.TYPE_PROPERTY);
    if (inputSourceType == null) {
      throw new IAE("Input source type %s is required", InputSource.TYPE_PROPERTY);
    }
    inputSourceDefn = registry.inputSourceDefnFor(inputSourceType);
    if (inputSourceDefn == null) {
      throw new IAE("Input source type %s is not registered", inputSourceType);
    }
    if (inputFormatMap != null) {
      String inputFormatType = CatalogUtils.getString(inputFormatMap, InputFormat.TYPE_PROPERTY);
      if (inputFormatType != null) {
        inputFormatDefn = registry.inputFormatDefnFor(inputFormatType);
        if (inputFormatDefn == null) {
          throw new IAE("Input format type %s is not registered", inputFormatType);
        }
      }
    }
    return this;
  }

  /**
   * Validate that the table spec is correct by resolving the definitions, then
   * converting the JSON to the desired object type. Note that this path requires
   * special handling: the table spec may be partial, which means it is missing information
   * needed to create a complete input source. The input source definition defines which
   * values can be omitted, and defined later in SQL via function parameters. If those
   * values are missing, then the input source defn should provide dummy values so that
   * the validation will succeed (assuming that the properties that are provided are valid.)
   */
  public void validate(TableDefnRegistry registry)
  {
    resolve(registry);

View on GitHub (pinned to 9b90983fd2)

Solutions

  1. Fix the inputFormat 'type' value in the table spec to a registered format name (e.g. 'csv', 'json', 'delimited', 'avro', 'orc', 'parquet').
  2. Ensure the Druid extension that provides the input format is loaded (add it to druid.extensions.loadList).
  3. If using a custom InputFormatDefn, register it by including the Guice module that binds it into the input-format registry.

Example fix

// before
"inputFormat": { "type": "jsn", "flattenSpec": {} }
// after
"inputFormat": { "type": "json", "flattenSpec": {} }
Defensive patterns

Strategy: validation

Validate before calling

String type = (String) inputFormatMap.get("type");
if (type == null || registry.inputFormatDefnFor(type) == null) {
  throw new IllegalArgumentException("Unregistered input format: " + type);
}

Prevention

When it happens

Trigger: 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).

Common situations: 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.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/b5ae01aaa9b25828. Report an issue: GitHub.