prestodb/presto · warning · PrestoException

NOT_SUPPORTED

NOT_SUPPORTED

Error message

Unable to rollback insert for table %s.%s. Some rows may have been written. Please run your insert again.

What it means

Accumulo has no transactional rollback for inserted rows, so AccumuloMetadata.rollbackInsert always throws NOT_SUPPORTED. If a batch of Mutations partially succeeded before failing, some rows are already written and cannot be undone; the documented strategy is to rerun the insert, since rewriting the same mutations is idempotent.

Source

Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/AccumuloMetadata.java:231

        return handle;
    }

    @Override
    public Optional<ConnectorOutputMetadata> finishInsert(ConnectorSession session, ConnectorInsertTableHandle insertHandle, Collection<Slice> fragments, Collection<ComputedStatistics> computedStatistics)
    {
        clearRollback();
        return Optional.empty();
    }

    private static void rollbackInsert(ConnectorInsertTableHandle insertHandle)
    {
        // Rollbacks for inserts are off the table when it comes to data in Accumulo.
        // When a batch of Mutations fails to be inserted, the general strategy
        // is to run the insert operation again until it is successful
        // Any mutations that were successfully written will be overwritten
        // with the same values, so that isn't a problem.
        AccumuloTableHandle handle = (AccumuloTableHandle) insertHandle;
        throw new PrestoException(NOT_SUPPORTED, format("Unable to rollback insert for table %s.%s. Some rows may have been written. Please run your insert again.", handle.getSchema(), handle.getTable()));
    }

    @Override
    public ConnectorTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName)
    {
        if (!listSchemaNames(session).contains(tableName.getSchemaName().toLowerCase(Locale.ENGLISH))) {
            return null;
        }

        // Need to validate that SchemaTableName is a table
        if (!this.listViews(session, Optional.of(tableName.getSchemaName())).contains(tableName)) {
            AccumuloTable table = client.getTable(tableName);
            if (table == null) {
                return null;
            }

            return new AccumuloTableHandle(
                    connectorId,

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Simply rerun the same INSERT statement — rows written identically are overwritten with the same values, making the retry safe.
  2. If rerunning is undesirable, delete the partially written rows (e.g. via the Accumulo shell or a DELETE query) before retrying.
  3. For strict correctness requirements, write to a staging table and atomically swap/rename into the final table.
  4. Reduce insert batch size and improve writer stability to lower the chance of partial writes.

Example fix

// before: assume rollback happened
// after: retry the insert; duplicates are overwritten harmlessly
INSERT INTO schema.table SELECT ... ;  // run again until success
Defensive patterns

Strategy: retry

Try / catch

try {
  connectorMetadata.finishInsert(...);
} catch (PrestoException e) {
  if (e.getErrorCode().toErrorCodeDetail().contains("NOT_SUPPORTED")) {
    // some rows may be written; rerun the same INSERT — rewrites are idempotent
  }
  throw e;
}

Prevention

When it happens

Trigger: Any failed INSERT into an Accumulo table that triggers Presto's connector rollback path (beginInsert → rollbackInsert), i.e. an insert that failed mid-flight after some Mutations were flushed to Accumulo.

Common situations: Writer process crashes or Accumulo connection loss during a large INSERT; query killed mid-insert; underlying table dropped or tablet server failure while mutations are being written.

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/8266f3ecd0780034. Report an issue: GitHub.