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

  1. Verify the source's table/catalog/database options point at an existing object that has columns.
  2. 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.
  3. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/e4e155405729a628. Report an issue: GitHub.