@Override protected void update(Object p, PrimitiveObjectInspector inputOI) { HiveDecimal v = PrimitiveObjectInspectorUtils.getHiveDecimal(p, inputOI); //Update min counter if new value is less than min seen so far if (min == null || v.compareTo(min) < 0) { min = v; } //Update max counter if new value is greater than max seen so far if (max == null || v.compareTo(max) > 0) { max = v; } // Add value to NumDistinctValue Estimator numDV.addToEstimator(v); }
public static int compare(HiveDecimalWritable writableLeft, HiveDecimal right) { return writableLeft.getHiveDecimal().compareTo(right); }
@Override protected void update(Object p, PrimitiveObjectInspector inputOI) { HiveDecimal v = PrimitiveObjectInspectorUtils.getHiveDecimal(p, inputOI); //Update min counter if new value is less than min seen so far if (min == null || v.compareTo(min) < 0) { min = v; } //Update max counter if new value is greater than max seen so far if (max == null || v.compareTo(max) > 0) { max = v; } // Add value to NumDistinctValue Estimator numDV.addToEstimator(v); }
@Override protected void updateMax(Object maxValue, HiveDecimalObjectInspector maxFieldOI) { if ((maxValue != null) && (max == null || max.compareTo(maxFieldOI.getPrimitiveJavaObject(maxValue)) < 0)) { max = maxFieldOI.getPrimitiveJavaObject(maxValue); } } };
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.divide(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.remainder(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
@Override protected void updateMin(Object minValue, HiveDecimalObjectInspector minFieldOI) { if ((minValue != null) && (min == null || min.compareTo(minFieldOI.getPrimitiveJavaObject(minValue)) > 0)) { min = minFieldOI.getPrimitiveJavaObject(minValue); } }
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.divide(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
@Override protected void updateMax(Object maxValue, HiveDecimalObjectInspector maxFieldOI) { if ((maxValue != null) && (max == null || max.compareTo(maxFieldOI.getPrimitiveJavaObject(maxValue)) < 0)) { max = maxFieldOI.getPrimitiveJavaObject(maxValue); } } };
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.remainder(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
@Override protected void updateMin(Object minValue, HiveDecimalObjectInspector minFieldOI) { if ((minValue != null) && (min == null || min.compareTo(minFieldOI.getPrimitiveJavaObject(minValue)) > 0)) { min = minFieldOI.getPrimitiveJavaObject(minValue); } }
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.remainder(right).add(right).remainder(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
@Override protected HiveDecimalWritable evaluate(HiveDecimal left, HiveDecimal right) { if (right.compareTo(HiveDecimal.ZERO) == 0) { return null; } HiveDecimal dec = left.remainder(right).add(right).remainder(right); if (dec == null) { return null; } decimalWritable.set(dec); return decimalWritable; }
private IntWritable evaluate(HiveDecimal exprValue, HiveDecimal minValue, HiveDecimal maxValue, int numBuckets) { Preconditions.checkArgument(numBuckets > 0, "numBuckets in width_bucket function must be above 0"); Preconditions.checkArgument(!maxValue.equals(minValue), "maxValue cannot be equal to minValue in width_bucket function"); if (maxValue.compareTo(minValue) > 0) { if (exprValue.compareTo(minValue) < 0) { output.set(0); } else if (exprValue.compareTo(maxValue) >= 0) { output.set(numBuckets + 1); } else { output.set(HiveDecimal.create(numBuckets).multiply(exprValue.subtract(minValue)).divide( maxValue.subtract(minValue)).add(HiveDecimal.ONE).intValue()); } } else { if (exprValue.compareTo(minValue) > 0) { output.set(0); } else if (exprValue.compareTo(maxValue) <= 0) { output.set(numBuckets + 1); } else { output.set(HiveDecimal.create(numBuckets).multiply(minValue.subtract(exprValue)).divide( minValue.subtract(maxValue)).add(HiveDecimal.ONE).intValue()); } } return output; }
@Test public void testAbs() { DecimalColumnVector dcv = new DecimalColumnVector(4 ,20, 13); HiveDecimal d1 = HiveDecimal.create("19.56778"); DecimalUtil.abs(0, d1, dcv); Assert.assertEquals(0, d1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal d2 = HiveDecimal.create("-25.34567"); HiveDecimal expected2 = HiveDecimal.create("25.34567"); DecimalUtil.abs(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); }
@Test public void testNegate() { DecimalColumnVector dcv = new DecimalColumnVector(4 ,20, 13); HiveDecimal d1 = HiveDecimal.create("19.56778"); HiveDecimal expected1 = HiveDecimal.create("-19.56778"); DecimalUtil.negate(0, d1, dcv); Assert.assertEquals(0, expected1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal d2 = HiveDecimal.create("-25.34567"); HiveDecimal expected2 = HiveDecimal.create("25.34567"); DecimalUtil.negate(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); // As of HIVE-8745, these decimal values should be trimmed of trailing zeros. HiveDecimal d3 = HiveDecimal.create("0.00000"); Assert.assertEquals(0, d3.scale()); HiveDecimal expected3 = HiveDecimal.create("0"); DecimalUtil.negate(0, d3, dcv); Assert.assertEquals(0, expected3.compareTo(dcv.vector[0].getHiveDecimal())); }
HiveDecimal expected1 = HiveDecimal.create("19.568"); DecimalUtil.round(0, d1, dcv); Assert.assertEquals(0, expected1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected2 = HiveDecimal.create("23.567"); DecimalUtil.round(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected3.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected4 = HiveDecimal.create("-17.234"); DecimalUtil.round(0, d4, dcv); Assert.assertEquals(0, expected4.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected5.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected6.compareTo(dcv.vector[0].getHiveDecimal()));
HiveDecimal expected1 = HiveDecimal.create("20"); DecimalUtil.round(0, d1, dcv); Assert.assertEquals(0, expected1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected2 = HiveDecimal.create("23"); DecimalUtil.round(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected3.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected4 = HiveDecimal.create("-17"); DecimalUtil.round(0, d4, dcv); Assert.assertEquals(0, expected4.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected5.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected6.compareTo(dcv.vector[0].getHiveDecimal()));
HiveDecimal expected1 = HiveDecimal.create("19"); DecimalUtil.floor(0, d1, dcv); Assert.assertEquals(0, expected1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected2 = HiveDecimal.create("23"); DecimalUtil.floor(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected3.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected4 = HiveDecimal.create("-17"); DecimalUtil.floor(0, d4, dcv); Assert.assertEquals(0, expected4.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected5 = HiveDecimal.create("-1"); DecimalUtil.floor(0, d5, dcv); Assert.assertEquals(0, expected5.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected6 = HiveDecimal.create("0"); DecimalUtil.floor(0, d6, dcv); Assert.assertEquals(0, expected6.compareTo(dcv.vector[0].getHiveDecimal()));
HiveDecimal expected1 = HiveDecimal.create("20"); DecimalUtil.ceiling(0, d1, dcv); Assert.assertEquals(0, expected1.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected2 = HiveDecimal.create("23"); DecimalUtil.ceiling(0, d2, dcv); Assert.assertEquals(0, expected2.compareTo(dcv.vector[0].getHiveDecimal())); Assert.assertEquals(0, expected3.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected4 = HiveDecimal.create("-17"); DecimalUtil.ceiling(0, d4, dcv); Assert.assertEquals(0, expected4.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected5 = HiveDecimal.create("0"); DecimalUtil.ceiling(0, d5, dcv); Assert.assertEquals(0, expected5.compareTo(dcv.vector[0].getHiveDecimal())); HiveDecimal expected6 = HiveDecimal.create("1"); DecimalUtil.ceiling(0, d6, dcv); Assert.assertEquals(0, expected6.compareTo(dcv.vector[0].getHiveDecimal()));