Author: rhbutani
Date: Thu Dec 5 21:42:20 2013
New Revision: 1548312
URL: http://svn.apache.org/r1548312
Log:
HIVE-5899 NPE during explain extended with char/varchar columns (Jason Dere via
Harish Butani)
Modified:
hive/trunk/data/files/alltypes.txt
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/WriterImpl.java
hive/trunk/ql/src/test/queries/clientpositive/annotate_stats_select.q
hive/trunk/ql/src/test/results/clientpositive/annotate_stats_select.q.out
Modified: hive/trunk/data/files/alltypes.txt
URL:
http://svn.apache.org/viewvc/hive/trunk/data/files/alltypes.txt?rev=1548312&r1=1548311&r2=1548312&view=diff
==============================================================================
--- hive/trunk/data/files/alltypes.txt (original)
+++ hive/trunk/data/files/alltypes.txt Thu Dec 5 21:42:20 2013
@@ -1,2 +1,2 @@
-true|10|100|1000|10000|4.0|20.0|2.2222|1969-12-31 15:59:58.174|1970-01-01
00:00:00|hello|k1:v1,k2:v2|100,200|{10, "foo"}
-true|20|200|2000|20000|8.0|40.0|4.2222|1970-12-31 15:59:58.174|1971-01-01
00:00:00||k3:v3,k4:v4|200,300|{20, "bar"}
+true|10|100|1000|10000|4.0|20.0|2.2222|1969-12-31 15:59:58.174|1970-01-01
00:00:00|hello|hello|k1:v1,k2:v2|100,200|{10, "foo"}
+true|20|200|2000|20000|8.0|40.0|4.2222|1970-12-31 15:59:58.174|1971-01-01
00:00:00|||k3:v3,k4:v4|200,300|{20, "bar"}
Modified:
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL:
http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1548312&r1=1548311&r2=1548312&view=diff
==============================================================================
---
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
(original)
+++
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
Thu Dec 5 21:42:20 2013
@@ -4943,38 +4943,39 @@ public class ObjectStore implements RawS
ColumnStatisticsObj statsObj = new ColumnStatisticsObj();
statsObj.setColType(mStatsObj.getColType());
statsObj.setColName(mStatsObj.getColName());
- String colType = mStatsObj.getColType();
+ String colType = mStatsObj.getColType().toLowerCase();
ColumnStatisticsData colStatsData = new ColumnStatisticsData();
- if (colType.equalsIgnoreCase("boolean")) {
+ if (colType.equals("boolean")) {
BooleanColumnStatsData boolStats = new BooleanColumnStatsData();
boolStats.setNumFalses(mStatsObj.getNumFalses());
boolStats.setNumTrues(mStatsObj.getNumTrues());
boolStats.setNumNulls(mStatsObj.getNumNulls());
colStatsData.setBooleanStats(boolStats);
- } else if (colType.equalsIgnoreCase("string")) {
+ } else if (colType.equals("string") ||
+ colType.startsWith("varchar") || colType.startsWith("char")) {
StringColumnStatsData stringStats = new StringColumnStatsData();
stringStats.setNumNulls(mStatsObj.getNumNulls());
stringStats.setAvgColLen(mStatsObj.getAvgColLen());
stringStats.setMaxColLen(mStatsObj.getMaxColLen());
stringStats.setNumDVs(mStatsObj.getNumDVs());
colStatsData.setStringStats(stringStats);
- } else if (colType.equalsIgnoreCase("binary")) {
+ } else if (colType.equals("binary")) {
BinaryColumnStatsData binaryStats = new BinaryColumnStatsData();
binaryStats.setNumNulls(mStatsObj.getNumNulls());
binaryStats.setAvgColLen(mStatsObj.getAvgColLen());
binaryStats.setMaxColLen(mStatsObj.getMaxColLen());
colStatsData.setBinaryStats(binaryStats);
- } else if (colType.equalsIgnoreCase("bigint") ||
colType.equalsIgnoreCase("int") ||
- colType.equalsIgnoreCase("smallint") ||
colType.equalsIgnoreCase("tinyint") ||
- colType.equalsIgnoreCase("timestamp")) {
+ } else if (colType.equals("bigint") || colType.equals("int") ||
+ colType.equals("smallint") || colType.equals("tinyint") ||
+ colType.equals("timestamp")) {
LongColumnStatsData longStats = new LongColumnStatsData();
longStats.setNumNulls(mStatsObj.getNumNulls());
longStats.setHighValue(mStatsObj.getLongHighValue());
longStats.setLowValue(mStatsObj.getLongLowValue());
longStats.setNumDVs(mStatsObj.getNumDVs());
colStatsData.setLongStats(longStats);
- } else if (colType.equalsIgnoreCase("double") ||
colType.equalsIgnoreCase("float")) {
+ } else if (colType.equals("double") || colType.equals("float")) {
DoubleColumnStatsData doubleStats = new DoubleColumnStatsData();
doubleStats.setNumNulls(mStatsObj.getNumNulls());
doubleStats.setHighValue(mStatsObj.getDoubleHighValue());
@@ -5119,38 +5120,39 @@ public class ObjectStore implements RawS
ColumnStatisticsObj statsObj = new ColumnStatisticsObj();
statsObj.setColType(mStatsObj.getColType());
statsObj.setColName(mStatsObj.getColName());
- String colType = mStatsObj.getColType();
+ String colType = mStatsObj.getColType().toLowerCase();
ColumnStatisticsData colStatsData = new ColumnStatisticsData();
- if (colType.equalsIgnoreCase("boolean")) {
+ if (colType.equals("boolean")) {
BooleanColumnStatsData boolStats = new BooleanColumnStatsData();
boolStats.setNumFalses(mStatsObj.getNumFalses());
boolStats.setNumTrues(mStatsObj.getNumTrues());
boolStats.setNumNulls(mStatsObj.getNumNulls());
colStatsData.setBooleanStats(boolStats);
- } else if (colType.equalsIgnoreCase("string")) {
+ } else if (colType.equals("string") ||
+ colType.startsWith("varchar") || colType.startsWith("char")) {
StringColumnStatsData stringStats = new StringColumnStatsData();
stringStats.setNumNulls(mStatsObj.getNumNulls());
stringStats.setAvgColLen(mStatsObj.getAvgColLen());
stringStats.setMaxColLen(mStatsObj.getMaxColLen());
stringStats.setNumDVs(mStatsObj.getNumDVs());
colStatsData.setStringStats(stringStats);
- } else if (colType.equalsIgnoreCase("binary")) {
+ } else if (colType.equals("binary")) {
BinaryColumnStatsData binaryStats = new BinaryColumnStatsData();
binaryStats.setNumNulls(mStatsObj.getNumNulls());
binaryStats.setAvgColLen(mStatsObj.getAvgColLen());
binaryStats.setMaxColLen(mStatsObj.getMaxColLen());
colStatsData.setBinaryStats(binaryStats);
- } else if (colType.equalsIgnoreCase("tinyint") ||
colType.equalsIgnoreCase("smallint") ||
- colType.equalsIgnoreCase("int") || colType.equalsIgnoreCase("bigint")
||
- colType.equalsIgnoreCase("timestamp")) {
+ } else if (colType.equals("tinyint") || colType.equals("smallint") ||
+ colType.equals("int") || colType.equals("bigint") ||
+ colType.equals("timestamp")) {
LongColumnStatsData longStats = new LongColumnStatsData();
longStats.setNumNulls(mStatsObj.getNumNulls());
longStats.setHighValue(mStatsObj.getLongHighValue());
longStats.setLowValue(mStatsObj.getLongLowValue());
longStats.setNumDVs(mStatsObj.getNumDVs());
colStatsData.setLongStats(longStats);
- } else if (colType.equalsIgnoreCase("double") ||
colType.equalsIgnoreCase("float")) {
+ } else if (colType.equals("double") || colType.equals("float")) {
DoubleColumnStatsData doubleStats = new DoubleColumnStatsData();
doubleStats.setNumNulls(mStatsObj.getNumNulls());
doubleStats.setHighValue(mStatsObj.getDoubleHighValue());
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/WriterImpl.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/WriterImpl.java?rev=1548312&r1=1548311&r2=1548312&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/WriterImpl.java
(original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/WriterImpl.java Thu
Dec 5 21:42:20 2013
@@ -1864,6 +1864,8 @@ class WriterImpl implements Writer, Memo
case DOUBLE:
return numVals * JavaDataModel.get().primitive2();
case STRING:
+ case VARCHAR:
+ case CHAR:
// ORC strings are converted to java Strings. so use JavaDataModel to
// compute the overall size of strings
child = (StringTreeWriter) child;
Modified: hive/trunk/ql/src/test/queries/clientpositive/annotate_stats_select.q
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/annotate_stats_select.q?rev=1548312&r1=1548311&r2=1548312&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/annotate_stats_select.q
(original)
+++ hive/trunk/ql/src/test/queries/clientpositive/annotate_stats_select.q Thu
Dec 5 21:42:20 2013
@@ -12,6 +12,7 @@ create table if not exists alltypes (
ts1 timestamp,
da1 timestamp,
s1 string,
+ vc1 varchar(5),
m1 map<string, string>,
l1 array<int>,
st1 struct<c1:int, c2:string>
@@ -30,7 +31,7 @@ insert overwrite table alltypes_orc sele
explain extended select * from alltypes_orc;
-- statistics for complex types are not supported yet
-analyze table alltypes_orc compute statistics for columns bo1, ti1, si1, i1,
bi1, f1, d1,s1;
+analyze table alltypes_orc compute statistics for columns bo1, ti1, si1, i1,
bi1, f1, d1, s1, vc1;
-- numRows: 2 rawDataSize: 1514
explain extended select * from alltypes_orc;