Index: metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (revision 1156401) +++ metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (working copy) @@ -1980,7 +1980,7 @@ try { openTransaction(); LOG.debug("execute removeUnusedColumnDescriptor"); - List referencedSDs = listStorageDescriptorsWithCD(oldCD); + List referencedSDs = listStorageDescriptorsWithCD(oldCD, 1); //if no other SD references this CD, we can throw it out. if (referencedSDs != null && referencedSDs.isEmpty()) { pm.retrieve(oldCD); @@ -2017,9 +2017,11 @@ /** * Get a list of storage descriptors that reference a particular Column Descriptor * @param oldCD the column descriptor to get storage descriptors for + * @param maxSDs the maximum number of SDs to return * @return a list of storage descriptors */ - private List listStorageDescriptorsWithCD(MColumnDescriptor oldCD) { + private List listStorageDescriptorsWithCD(MColumnDescriptor oldCD, + long maxSDs) { boolean success = false; List sds = null; try { @@ -2028,6 +2030,10 @@ Query query = pm.newQuery(MStorageDescriptor.class, "this.cd == inCD"); query.declareParameters("MColumnDescriptor inCD"); + if(maxSDs >= 0) { + //User specified a row limit, set it on the Query + query.setRange(0, maxSDs); + } sds = (List) query.execute(oldCD); LOG.debug("Done executing query for listStorageDescriptorsWithCD"); pm.retrieveAll(sds);