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

  1. Confirm the table exists on the source and matches the configured path exactly (case-sensitive).
  2. Ensure the table is included in the connector's table-list/table-pattern config so discovery finds it.
  3. Fix the table path in the catalog table config to the fully-qualified name as discovered.
  4. 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

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


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