public static BigDecimal parseHiveDecimal(byte[] bytes, int start, int length, DecimalType columnType) { BigDecimal parsed = new BigDecimal(new String(bytes, start, length, UTF_8)); if (parsed.scale() > columnType.getScale()) { // Hive rounds HALF_UP too parsed = parsed.setScale(columnType.getScale(), HALF_UP); } return rescale(parsed, columnType); } }
public static Slice getLongDecimalValue(HiveDecimalWritable writable, int columnScale) { BigInteger value = new BigInteger(writable.getInternalStorage()); value = rescale(value, writable.getScale(), columnScale); return encodeUnscaledValue(value); } }
public static long getShortDecimalValue(HiveDecimalWritable writable, int columnScale) { byte[] bytes = writable.getInternalStorage(); long value = getShortDecimalValue(bytes); value = rescale(value, writable.getScale(), columnScale); return value; }
public void nextShortDecimalVector(int items, BlockBuilder builder, DecimalType targetType, long[] sourceScale) throws IOException { for (int i = 0; i < items; i++) { long value = nextLong(); long rescaledDecimal = Decimals.rescale(value, (int) sourceScale[i], targetType.getScale()); targetType.writeLong(builder, rescaledDecimal); } }
public void nextShortDecimalVector(int items, BlockBuilder builder, DecimalType targetType, long[] sourceScale, boolean[] isNull) throws IOException { for (int i = 0; i < items; i++) { if (!isNull[i]) { long rescaledDecimal = Decimals.rescale(nextLong(), (int) sourceScale[i], targetType.getScale()); targetType.writeLong(builder, rescaledDecimal); } else { builder.appendNull(); } } }
private void parseDecimalColumn(int column) { loaded[column] = true; Object fieldData = rowInspector.getStructFieldData(rowData, structFields[column]); if (fieldData == null) { nulls[column] = true; } else { Object fieldValue = ((PrimitiveObjectInspector) fieldInspectors[column]).getPrimitiveJavaObject(fieldData); checkState(fieldValue != null, "fieldValue should not be null"); HiveDecimal decimal = (HiveDecimal) fieldValue; DecimalType columnType = (DecimalType) types[column]; BigInteger unscaledDecimal = rescale(decimal.unscaledValue(), decimal.scale(), columnType.getScale()); if (columnType.isShort()) { longs[column] = unscaledDecimal.longValue(); } else { slices[column] = Decimals.encodeUnscaledValue(unscaledDecimal); } nulls[column] = false; } }
@Override public long getLong(int field) { checkState(row != null, "No current row"); Column column = columns.get(field); if (column.getType().getBase() == ColumnType.Base.DATE) { return Days.daysBetween(new LocalDate(0), LocalDate.parse(row.get(column.getPosition()))).getDays(); } if (column.getType().getBase() == ColumnType.Base.TIME) { return LocalTime.parse(row.get(column.getPosition())).getMillisOfDay(); } if (column.getType().getBase() == ColumnType.Base.INTEGER) { return parseInt(row.get(column.getPosition())); } if (column.getType().getBase() == ColumnType.Base.DECIMAL) { DecimalParseResult decimalParseResult = Decimals.parse(row.get(column.getPosition())); return rescale((Long) decimalParseResult.getObject(), decimalParseResult.getType().getScale(), ((DecimalType) columnTypes.get(field)).getScale()); } return parseLong(row.get(column.getPosition())); }
return createDomain(type, hasNullValue, columnStatistics.getDecimalStatistics(), value -> rescale(value, (DecimalType) type).unscaledValue().longValue()); return createDomain(type, hasNullValue, columnStatistics.getDecimalStatistics(), value -> encodeUnscaledValue(rescale(value, (DecimalType) type).unscaledValue()));
HiveDecimalWritable writable = (HiveDecimalWritable) actualValue; BigInteger rescaledValue = rescale(writable.getHiveDecimal().unscaledValue(), writable.getScale(), decimalType.getScale()); actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());
long sourceScale = scaleStream.next(); if (decimalType.isShort()) { long rescaledDecimal = Decimals.rescale(decimalStream.nextLong(), (int) sourceScale, decimalType.getScale()); decimalType.writeLong(builder, rescaledDecimal); long sourceScale = scaleStream.next(); if (decimalType.isShort()) { long rescaledDecimal = Decimals.rescale(decimalStream.nextLong(), (int) sourceScale, decimalType.getScale()); decimalType.writeLong(builder, rescaledDecimal);
HiveDecimalWritable writable = (HiveDecimalWritable) actualValue; BigInteger rescaledValue = rescale(writable.getHiveDecimal().unscaledValue(), writable.getScale(), decimalType.getScale()); actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());
public void nextShortDecimalVector(int items, BlockBuilder builder, DecimalType targetType, long[] sourceScale) throws IOException { for (int i = 0; i < items; i++) { long value = nextLong(); long rescaledDecimal = Decimals.rescale(value, (int) sourceScale[i], targetType.getScale()); targetType.writeLong(builder, rescaledDecimal); } }
public void nextShortDecimalVector(int items, BlockBuilder builder, DecimalType targetType, long[] sourceScale, boolean[] isNull) throws IOException { for (int i = 0; i < items; i++) { if (!isNull[i]) { long rescaledDecimal = Decimals.rescale(nextLong(), (int) sourceScale[i], targetType.getScale()); targetType.writeLong(builder, rescaledDecimal); } else { builder.appendNull(); } } }
@Override public long getLong(int field) { checkState(row != null, "No current row"); Column column = columns.get(field); if (column.getType().getBase() == ColumnType.Base.DATE) { return Days.daysBetween(new LocalDate(0), LocalDate.parse(row.get(column.getPosition()))).getDays(); } if (column.getType().getBase() == ColumnType.Base.TIME) { return LocalTime.parse(row.get(column.getPosition())).getMillisOfDay(); } if (column.getType().getBase() == ColumnType.Base.INTEGER) { return parseInt(row.get(column.getPosition())); } if (column.getType().getBase() == ColumnType.Base.DECIMAL) { DecimalParseResult decimalParseResult = Decimals.parse(row.get(column.getPosition())); return rescale((Long) decimalParseResult.getObject(), decimalParseResult.getType().getScale(), ((DecimalType) columnTypes.get(field)).getScale()); } return parseLong(row.get(column.getPosition())); }
return createDomain(type, hasNullValue, columnStatistics.getDecimalStatistics(), value -> rescale(value, (DecimalType) type).unscaledValue().longValue()); return createDomain(type, hasNullValue, columnStatistics.getDecimalStatistics(), value -> encodeUnscaledValue(rescale(value, (DecimalType) type).unscaledValue()));
HiveDecimalWritable writable = (HiveDecimalWritable) actualValue; BigInteger rescaledValue = rescale(writable.getHiveDecimal().unscaledValue(), writable.getScale(), decimalType.getScale()); actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());
long sourceScale = scaleStream.next(); if (decimalType.isShort()) { long rescaledDecimal = Decimals.rescale(decimalStream.nextLong(), (int) sourceScale, decimalType.getScale()); decimalType.writeLong(builder, rescaledDecimal); long sourceScale = scaleStream.next(); if (decimalType.isShort()) { long rescaledDecimal = Decimals.rescale(decimalStream.nextLong(), (int) sourceScale, decimalType.getScale()); decimalType.writeLong(builder, rescaledDecimal);
HiveDecimalWritable writable = (HiveDecimalWritable) actualValue; BigInteger rescaledValue = rescale(writable.getHiveDecimal().unscaledValue(), writable.getScale(), decimalType.getScale()); actualValue = new SqlDecimal(rescaledValue, decimalType.getPrecision(), decimalType.getScale());