apache/seatunnel · error · TableAlreadyExistException

Table already exists in catalog (TableAlreadyExistException)

Error message

Table %s already exists in catalog %s (TableAlreadyExistException)

What it means

DorisCatalog.createTable throws TableAlreadyExistException(catalogName, tablePath) when the target table already exists and ignoreIfExists is false; with ignoreIfExists=true it logs and skips creation instead.

Solutions

  1. Drop the existing table or choose a different table name
  2. Enable ignoreIfExists semantics so existing tables are reused
  3. Confirm the target table path does not point at an unintended table
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/catalog/DorisCatalog.java:411 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/catalog/DorisCatalog.java:411

        return typeConverter.convert(typeDefine);
    }

    @Override
    public void createTable(TablePath tablePath, CatalogTable table, boolean ignoreIfExists)
            throws TableAlreadyExistException, DatabaseNotExistException, CatalogException {

        if (!databaseExists(tablePath.getDatabaseName())) {
            throw new DatabaseNotExistException(catalogName, tablePath.getDatabaseName());
        }

        boolean tableExists = tableExists(tablePath);
        if (ignoreIfExists && tableExists) {
            LOG.info("table {} is exists, skip create", tablePath.getFullName());
            return;
        }

        if (tableExists) {
            throw new TableAlreadyExistException(catalogName, tablePath);
        }

        String stmt =
                DorisCatalogUtil.getCreateTableStatement(
                        createTableTemplate, tablePath, table, typeConverter);
        try (Statement statement = conn.createStatement()) {
            statement.execute(stmt);
        } catch (SQLException e) {
            throw new CatalogException("create table statement execute failed", e);
        }
    }

    @Override
    public void dropTable(TablePath tablePath, boolean ignoreIfNotExists)
            throws TableNotExistException, CatalogException {
        String query = DorisCatalogUtil.getDropTableQuery(tablePath, ignoreIfNotExists);
        try (Statement stmt = conn.createStatement()) {
            stmt.execute(query);

View on GitHub (pinned to cf67b549a7)