prestodb/presto · error · PrestoException

NOT_SUPPORTED

NOT_SUPPORTED

Error message

Constraint %s of unknown type is not supported

What it means

When creating a table with constraints, ThriftHiveMetastore converts Presto logical constraints into Hive table constraints. Only PRIMARY KEY, UNIQUE, CHECK (and foreign keys handled in the preceding branch) are supported; any other constraint type triggers this NOT_SUPPORTED PrestoException.

Source

Thrown at presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/thrift/ThriftHiveMetastore.java:1066

                                        constraint.isEnabled(),
                                        constraint.isEnforced(),
                                        constraint.isRely()));
                    }
                }
                else if (constraint instanceof NotNullConstraint) {
                    notNullConstraints.add(
                            new SQLNotNullConstraint(
                                    table.getCatName(),
                                    table.getDbName(),
                                    table.getTableName(),
                                    constraint.getColumns().stream().findFirst().get(),
                                    constraint.getName().orElse(null),
                                    constraint.isEnabled(),
                                    constraint.isEnforced(),
                                    constraint.isRely()));
                }
                else {
                    throw new PrestoException(NOT_SUPPORTED, format("Constraint %s of unknown type is not supported", constraint.getName().orElse("")));
                }
            }

            callableName = "createTableWithConstraints";
            apiStats = stats.getCreateTableWithConstraints();
            callableClient = apiStats.wrap(() ->
                    getMetastoreClientThenCall(metastoreContext, client -> {
                        client.createTableWithConstraints(table, primaryKeys, uniqueConstraints, notNullConstraints);
                        return null;
                    }));
        }

        try {
            retry()
                    .stopOn(AlreadyExistsException.class, InvalidObjectException.class, MetaException.class, NoSuchObjectException.class)
                    .stopOnIllegalExceptions()
                    .run(callableName, callableClient);
        }

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Remove the unsupported constraint from the CREATE TABLE statement
  2. Create the table without constraints and enforce rules at the application/query level
  3. Check connector/plugin versions for consistency so only known constraint kinds are produced
  4. If needed, express the constraint as a supported type (PRIMARY KEY/UNIQUE/CHECK)

Example fix

-- before
CREATE TABLE hive.db.t (a BIGINT, CONSTRAINT c0 EXCLUDE ...);
-- after: drop unsupported constraint
CREATE TABLE hive.db.t (a BIGINT);
Defensive patterns

Strategy: validation

Validate before calling

// validate constraint types before CREATE TABLE with constraints
boolean supported = constraints.stream().allMatch(c ->
    c instanceof PrimaryKey || c instanceof Unique || c instanceof Check || c instanceof ForeignKey);
if (!supported) { /* strip or rewrite unsupported constraints */ }

Try / catch

try {
    createTable(...);
} catch (PrestoException e) {
    if ("NOT_SUPPORTED".equals(e.getErrorCode().getName())
            && e.getMessage().contains("of unknown type")) {
        // retry without constraints
    } else throw e;
}

Prevention

When it happens

Trigger: CREATE TABLE ... (with constraints) where a constraint object in the table metadata is not PRIMARY KEY/UNIQUE/CHECK/FOREIGN KEY — e.g. a novel or connector-specific constraint type reaching the Hive metadata layer.

Common situations: CTAS or CREATE TABLE LIKE from another connector that carries unsupported constraint kinds; tooling-generated DDL including exotic constraints; connector/plugin version mismatch injecting new constraint types.

Understand the failure class

Background: Presto NOT_SUPPORTED error: what "not supported" means and how to fix it — this error's family across 3 libraries.

Related errors


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/a20b0762c979fbb0. Report an issue: GitHub.