diff --git metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java index c6b3789..4f6718d 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java @@ -303,27 +303,39 @@ public static ColumnStatisticsObj getPartitionColumnStatisticsObj( colType.equals("timestamp")) { LongColumnStatsData longStats = new LongColumnStatsData(); longStats.setNumNulls(mStatsObj.getNumNulls()); - longStats.setHighValue(mStatsObj.getLongHighValue()); - longStats.setLowValue(mStatsObj.getLongLowValue()); + if (mStatsObj.getLongHighValue() != null) { + longStats.setHighValue(mStatsObj.getLongHighValue()); + } + if (mStatsObj.getLongLowValue() != null) { + longStats.setLowValue(mStatsObj.getLongLowValue()); + } longStats.setNumDVs(mStatsObj.getNumDVs()); colStatsData.setLongStats(longStats); - } else if (colType.equals("double") || colType.equals("float")) { - DoubleColumnStatsData doubleStats = new DoubleColumnStatsData(); - doubleStats.setNumNulls(mStatsObj.getNumNulls()); - doubleStats.setHighValue(mStatsObj.getDoubleHighValue()); - doubleStats.setLowValue(mStatsObj.getDoubleLowValue()); - doubleStats.setNumDVs(mStatsObj.getNumDVs()); - colStatsData.setDoubleStats(doubleStats); - } else if (colType.equals("decimal")) { - DecimalColumnStatsData decimalStats = new DecimalColumnStatsData(); - decimalStats.setNumNulls(mStatsObj.getNumNulls()); - decimalStats.setHighValue(createThriftDecimal(mStatsObj.getDecimalHighValue())); - decimalStats.setLowValue(createThriftDecimal(mStatsObj.getDecimalLowValue())); - decimalStats.setNumDVs(mStatsObj.getNumDVs()); - colStatsData.setDecimalStats(decimalStats); - } - statsObj.setStatsData(colStatsData); - return statsObj; + } else if (colType.equals("double") || colType.equals("float")) { + DoubleColumnStatsData doubleStats = new DoubleColumnStatsData(); + doubleStats.setNumNulls(mStatsObj.getNumNulls()); + if (mStatsObj.getDoubleHighValue() != null) { + doubleStats.setHighValue(mStatsObj.getDoubleHighValue()); + } + if (mStatsObj.getDoubleLowValue() != null) { + doubleStats.setLowValue(mStatsObj.getDoubleLowValue()); + } + doubleStats.setNumDVs(mStatsObj.getNumDVs()); + colStatsData.setDoubleStats(doubleStats); + } else if (colType.equals("decimal")) { + DecimalColumnStatsData decimalStats = new DecimalColumnStatsData(); + decimalStats.setNumNulls(mStatsObj.getNumNulls()); + if (mStatsObj.getDecimalHighValue() != null) { + decimalStats.setHighValue(createThriftDecimal(mStatsObj.getDecimalHighValue())); + } + if (mStatsObj.getDecimalLowValue() != null) { + decimalStats.setLowValue(createThriftDecimal(mStatsObj.getDecimalLowValue())); + } + decimalStats.setNumDVs(mStatsObj.getNumDVs()); + colStatsData.setDecimalStats(decimalStats); + } + statsObj.setStatsData(colStatsData); + return statsObj; } public static ColumnStatisticsDesc getPartitionColumnStatisticsDesc( @@ -366,22 +378,34 @@ public static void fillColumnStatisticsData(String colType, ColumnStatisticsData colType.equals("timestamp")) { LongColumnStatsData longStats = new LongColumnStatsData(); longStats.setNumNulls((Long)nulls); - longStats.setHighValue((Long)lhigh); - longStats.setLowValue((Long)llow); + if (lhigh != null) { + longStats.setHighValue((Long)lhigh); + } + if (llow != null) { + longStats.setLowValue((Long)llow); + } longStats.setNumDVs((Long)dist); data.setLongStats(longStats); } else if (colType.equals("double") || colType.equals("float")) { DoubleColumnStatsData doubleStats = new DoubleColumnStatsData(); doubleStats.setNumNulls((Long)nulls); - doubleStats.setHighValue((Double)dhigh); - doubleStats.setLowValue((Double)dlow); + if (dhigh != null) { + doubleStats.setHighValue((Double)dhigh); + } + if (dlow != null) { + doubleStats.setLowValue((Double)dlow); + } doubleStats.setNumDVs((Long)dist); data.setDoubleStats(doubleStats); } else if (colType.equals("decimal")) { DecimalColumnStatsData decimalStats = new DecimalColumnStatsData(); decimalStats.setNumNulls((Long)nulls); - decimalStats.setHighValue(createThriftDecimal((String)dechigh)); - decimalStats.setLowValue(createThriftDecimal((String)declow)); + if (dechigh != null) { + decimalStats.setHighValue(createThriftDecimal((String)dechigh)); + } + if (declow != null) { + decimalStats.setLowValue(createThriftDecimal((String)declow)); + } decimalStats.setNumDVs((Long)dist); data.setDecimalStats(decimalStats); } diff --git ql/src/test/results/clientpositive/display_colstats_tbllvl.q.out ql/src/test/results/clientpositive/display_colstats_tbllvl.q.out index a325994..03b536f 100644 --- ql/src/test/results/clientpositive/display_colstats_tbllvl.q.out +++ ql/src/test/results/clientpositive/display_colstats_tbllvl.q.out @@ -255,7 +255,7 @@ POSTHOOK: type: DESCTABLE POSTHOOK: Input: default@uservisits_web_text_none # col_name data_type min max num_nulls distinct_count avg_col_len max_col_len num_trues num_falses comment -avgTimeOnSite int 0 9 0 11 from deserializer +avgTimeOnSite int 1 9 0 11 from deserializer PREHOOK: query: desc formatted UserVisits_web_text_none adRevenue PREHOOK: type: DESCTABLE PREHOOK: Input: default@uservisits_web_text_none @@ -264,7 +264,7 @@ POSTHOOK: type: DESCTABLE POSTHOOK: Input: default@uservisits_web_text_none # col_name data_type min max num_nulls distinct_count avg_col_len max_col_len num_trues num_falses comment -adRevenue float 0.0 492.98870849609375 0 58 from deserializer +adRevenue float 13.099044799804688 492.98870849609375 0 58 from deserializer PREHOOK: query: CREATE TABLE empty_tab( a int, b double,