apache/seatunnel · error · ClickhouseConnectorException

Table %s.%s not found in table list of job configuration.

Error message

Table %s.%s not found in table list of job configuration.

What it means

ClickhouseSourceReader.pollNext() looks up the ClickhouseSourceTable for a split's configTablePath in its local tables map and throws TABLE_NOT_FOUND_ERROR when absent. The reader received a split for a table that was not part of its initialized table list, meaning reader state and split enumeration are inconsistent.

Source

Thrown at seatunnel-connectors-v2/connector-clickhouse/src/main/java/org/apache/seatunnel/connectors/seatunnel/clickhouse/source/ClickhouseSourceReader.java:80

    @Override
    public void close() throws IOException {
        if (client != null) {
            client.close();
        }
    }

    @Override
    public void pollNext(Collector<SeaTunnelRow> output) throws Exception {
        synchronized (output.getCheckpointLock()) {
            ClickhouseSourceSplit split = splitQueue.poll();
            if (split != null) {
                ClickhouseValueReader clickhouseValueReader = null;
                try {
                    ClickhouseSourceTable clickhouseSourceTable =
                            tables.get(split.getConfigTablePath());
                    if (clickhouseSourceTable == null) {
                        throw new ClickhouseConnectorException(
                                ClickhouseConnectorErrorCode.TABLE_NOT_FOUND_ERROR,
                                String.format(
                                        "Table %s.%s not found in table list of job configuration.",
                                        split.getConfigTablePath().getDatabaseName(),
                                        split.getConfigTablePath().getTableName()));
                    }

                    CatalogTable catalogTable = clickhouseSourceTable.getCatalogTable();

                    clickhouseValueReader =
                            new ClickhouseValueReader(
                                    split,
                                    catalogTable.getSeaTunnelRowType(),
                                    clickhouseSourceTable);
                    while (clickhouseValueReader.hasNext()) {
                        List<SeaTunnelRow> next = clickhouseValueReader.next();
                        next.forEach(output::collect);
                    }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Restart the job from scratch (no savepoint/checkpoint) so splits are re-enumerated from the current config
  2. Ensure the table list in the job config still contains the table named in the error
  3. If resuming after a config change is intended, change tablePath/config carefully or use a new job name
  4. Verify all SeaTunnel nodes run the same connector version

Example fix

// before: resuming modified job from old savepoint
sh bin/seatunnel.sh --config job.conf -s old.savepoint
// after: start fresh so splits match current config
sh bin/seatunnel.sh --config job.conf -e local
Defensive patterns

Strategy: fallback

Validate before calling

// before resuming from a savepoint, confirm all configured tables are still present in the new config
List<String> configured = config.getTablePaths();
assert configured.contains(split.getConfigTablePath()) : "split table missing from new config; start job fresh";

Try / catch

try {
    reader.pollNext(...);
} catch (ClickhouseConnectorException e) {
    if (e.getErrorCode() == ClickhouseConnectorErrorCode.TABLE_NOT_FOUND_ERROR) {
        // drop stale savepoint/checkpoint and restart the job so splits match the current config
        log.error("Stale split for removed table; restart job without savepoint", e);
    }
    throw e;
}

Prevention

When it happens

Trigger: A SourceSplit arrives whose configTablePath is not a key in the reader's `tables` map — typically after a job config change with restored/compatible checkpoint state, or a split enumerated for a table removed from the new config.

Common situations: Restarting/resuming a job from a checkpoint/savepoint after the table list in the config was edited, running with an incompatible connector version whose split serialization changed, or master/reader table-map initialization mismatch.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


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