apache/seatunnel · warning
Table {} is not found in catalog tables, skip to merge confi
Error message
Table {} is not found in catalog tables, skip to merge config What it means
CatalogTableUtils.mergeCatalogTableConfig merges user-provided catalog table configurations (e.g. primary keys, schema info) into discovered CDC catalog tables. If a configured table path does not match any table found by the connector's catalog discovery, the config is skipped with this warning and the table keeps its auto-discovered definition.
Source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/utils/CatalogTableUtils.java:60
public static List<CatalogTable> mergeCatalogTableConfig(
List<CatalogTable> tables,
List<JdbcSourceTableConfig> tableConfigs,
Function<String, TablePath> parser) {
Map<TablePath, CatalogTable> catalogTableMap =
tables.stream()
.collect(Collectors.toMap(t -> t.getTableId().toTablePath(), t -> t));
for (JdbcSourceTableConfig catalogTableConfig : tableConfigs) {
TablePath tablePath = parser.apply(catalogTableConfig.getTable());
CatalogTable catalogTable = catalogTableMap.get(tablePath);
if (catalogTable != null) {
catalogTable = mergeCatalogTableConfig(catalogTable, catalogTableConfig);
catalogTableMap.put(tablePath, catalogTable);
log.info(
"Override primary key({}) for catalog table {}",
catalogTableConfig.getPrimaryKeys(),
catalogTableConfig.getTable());
} else {
log.warn(
"Table {} is not found in catalog tables, skip to merge config",
catalogTableConfig.getTable());
}
}
return new ArrayList<>(catalogTableMap.values());
}
public static CatalogTable mergeCatalogTableConfig(
final CatalogTable table, JdbcSourceTableConfig config) {
List<String> columnNames =
table.getTableSchema().getColumns().stream()
.map(c -> c.getName())
.collect(Collectors.toList());
for (String pk : config.getPrimaryKeys()) {
if (!columnNames.contains(pk)) {
throw new IllegalArgumentException(
String.format(
"Primary key(%s) is not in table(%s) columns(%s)",View on GitHub (pinned to cf67b549a7)
Solutions
- Confirm the table exists on the source and matches the configured path exactly (case-sensitive).
- Ensure the table is included in the connector's table-list/table-pattern config so discovery finds it.
- Fix the table path in the catalog table config to the fully-qualified name as discovered.
- Check connector logs for the discovered table list and align config entries with it.
Example fix
// before
catalog-tables = [{ table = "mydb.users", primary-keys = ["id"] }] // table not discovered
// after: fix path and include in table-list
table-list = ["mydb.users"]
catalog-tables = [{ table = "mydb.users", primary-keys = ["id"] }] Defensive patterns
Strategy: validation
Validate before calling
// align catalog-tables entries with discovered tables
Set<String> discovered = discoveredTables();
List<String> unknown = configuredTables.stream().filter(t -> !discovered.contains(t)).collect(toList());
if (!unknown.isEmpty()) throw new IllegalArgumentException("tables not found: " + unknown); Type guard
if (!catalogTableMap.containsKey(tablePath)) { LOG.warn("skip unknown table {}", tablePath); return; } Try / catch
// warning-only skip; fix table paths instead
Prevention
- Match table names exactly, including case
- Include configured tables in table-list/table-pattern
- Log and review the discovered table list on first run
- Keep catalog-tables config generated from the source schema
When it happens
Trigger: A catalog-tables config entry's table path (database.table) doesn't match any table in the discovered catalogTableMap — due to case mismatch, wrong database name, table excluded by table-list filters, or the table not existing at discovery time.
Common situations: Typos in table names in the CDC config; configuring primary keys for tables filtered out of table-list; case-sensitive database/table names on the source; upstream table dropped before the job starts.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- TABLE_NOT_FOUND
- Source offset '" + key + "' parameter value " + obj + " coul
- Primary key(%s) is not in table(%s) columns(%s)
- Table is not enabled for capture
- System or JVM property '${property}' is already defined, but
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/c7e633417743abb1.
Report an issue: GitHub.