@Override
    public byte[] readDecimal(int id) {
      long validatedLongValue = super.validatedLong(dict.decodeToLong(id),
                                                    serdeConstants.BIGINT_TYPE_NAME, true);
      if (super.isValid) {
        return super.validatedDecimal(validatedLongValue);
      } else {
        return null;
      }
    }
The reader who reads unsigned long data.

The data is read as long from the reader, then validated, converted and returned as per the
type defined in HMS.  The data is unsigned long hence when read back it can't be negative.
The call to validate will indicate that the data is unsigned to do the appropriate
validation.
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/vector/ParquetDataColumnReaderFactory.java