prestodb/presto · error · PrestoException

HIVE_UNSUPPORTED_FORMAT

HIVE_UNSUPPORTED_FORMAT

Error message

Split converter %s failed to create FileSplit.

What it means

CustomSplitConversionUtils.recreateSplitWithCustomInfo iterates registered CustomSplitConverters to rebuild a FileSplit from custom split info. If a converter throws IOException while recreating the split, the utility wraps it in a PrestoException with HIVE_UNSUPPORTED_FORMAT, naming the converter class. It means the connector's split converter could not decode/rehydrate the split info, typically a format or serialization mismatch.

Source

Thrown at presto-hive/src/main/java/com/facebook/presto/hive/util/CustomSplitConversionUtils.java:61

    {
        for (CustomSplitConverter converter : converters) {
            Optional<Map<String, String>> customSplitData = converter.extractCustomSplitInfo(split);
            if (customSplitData.isPresent()) {
                return customSplitData.get();
            }
        }
        return ImmutableMap.of();
    }

    public static FileSplit recreateSplitWithCustomInfo(FileSplit split, Map<String, String> customSplitInfo)
    {
        for (CustomSplitConverter converter : converters) {
            Optional<FileSplit> fileSplit;
            try {
                fileSplit = converter.recreateFileSplitWithCustomInfo(split, customSplitInfo);
            }
            catch (IOException e) {
                throw new PrestoException(HIVE_UNSUPPORTED_FORMAT, String.format("Split converter %s failed to create FileSplit.", converter.getClass()), e);
            }
            if (fileSplit.isPresent()) {
                return fileSplit.get();
            }
        }
        return split;
    }
}

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Clear stale split caches / re-plan the query so splits are regenerated with the current converter
  2. Ensure the Presto version that reads the split info matches the one that produced it (avoid rolling upgrades across incompatible versions)
  3. Inspect the wrapped IOException cause to identify the serialization problem
  4. Fix or disable the offending CustomSplitConverter for that format
  5. Verify table/storage format is actually supported by the configured converters

Example fix

// before: stale customSplitInfo from older Presto
// after: re-generate splits by clearing cache / re-running the query on matching versions
// (no direct code change; align versions and invalidate cached splits)
Defensive patterns

Strategy: try-catch

Validate before calling

// sanity check before consuming custom split info
requireNonNull(customSplitInfo, "customSplitInfo is null");
if (!converter.getClass().getName().equals(customSplitInfo.getConverterClass())) {
    throw new PrestoException(HIVE_UNSUPPORTED_FORMAT, "Converter mismatch: " + customSplitInfo.getConverterClass());
}

Try / catch

try {
    split = CustomSplitConversionUtils.recreateSplitWithCustomInfo(split, customSplitInfo, converters);
} catch (PrestoException e) {
    if (HIVE_UNSUPPORTED_FORMAT.toErrorCode().equals(e.getErrorCode())) {
        LOG.warn("Falling back to original split: " + e.getMessage());
        return split; // degrade gracefully where safe
    }
    throw e;
}

Prevention

When it happens

Trigger: Reading a split whose customSplitInfo blob was produced by an incompatible converter version or is corrupt; converter.recreateFileSplitWithCustomInfo throwing IOException on deserialization.

Common situations: Upgrading Presto or a storage-format plugin so old split info no longer parses; corrupt cached split info; a connector registered for a format it cannot recreate (e.g. certain ORC/Parquet custom splits).

Related errors


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