apache/seatunnel · warning

No captured data collections found in database

Error message

No captured data collections found in database

What it means

After filtering the list of CDC change tables down to those matching the connector's dataCollectionFilter (database/table include lists), getCdcTablesToQuery finds zero included tables and logs the Debezium NO_CAPTURED_DATA_COLLECTIONS_WARNING. This means CDC may be enabled on tables, but none of the captured tables match the connector's configured include/exclude filters, so there is nothing to stream. It is a warning, not a throw; the task continues with an empty capture set.

Source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-db2/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/db2/source/reader/fetch/transactionlog/Db2TransactionLogFetchTask.java:435

                throws SQLException, InterruptedException {
            Set<Db2ChangeTable> cdcEnabledTables = dataConnection.listOfChangeTables();
            if (cdcEnabledTables.isEmpty()) {
                LOG.warn(
                        "No table has enabled CDC or security constraints prevent getting the list of change tables");
            }

            Map<TableId, List<Db2ChangeTable>> includedAndCdcEnabledTables =
                    cdcEnabledTables.stream()
                            .filter(
                                    changeTable ->
                                            connectorConfig
                                                    .getTableFilters()
                                                    .dataCollectionFilter()
                                                    .isIncluded(changeTable.getSourceTableId()))
                            .collect(Collectors.groupingBy(Db2ChangeTable::getSourceTableId));

            if (includedAndCdcEnabledTables.isEmpty()) {
                LOG.warn(DatabaseSchema.NO_CAPTURED_DATA_COLLECTIONS_WARNING);
            }

            List<Db2ChangeTable> tables = new ArrayList<>();
            for (List<Db2ChangeTable> captures : includedAndCdcEnabledTables.values()) {
                Db2ChangeTable currentTable = captures.get(0);
                if (captures.size() > 1) {
                    Db2ChangeTable futureTable;
                    if (captures.get(0).getStartLsn().compareTo(captures.get(1).getStartLsn())
                            < 0) {
                        futureTable = captures.get(1);
                    } else {
                        currentTable = captures.get(1);
                        futureTable = captures.get(0);
                    }
                    currentTable.setStopLsn(futureTable.getStartLsn());
                    tables.add(futureTable);
                    LOG.info(
                            "Multiple capture instances present for the same table: {} and {}",

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Align table.include.list / database.include.list with the actual fully-qualified TableId of the CDC-enabled tables (verify via listOfChangeTables / cdc.change_tables query)
  2. Enable CDC on the tables you intend to capture if the include list is correct but the tables are not captured
  3. Re-check schema/table name casing and qualification against the source database catalog
  4. Log or inspect which TableIds exist and adjust the filter regex so at least one captured table matches

Example fix

// before
"table.include.list" = "dbo.UserTable" // captured table is actually MYDB.dbo.UserTable
// after
"table.include.list" = "MYDB.dbo.UserTable" // matches changeTable.getSourceTableId()
Defensive patterns

Strategy: validation

Validate before calling

// Verify that CDC-enabled tables intersect with the connector include lists
Set<String> cdcTables = listCdcEnabledTableIds(); // from sys.cdc.change_tables
List<String> includeList = config.getTableIncludeList(); // fully-qualified regexes
boolean anyMatch = cdcTables.stream().anyMatch(t ->
    includeList.stream().anyMatch(p -> t.matches(p)));
if (!anyMatch) {
    throw new IllegalStateException(
        "CDC-enabled tables " + cdcTables + " do not match include list " + includeList);
}

Prevention

When it happens

Trigger: Db2TransactionLogFetchTask.getCdcTablesToQuery() (via tablesSlot/tables): listOfChangeTables() returned change tables, but dataCollectionFilter().isIncluded(changeTable.getSourceTableId()) rejected every one — e.g. table.include.list patterns don't match schema/table names, tables were renamed or dropped after config was written, or case/schema-qualified names differ from what the filter expects.

Common situations: Copy-pasted include lists with wrong schema prefix (dbo.MyTable vs DBO.mytable vs MYDB.dbo.MyTable); regex include patterns that never match; database renamed after connector config authored; multi-tenant setups where include list references a tenant database not actually CDC-enabled; connector upgraded and stricter TableId formatting changed matching.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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