apache/seatunnel · error · TableNotExistException

TableNotExistException: table '${tablePath}' does not exist

Error message

TableNotExistException: table '${tablePath}' does not exist in catalog '${catalogName}'

What it means

Thrown by HbaseCatalog.dropTable when the target HBase table does not exist and ignoreIfNotExists is false. Standard catalog TableNotExistException sentinel; the missing table and catalog name identify the failed lookup.

Source

Thrown at seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/catalog/HbaseCatalog.java:147

            }
            return;
        }
        hbaseClient.createTable(
                tablePath.getDatabaseName(),
                tablePath.getTableName(),
                hbaseParameters.getFamilyNames().values().stream()
                        .filter(value -> !"all_columns".equals(value))
                        .collect(Collectors.toList()),
                ignoreIfExists);
    }

    @Override
    public void dropTable(TablePath tablePath, boolean ignoreIfNotExists)
            throws TableNotExistException, CatalogException {
        checkNotNull(tablePath);
        if (!tableExists(tablePath)) {
            if (!ignoreIfNotExists) {
                throw new TableNotExistException(catalogName, tablePath);
            }
            return;
        }
        hbaseClient.dropTable(tablePath.getDatabaseName(), tablePath.getTableName());
    }

    @Override
    public void createDatabase(TablePath tablePath, boolean ignoreIfExists)
            throws DatabaseAlreadyExistException, CatalogException {
        if (databaseExists(tablePath.getDatabaseName())) {
            if (!ignoreIfExists) {
                throw new DatabaseAlreadyExistException(catalogName, tablePath.getDatabaseName());
            }
            return;
        }
        hbaseClient.createNamespace(tablePath.getDatabaseName());
    }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Pass ignoreIfNotExists = true for idempotent cleanup.
  2. Confirm the exact namespace:table name with HBase shell 'list'.
  3. Check whether another process already dropped the table.

Example fix

// before
catalog.dropTable(path, false); // fails if already dropped
// after
catalog.dropTable(path, true);
Defensive patterns

Strategy: validation

Validate before calling

if (catalog.tableExists(tablePath)) {
    catalog.dropTable(tablePath, false);
}

Try / catch

try {
    catalog.dropTable(tablePath, false);
} catch (TableNotExistException e) {
    LOG.info("Table {} already gone; nothing to drop", tablePath.getFullName());
}

Prevention

When it happens

Trigger: Calling dropTable(tablePath, ignoreIfNotExists=false) where tableExists returns false (table never created, already dropped, or wrong namespace/name).

Common situations: Cleanup scripts running twice; typos in table or namespace name; case mismatch (HBase table names are case-sensitive); table disabled but effectively absent in the connector's check.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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