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
- 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.
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
- 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.
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
- Failed to apply webClientOptions to WebClientOptions. Check
- S3StorageConfig cannot be null!
- Failed to merge existing aggregators when generating metrics
- No segments found for compaction. Please check that datasour
- DynamicPartitionsSpec must be used for best-effort rollup
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/b5ae01aaa9b25828.
Report an issue: GitHub.