in xtable-core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java [62:100]
public static Object convertFromDeltaColumnStatValue(Object value, InternalSchema fieldSchema) {
if (value == null) {
return null;
}
if (noConversionForSchema(fieldSchema)) {
return castObjectToInternalType(value, fieldSchema);
}
// Needs special handling for date and time.
InternalType fieldType = fieldSchema.getDataType();
if (fieldType == InternalType.DATE) {
return (int) LocalDate.parse(value.toString()).toEpochDay();
}
Instant instant;
try {
instant = OffsetDateTime.parse(value.toString()).toInstant();
} catch (DateTimeParseException parseException) {
// fall back to parsing without offset
DateFormat dateFormat = getDateFormat(DATE_FORMAT_STR);
try {
instant = dateFormat.parse(value.toString()).toInstant();
} catch (ParseException ex) {
throw new org.apache.xtable.model.exception.ParseException(
"Unable to parse time from column stats", ex);
}
}
InternalSchema.MetadataValue timestampPrecision =
(InternalSchema.MetadataValue)
fieldSchema
.getMetadata()
.getOrDefault(
InternalSchema.MetadataKey.TIMESTAMP_PRECISION,
InternalSchema.MetadataValue.MICROS);
if (timestampPrecision == InternalSchema.MetadataValue.MILLIS) {
return instant.toEpochMilli();
}
return TimeUnit.SECONDS.toMicros(instant.getEpochSecond())
+ TimeUnit.NANOSECONDS.toMicros(instant.getNano());
}