prestodb/presto · error
ACCUMULO_TABLE_DNE
ACCUMULO_TABLE_DNE
Error message
Accumulo error when creating BatchWriter and/or Indexer, table does not exist
What it means
Thrown when creating the AccumuloPageSink's BatchWriter or Indexer fails because the target Accumulo table (or its index table) does not exist, detected via TableNotFoundException. ACCUMULO_TABLE_DNE tells the user that the Presto-facing table is registered but the backing Accumulo table is missing, distinct from the generic UNEXPECTED_ACCUMULO_ERROR for other setup failures.
Source
Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/io/AccumuloPageSink.java:129
// If the table is indexed, create an instance of an Indexer, else empty
if (table.isIndexed()) {
indexer = Optional.of(
new Indexer(
connector,
connector.securityOperations().getUserAuthorizations(username),
table,
conf));
}
else {
indexer = Optional.empty();
}
}
catch (AccumuloException | AccumuloSecurityException e) {
throw new PrestoException(UNEXPECTED_ACCUMULO_ERROR, "Accumulo error when creating BatchWriter and/or Indexer", e);
}
catch (TableNotFoundException e) {
throw new PrestoException(ACCUMULO_TABLE_DNE, "Accumulo error when creating BatchWriter and/or Indexer, table does not exist", e);
}
}
/**
* Converts a {@link Row} to an Accumulo mutation.
*
* @param row Row object
* @param rowIdOrdinal Ordinal in the list of columns that is the row ID. This isn't checked at all, so I hope you're right. Also, it is expected that the list of column handles is sorted in ordinal order. This is a very demanding function.
* @param columns All column handles for the Row, sorted by ordinal.
* @param serializer Instance of {@link AccumuloRowSerializer} used to encode the values of the row to the Mutation
* @return Mutation
*/
public static Mutation toMutation(Row row, int rowIdOrdinal, List<AccumuloColumnHandle> columns, AccumuloRowSerializer serializer)
{
// Set our value to the row ID
Text value = new Text();
Field rowField = row.getField(rowIdOrdinal);
if (rowField.isNull()) {View on GitHub (pinned to 55bb57d202)
Solutions
- Recreate the missing Accumulo table matching the name in Presto metadata (via the Accumulo shell or the Presto Accumulo connector's create table path)
- Drop and re-create the table through Presto so metadata and the Accumulo table are created together
- Confirm the configured index table name also exists if indexing is enabled (check user_tables_mapping and the connector config)
- Audit ops procedures so Accumulo tables are only dropped via the Presto connector (DROP TABLE) to keep metadata in sync
Example fix
// before // Accumulo table dropped out-of-band; Presto still has schema // ERROR: ACCUMULO_TABLE_DNE on sink creation // after -- in Presto, recreate metadata and backing table together CREATE TABLEmyschema.mytable (... ) WITH (external=false); -- or re-register with the Accumulo connector's table-setup tool
Defensive patterns
Strategy: validation
Validate before calling
Connector conn = instance.getConnector(user, password);
if (!conn.tableOperations().exists(dataTable)) {
throw new IllegalStateException("Accumulo table missing: " + dataTable);
}
if (!conn.tableOperations().exists(indexTable)) {
throw new IllegalStateException("Accumulo index table missing: " + indexTable);
} Try / catch
try {
AccumuloPageSink sink = new AccumuloPageSink(...);
} catch (PrestoException e) {
if (e.getErrorCode().getCode() == StandardErrorCode.ACCUMULO_TABLE_DNE.toErrorCode().getCode()) {
// recover by recreating the backing table or re-registering via Presto
throw new RuntimeException("Backing Accumulo table missing; run CREATE TABLE via Presto to recreate", e);
}
throw e;
} Prevention
- Only drop tables through Presto's DROP TABLE so metadata and Accumulo tables stay in sync
- Run a periodic reconciliation check that every registered Presto table has a backing Accumulo table
- Restore schema metadata and data tables together from backups
- Enable indexing only when the corresponding index table is created by the connector
When it happens
Trigger: Constructing AccumuloPageSink for a Presto table whose underlying Accumulo table was dropped externally (accumulo shell drop table), renamed, or never created (metadata registered without create_table=true); the index table missing when indexing is enabled.
Common situations: Someone deleted the Accumulo table directly to 'clean up' while Presto still has schema metadata; a Presto/Accumulo restore from backup where the schema table entries survived but the data tables didn't; typo'd or changed table name mapping after a version migration.
Related errors
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/6fcbf18aaf4f2ff5.
Report an issue: GitHub.