@Override
  protected void readValue(BlockBuilder blockBuilder, Type type) {
    if (type instanceof TimestampWithTimeZoneType) {
      DecodedTimestamp decodedTimestamp = decodeInt96Timestamp(valuesReader.readBytes());
      LongTimestampWithTimeZone longTimestampWithTimeZone =
          LongTimestampWithTimeZone.fromEpochSecondsAndFraction(
              decodedTimestamp.epochSeconds(), decodedTimestamp.nanosOfSecond() * 1000L, UTC_KEY);
      type.writeObject(blockBuilder, longTimestampWithTimeZone);
    } else {
      TrinoTimestampEncoder<?> trinoTimestampEncoder =
          createTimestampEncoder((TimestampType) type, timeZone);
      trinoTimestampEncoder.write(decodeInt96Timestamp(valuesReader.readBytes()), blockBuilder);
    }
  }
Copy from trino-parquet TimestampColumnReader and do some change to adapt mixed-format table
amoro-format-mixed/amoro-mixed-trino/src/main/java/io/trino/parquet/reader/TimestampColumnReader.java