diff --git a/java/bench/core/src/java/org/apache/orc/bench/core/convert/avro/AvroReader.java b/java/bench/core/src/java/org/apache/orc/bench/core/convert/avro/AvroReader.java index 97b58a8fea..2756ca1ddd 100644 --- a/java/bench/core/src/java/org/apache/orc/bench/core/convert/avro/AvroReader.java +++ b/java/bench/core/src/java/org/apache/orc/bench/core/convert/avro/AvroReader.java @@ -41,6 +41,7 @@ import org.apache.orc.bench.core.convert.BatchReader; import java.io.IOException; +import java.math.BigInteger; import java.nio.ByteBuffer; import java.util.List; @@ -201,7 +202,11 @@ public void convert(ColumnVector cv, int row, Object value) { cv.isNull[row] = true; } else { DecimalColumnVector tc = (DecimalColumnVector) cv; - tc.vector[row].set(HiveDecimal.create(Math.round((double) value * multiplier))); + if (value instanceof ByteBuffer) { + tc.vector[row].set(getHiveDecimalFromByteBuffer((ByteBuffer) value, scale)); + } else { + tc.vector[row].set(HiveDecimal.create(Math.round((double) value * multiplier))); + } } } } @@ -289,6 +294,13 @@ static AvroConverter createConverter(TypeDescription types) { } } + static HiveDecimal getHiveDecimalFromByteBuffer(ByteBuffer byteBuffer, + int scale) { + byte[] result = getBytesFromByteBuffer(byteBuffer); + HiveDecimal dec = HiveDecimal.create(new BigInteger(result), scale); + return dec; + } + static byte[] getBytesFromByteBuffer(ByteBuffer byteBuffer) { byteBuffer.rewind(); byte[] result = new byte[byteBuffer.limit()];