You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by rh...@apache.org on 2014/09/03 01:23:22 UTC
svn commit: r1622150 - in /hive/trunk/ql/src/java/org/apache/hadoop/hive/ql:
plan/ColStatistics.java stats/StatsUtils.java
Author: rhbutani
Date: Tue Sep 2 23:23:22 2014
New Revision: 1622150
URL: http://svn.apache.org/r1622150
Log:
HIVE-7915 Expose High and Low value in plan.ColStatistics (Harish Butani via Prasath Jayachandran)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java?rev=1622150&r1=1622149&r2=1622150&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java Tue Sep 2 23:23:22 2014
@@ -32,6 +32,7 @@ public class ColStatistics {
private double avgColLen;
private long numTrues;
private long numFalses;
+ private Range range;
public ColStatistics(String tabAlias, String colName, String colType) {
this.setTableAlias(tabAlias);
@@ -118,6 +119,17 @@ public class ColStatistics {
this.numFalses = numFalses;
}
+ public Range getRange() {
+ return range;
+ }
+
+ public void setRange(Number minVal, Number maxVal) {
+ this.range = new Range(minVal, maxVal);
+ }
+
+ public void setRange(Range r) {
+ this.range = r;
+ }
@Override
public String toString() {
@@ -150,7 +162,24 @@ public class ColStatistics {
clone.setNumNulls(numNulls);
clone.setNumTrues(numTrues);
clone.setNumFalses(numFalses);
+ if (range != null ) {
+ clone.setRange(range.clone());
+ }
return clone;
}
+ public static class Range {
+ public final Number minValue;
+ public final Number maxValue;
+ Range(Number minValue, Number maxValue) {
+ super();
+ this.minValue = minValue;
+ this.maxValue = maxValue;
+ }
+ @Override
+ public Range clone() {
+ return new Range(minValue, maxValue);
+ }
+ }
+
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java?rev=1622150&r1=1622149&r2=1622150&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java Tue Sep 2 23:23:22 2014
@@ -25,10 +25,12 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.common.StatsSetupConst;
+import org.apache.hadoop.hive.common.type.HiveDecimal;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.api.AggrStats;
import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData;
import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
+import org.apache.hadoop.hive.metastore.api.Decimal;
import org.apache.hadoop.hive.ql.exec.ColumnInfo;
import org.apache.hadoop.hive.ql.exec.RowSchema;
import org.apache.hadoop.hive.ql.exec.TableScanOperator;
@@ -76,6 +78,8 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableTimestampObjectInspector;
import org.apache.hadoop.io.BytesWritable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -404,18 +408,22 @@ public class StatsUtils {
cs.setCountDistint(csd.getLongStats().getNumDVs());
cs.setNumNulls(csd.getLongStats().getNumNulls());
cs.setAvgColLen(JavaDataModel.get().primitive1());
+ cs.setRange(csd.getLongStats().getLowValue(), csd.getLongStats().getHighValue());
} else if (colType.equalsIgnoreCase(serdeConstants.BIGINT_TYPE_NAME)) {
cs.setCountDistint(csd.getLongStats().getNumDVs());
cs.setNumNulls(csd.getLongStats().getNumNulls());
cs.setAvgColLen(JavaDataModel.get().primitive2());
+ cs.setRange(csd.getLongStats().getLowValue(), csd.getLongStats().getHighValue());
} else if (colType.equalsIgnoreCase(serdeConstants.FLOAT_TYPE_NAME)) {
cs.setCountDistint(csd.getDoubleStats().getNumDVs());
cs.setNumNulls(csd.getDoubleStats().getNumNulls());
cs.setAvgColLen(JavaDataModel.get().primitive1());
+ cs.setRange(csd.getDoubleStats().getLowValue(), csd.getDoubleStats().getHighValue());
} else if (colType.equalsIgnoreCase(serdeConstants.DOUBLE_TYPE_NAME)) {
cs.setCountDistint(csd.getDoubleStats().getNumDVs());
cs.setNumNulls(csd.getDoubleStats().getNumNulls());
cs.setAvgColLen(JavaDataModel.get().primitive2());
+ cs.setRange(csd.getDoubleStats().getLowValue(), csd.getDoubleStats().getHighValue());
} else if (colType.equalsIgnoreCase(serdeConstants.STRING_TYPE_NAME)
|| colType.startsWith(serdeConstants.CHAR_TYPE_NAME)
|| colType.startsWith(serdeConstants.VARCHAR_TYPE_NAME)) {
@@ -441,6 +449,13 @@ public class StatsUtils {
cs.setAvgColLen(JavaDataModel.get().lengthOfDecimal());
cs.setCountDistint(csd.getDecimalStats().getNumDVs());
cs.setNumNulls(csd.getDecimalStats().getNumNulls());
+ Decimal val = csd.getDecimalStats().getHighValue();
+ BigDecimal maxVal = HiveDecimal.
+ create(new BigInteger(val.getUnscaled()), val.getScale()).bigDecimalValue();
+ val = csd.getDecimalStats().getLowValue();
+ BigDecimal minVal = HiveDecimal.
+ create(new BigInteger(val.getUnscaled()), val.getScale()).bigDecimalValue();
+ cs.setRange(minVal, maxVal);
} else if (colType.equalsIgnoreCase(serdeConstants.DATE_TYPE_NAME)) {
cs.setAvgColLen(JavaDataModel.get().lengthOfDate());
} else {