apache/druid · error · ParseException
Timestamp[ ] is unparseable! Event
Error message
Timestamp[%s] is unparseable! Event: %s
What it means
MapInputRowParser.parseTimestampOrThrowParseException throws this ParseException when the TimestampSpec cannot parse the row's timestamp value. The timestamp string did not match any configured format or parse function, so the row cannot be assigned a primary timestamp.
Solutions
- Fix the timestampSpec format/pattern to match the actual data
- Verify the timestamp column name points to the right field
- Pre-normalize timestamps in the parse spec (e.g. with a transform)
- Check the row content in the exception message for the actual timestamp representation
Example fix
// before
"timestampSpec": {"column": "ts", "format": "iso"} // data: 01/02/2024 10:00:00
// after
"timestampSpec": {"column": "ts", "format": "MM/dd/yyyy HH:mm:ss"} Defensive patterns
Strategy: validation
Validate before calling
// sample-check timestamp parse before ingestion
try { new TimestampSpec("ts", "iso", null).parseDateTime(row.get("ts")); } catch (Exception e) { /* bad format */ } Type guard
boolean isParseable(Object v, TimestampSpec ts) { try { ts.parseDateTime(v); return true; } catch (Exception e) { return false; } } Try / catch
try { parser.parseBatch(rows); } catch (ParseException e) { log.error("Bad timestamp in row: {}", e.getMessage()); sendToDeadLetter(e); } Prevention
- Match timestampSpec format/pattern to real data samples
- Verify the timestamp column name exists in the schema
- Pre-normalize timestamps upstream or with transforms
When it happens
Trigger: A row whose timestamp field value cannot be interpreted by the configured timestampSpec (wrong format, missing column, null value) - specifically when TimestampSpec.parseDateTime throws.
Common situations: Timestamps in a different format than spec.format/pattern expects, ISO strings fed to a 'millis' format, timestamps in a column other than the configured column, locale/timezone mismatches.
Related errors
- Encountered row with timestamp
- Incorrect Regex: . No match found.
- Unable to parse row [ ]
- Attempt to add row to swapped-out sink for segment
- authResult.getErrorMessage()
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/acf31ff4714afac8.
Report an issue: GitHub.
Appendix: source
Thrown at processing/src/main/java/org/apache/druid/data/input/impl/MapInputRowParser.java:154
*
* @param timeValue object to interpret as timestmap
* @param timestampSpec timestamp spec
* @param rawMapSupplier supplier of the original raw data that this object came from. Used for error messages.
*/
public static DateTime parseTimestampOrThrowParseException(
final Object timeValue,
final TimestampSpec timestampSpec,
final Supplier<Map<String, ?>> rawMapSupplier
)
{
final DateTime timestamp;
try {
timestamp = timestampSpec.parseDateTime(timeValue);
}
catch (Exception e) {
String rawMap = rawMapToPrint(rawMapSupplier.get());
throw new ParseException(
rawMap,
e,
"Timestamp[%s] is unparseable! Event: %s",
timeValue,
rawMap
);
}
if (timestamp == null) {
String rawMap = rawMapToPrint(rawMapSupplier.get());
throw new ParseException(
rawMap,
"Timestamp[%s] is unparseable! Event: %s",
timeValue,
rawMap
);
}
if (!Intervals.ETERNITY.contains(timestamp)) {
String rawMap = rawMapToPrint(rawMapSupplier.get());View on GitHub (pinned to 9b90983fd2)