apache/seatunnel · error · ConfigCheckException
${location(SOURCE, configIndex, factoryId)} did not infer an
Error message
${location(SOURCE, configIndex, factoryId)} did not infer any source schema. What it means
During dry-run CONNECT validation, DryRunConnectValidator.validateSource calls inferSchemaForDryRun on factories implementing SupportSourceDryRunValidation. If the factory returns null or an empty list of CatalogTable, a ConfigCheckException is thrown saying the source inferred no schema. It ensures every source produces at least one table schema before the DAG is validated.
Source
Thrown at seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/DryRunConnectValidator.java:160
int configIndex,
Config sourceConfig,
ClassLoader classLoader,
LinkedHashMap<String, SchemaInfo> tableWithSchemas,
List<PluginResult> results) {
ReadonlyConfig readonlyConfig = ReadonlyConfig.fromConfig(sourceConfig);
String factoryId = ConfigParserUtil.getFactoryId(readonlyConfig);
String outputId = readonlyConfig.getOptional(PLUGIN_OUTPUT).orElse(DEFAULT_ID);
try {
TableSourceFactory factory =
FactoryUtil.discoverFactory(classLoader, TableSourceFactory.class, factoryId);
TableSourceFactoryContext context =
new TableSourceFactoryContext(readonlyConfig, classLoader);
if (factory instanceof SupportSourceDryRunValidation) {
SupportSourceDryRunValidation validation = (SupportSourceDryRunValidation) factory;
List<CatalogTable> catalogTables = validation.inferSchemaForDryRun(context);
if (catalogTables == null || catalogTables.isEmpty()) {
throw new ConfigCheckException(
location(PluginType.SOURCE, configIndex, factoryId)
+ " did not infer any source schema.");
}
validation.validateConnectionForDryRun(context, catalogTables);
tableWithSchemas.put(outputId, SchemaInfo.trusted(catalogTables));
results.add(
PluginResult.validated(
PluginType.SOURCE,
configIndex,
factoryId,
"schema inferred and connection validated"));
return;
}
if (hasExplicitSchema(readonlyConfig)) {
// Schema comes from the user's config, so downstream schema checks stay
// meaningful even though the connector itself was not contacted.
List<CatalogTable> catalogTables = factory.discoverTableSchemas(context);View on GitHub (pinned to cf67b549a7)
Solutions
- Verify the source's table/catalog/database options point at an existing object that has columns.
- Run the source without dry-run to see if it works normally; if it does, this may be a connector dry-run limitation — report/upgrade the connector.
- Check connector documentation for required options for schema inference (e.g. query vs table).
Example fix
// before
source {
Jdbc {
url = "jdbc:mysql://localhost:3306"
query = ""
}
}
// after
source {
Jdbc {
url = "jdbc:mysql://localhost:3306/db"
query = "select id, name from users"
}
} Defensive patterns
Strategy: validation
Validate before calling
// verify the source object exists and has columns before dry-run // e.g. for JDBC: run `DESCRIBE <table>` or `SELECT ... LIMIT 1` with the same credentials
Try / catch
try { validateConf(conf, DryRun.CONNECT); } catch (ConfigCheckException e) { if (e.getMessage().endsWith("did not infer any source schema.")) { fixSourceSchemaOptions(conf); } else { throw e; } } Prevention
- Ensure table/query options resolve to an existing object with columns
- Keep connector options (database, schema, table) fully qualified and typo-free
- Test schema inference with a minimal config before scaling up
- Check the connector's docs for options required by schema inference
When it happens
Trigger: Running with --dry-run CONNECT on a config whose source connector supports dry-run validation but cannot infer a schema for the given options — e.g. a query/table that resolves to nothing, empty catalog/database settings, or a connector whose dry-run implementation returns no tables for the supplied readonlyConfig.
Common situations: Typos in table/database names; source connector returning no columns for the requested query; connector dry-run implementation not supporting the option combination (e.g. a format or query mode the schema inference path ignores).
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- SEA-TUNNEL-API-01
- CONFIG_VALIDATION_FAILED
- No upstream source or transform is available for sink.
- ${validationMode} failed: ${message}
- getProducedCatalogTables method has not been implemented.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e4e155405729a628.
Report an issue: GitHub.