statsData.getStringStats().setNumNulls(numNulls);
statsObj.setStatsData(statsData);
statsObjs.add(statsObj);
ColumnStatistics colStats = new ColumnStatistics();
colStats.setStatsDesc(statsDesc);
colStats.setStatsObj(statsObjs);
// write stats objs persistently
client.updateTableColumnStatistics(colStats);
// retrieve the stats obj that was just written
ColumnStatistics colStats2 = client.getTableColumnStatistics(dbName, tblName, colName[0]);
// compare stats obj to ensure what we get is what we wrote
assertNotNull(colStats2);
assertEquals(colStats2.getStatsDesc().getDbName(), dbName);
assertEquals(colStats2.getStatsDesc().getTableName(), tblName);
assertEquals(colStats2.getStatsObj().get(0).getColName(), colName[0]);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getDoubleStats().getLowValue(),
lowValue);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getDoubleStats().getHighValue(),
highValue);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getDoubleStats().getNumNulls(),
numNulls);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getDoubleStats().getNumDVs(),
numDVs);
assertEquals(colStats2.getStatsDesc().isIsTblLevel(), isTblLevel);
// test delete column stats; if no col name is passed all column stats associated with the
// table is deleted
boolean status = client.deleteTableColumnStatistics(dbName, tblName, null);
assertTrue(status);
// try to query stats for a column for which stats doesn't exist
try {
colStats2 = client.getTableColumnStatistics(dbName, tblName, colName[1]);
assertTrue(true);
} catch (NoSuchObjectException e) {
System.out.println("Statistics for column=" + colName[1] + " not found");
}
colStats.setStatsDesc(statsDesc);
colStats.setStatsObj(statsObjs);
// update table level column stats
client.updateTableColumnStatistics(colStats);
// query column stats for column whose stats were updated in the previous call
colStats2 = client.getTableColumnStatistics(dbName, tblName, colName[0]);
// partition level column statistics test
// create a table with multiple partitions
cleanUp(dbName, tblName, typeName);
List<List<String>> values = new ArrayList<List<String>>();
values.add(makeVals("2008-07-01 14:13:12", "14"));
values.add(makeVals("2008-07-01 14:13:12", "15"));
values.add(makeVals("2008-07-02 14:13:12", "15"));
values.add(makeVals("2008-07-03 14:13:12", "151"));
createMultiPartitionTableSchema(dbName, tblName, typeName, values);
List<String> partitions = client.listPartitionNames(dbName, tblName, (short)-1);
partName = partitions.get(0);
isTblLevel = false;
// create a new columnstatistics desc to represent partition level column stats
statsDesc = new ColumnStatisticsDesc();
statsDesc.setDbName(dbName);
statsDesc.setTableName(tblName);
statsDesc.setPartName(partName);
statsDesc.setIsTblLevel(isTblLevel);
colStats = new ColumnStatistics();
colStats.setStatsDesc(statsDesc);
colStats.setStatsObj(statsObjs);
client.updatePartitionColumnStatistics(colStats);
colStats2 = client.getPartitionColumnStatistics(dbName, tblName, partName, colName[1]);
// compare stats obj to ensure what we get is what we wrote
assertNotNull(colStats2);
assertEquals(colStats2.getStatsDesc().getDbName(), dbName);
assertEquals(colStats2.getStatsDesc().getTableName(), tblName);
assertEquals(colStats.getStatsDesc().getPartName(), partName);
assertEquals(colStats2.getStatsObj().get(0).getColName(), colName[1]);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getStringStats().getMaxColLen(),
maxColLen);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getStringStats().getAvgColLen(),
avgColLen);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getStringStats().getNumNulls(),
numNulls);
assertEquals(colStats2.getStatsObj().get(0).getStatsData().getStringStats().getNumDVs(),
numDVs);
assertEquals(colStats2.getStatsDesc().isIsTblLevel(), isTblLevel);
// test stats deletion at partition level
client.deletePartitionColumnStatistics(dbName, tblName, partName, colName[1]);
colStats2 = client.getPartitionColumnStatistics(dbName, tblName, partName, colName[0]);