You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/08/09 17:27:48 UTC
svn commit: r1616966 - in
/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore:
MetaStoreDirectSql.java StatObjectConverter.java
Author: hashutosh
Date: Sat Aug 9 15:27:48 2014
New Revision: 1616966
URL: http://svn.apache.org/r1616966
Log:
HIVE-7667 : handle cast for long in get_aggr_stats() api for metastore for mysql (Ashutosh Chauhan via Harish Butani)
Modified:
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java?rev=1616966&r1=1616965&r2=1616966&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java Sat Aug 9 15:27:48 2014
@@ -309,7 +309,7 @@ class MetaStoreDirectSql {
StringBuilder partSb = new StringBuilder(sbCapacity);
// Assume db and table names are the same for all partition, that's what we're selecting for.
for (Object partitionId : sqlResult) {
- partSb.append(extractSqlLong(partitionId)).append(",");
+ partSb.append(StatObjectConverter.extractSqlLong(partitionId)).append(",");
}
String partIds = trimCommaList(partSb);
timingTrace(doTrace, queryText, start, queryTime);
@@ -346,10 +346,10 @@ class MetaStoreDirectSql {
dbName = dbName.toLowerCase();
for (Object[] fields : sqlResult2) {
// Here comes the ugly part...
- long partitionId = extractSqlLong(fields[0]);
- Long sdId = extractSqlLong(fields[1]);
- Long colId = extractSqlLong(fields[2]);
- Long serdeId = extractSqlLong(fields[3]);
+ long partitionId = StatObjectConverter.extractSqlLong(fields[0]);
+ Long sdId = StatObjectConverter.extractSqlLong(fields[1]);
+ Long colId = StatObjectConverter.extractSqlLong(fields[2]);
+ Long serdeId = StatObjectConverter.extractSqlLong(fields[3]);
// A partition must have either everything set, or nothing set if it's a view.
if (sdId == null || colId == null || serdeId == null) {
if (isView == null) {
@@ -518,7 +518,7 @@ class MetaStoreDirectSql {
currentListId = null;
t.getSkewedInfo().addToSkewedColValues(new ArrayList<String>());
} else {
- long fieldsListId = extractSqlLong(fields[1]);
+ long fieldsListId = StatObjectConverter.extractSqlLong(fields[1]);
if (currentListId == null || fieldsListId != currentListId) {
currentList = new ArrayList<String>();
currentListId = fieldsListId;
@@ -560,7 +560,7 @@ class MetaStoreDirectSql {
currentList = new ArrayList<String>(); // left outer join produced a list with no values
currentListId = null;
} else {
- long fieldsListId = extractSqlLong(fields[1]);
+ long fieldsListId = StatObjectConverter.extractSqlLong(fields[1]);
if (currentListId == null || fieldsListId != currentListId) {
currentList = new ArrayList<String>();
currentListId = fieldsListId;
@@ -599,14 +599,6 @@ class MetaStoreDirectSql {
return orderedResult;
}
- private Long extractSqlLong(Object obj) throws MetaException {
- if (obj == null) return null;
- if (!(obj instanceof Number)) {
- throw new MetaException("Expected numeric type but got " + obj.getClass().getName());
- }
- return ((Number)obj).longValue();
- }
-
private void timingTrace(boolean doTrace, String queryText, long start, long queryTime) {
if (!doTrace) return;
LOG.debug("Direct SQL query in " + (queryTime - start) / 1000000.0 + "ms + " +
@@ -674,7 +666,7 @@ class MetaStoreDirectSql {
if (fields == null) {
fields = iter.next();
}
- long nestedId = extractSqlLong(fields[keyIndex]);
+ long nestedId = StatObjectConverter.extractSqlLong(fields[keyIndex]);
if (nestedId < id) throw new MetaException("Found entries for unknown ID " + nestedId);
if (nestedId > id) break; // fields belong to one of the next entries
func.apply(entry.getValue(), fields);
@@ -930,7 +922,7 @@ class MetaStoreDirectSql {
return colStats;
}
- private ColumnStatisticsObj prepareCSObj (Object[] row, int i) {
+ private ColumnStatisticsObj prepareCSObj (Object[] row, int i) throws MetaException {
ColumnStatisticsData data = new ColumnStatisticsData();
ColumnStatisticsObj cso = new ColumnStatisticsObj((String)row[i++], (String)row[i++], data);
Object llow = row[i++], lhigh = row[i++], dlow = row[i++], dhigh = row[i++],
@@ -1017,8 +1009,8 @@ class MetaStoreDirectSql {
// LastAnalyzed is stored per column but thrift has it per several;
// get the lowest for now as nobody actually uses this field.
Object laObj = row[offset + 14];
- if (laObj != null && (!csd.isSetLastAnalyzed() || csd.getLastAnalyzed() > extractSqlLong(laObj))) {
- csd.setLastAnalyzed(extractSqlLong(laObj));
+ if (laObj != null && (!csd.isSetLastAnalyzed() || csd.getLastAnalyzed() > StatObjectConverter.extractSqlLong(laObj))) {
+ csd.setLastAnalyzed(StatObjectConverter.extractSqlLong(laObj));
}
csos.add(prepareCSObj(row, offset));
}
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java?rev=1616966&r1=1616965&r2=1616966&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/StatObjectConverter.java Sat Aug 9 15:27:48 2014
@@ -352,61 +352,61 @@ public class StatObjectConverter {
// SQL
public static void fillColumnStatisticsData(String colType, ColumnStatisticsData data,
Object llow, Object lhigh, Object dlow, Object dhigh, Object declow, Object dechigh,
- Object nulls, Object dist, Object avglen, Object maxlen, Object trues, Object falses) {
+ Object nulls, Object dist, Object avglen, Object maxlen, Object trues, Object falses) throws MetaException {
if (colType.equals("boolean")) {
BooleanColumnStatsData boolStats = new BooleanColumnStatsData();
- boolStats.setNumFalses((Long)falses);
- boolStats.setNumTrues((Long)trues);
- boolStats.setNumNulls((Long)nulls);
+ boolStats.setNumFalses(extractSqlLong(falses));
+ boolStats.setNumTrues(extractSqlLong(trues));
+ boolStats.setNumNulls(extractSqlLong(nulls));
data.setBooleanStats(boolStats);
} else if (colType.equals("string") ||
colType.startsWith("varchar") || colType.startsWith("char")) {
StringColumnStatsData stringStats = new StringColumnStatsData();
- stringStats.setNumNulls((Long)nulls);
+ stringStats.setNumNulls(extractSqlLong(nulls));
stringStats.setAvgColLen((Double)avglen);
- stringStats.setMaxColLen((Long)maxlen);
- stringStats.setNumDVs((Long)dist);
+ stringStats.setMaxColLen(extractSqlLong(maxlen));
+ stringStats.setNumDVs(extractSqlLong(dist));
data.setStringStats(stringStats);
} else if (colType.equals("binary")) {
BinaryColumnStatsData binaryStats = new BinaryColumnStatsData();
- binaryStats.setNumNulls((Long)nulls);
+ binaryStats.setNumNulls(extractSqlLong(nulls));
binaryStats.setAvgColLen((Double)avglen);
- binaryStats.setMaxColLen((Long)maxlen);
+ binaryStats.setMaxColLen(extractSqlLong(maxlen));
data.setBinaryStats(binaryStats);
} else if (colType.equals("bigint") || colType.equals("int") ||
colType.equals("smallint") || colType.equals("tinyint") ||
colType.equals("timestamp")) {
LongColumnStatsData longStats = new LongColumnStatsData();
- longStats.setNumNulls((Long)nulls);
+ longStats.setNumNulls(extractSqlLong(nulls));
if (lhigh != null) {
- longStats.setHighValue((Long)lhigh);
+ longStats.setHighValue(extractSqlLong(lhigh));
}
if (llow != null) {
- longStats.setLowValue((Long)llow);
+ longStats.setLowValue(extractSqlLong(llow));
}
- longStats.setNumDVs((Long)dist);
+ longStats.setNumDVs(extractSqlLong(dist));
data.setLongStats(longStats);
} else if (colType.equals("double") || colType.equals("float")) {
DoubleColumnStatsData doubleStats = new DoubleColumnStatsData();
- doubleStats.setNumNulls((Long)nulls);
+ doubleStats.setNumNulls(extractSqlLong(nulls));
if (dhigh != null) {
doubleStats.setHighValue((Double)dhigh);
}
if (dlow != null) {
doubleStats.setLowValue((Double)dlow);
}
- doubleStats.setNumDVs((Long)dist);
+ doubleStats.setNumDVs(extractSqlLong(dist));
data.setDoubleStats(doubleStats);
} else if (colType.startsWith("decimal")) {
DecimalColumnStatsData decimalStats = new DecimalColumnStatsData();
- decimalStats.setNumNulls((Long)nulls);
+ decimalStats.setNumNulls(extractSqlLong(nulls));
if (dechigh != null) {
decimalStats.setHighValue(createThriftDecimal((String)dechigh));
}
if (declow != null) {
decimalStats.setLowValue(createThriftDecimal((String)declow));
}
- decimalStats.setNumDVs((Long)dist);
+ decimalStats.setNumDVs(extractSqlLong(dist));
data.setDecimalStats(decimalStats);
}
}
@@ -419,4 +419,12 @@ public class StatObjectConverter {
private static String createJdoDecimalString(Decimal d) {
return new BigDecimal(new BigInteger(d.getUnscaled()), d.getScale()).toString();
}
+
+ static Long extractSqlLong(Object obj) throws MetaException {
+ if (obj == null) return null;
+ if (!(obj instanceof Number)) {
+ throw new MetaException("Expected numeric type but got " + obj.getClass().getName());
+ }
+ return ((Number)obj).longValue();
+ }
}