in src/main/java/com/amazonaws/gdcreplication/util/GlueUtil.java [489:543]
public boolean deletePartitions(AWSGlue glue, String catalogId, String databaseName, String tableName,
List<Partition> partitionsToDelete) {
boolean partitionsDeleted = false;
BatchDeletePartitionRequest batchDeletePartitionRequest = new BatchDeletePartitionRequest();
batchDeletePartitionRequest.setCatalogId(catalogId);
batchDeletePartitionRequest.setDatabaseName(databaseName);
batchDeletePartitionRequest.setTableName(tableName);
// Prepare a List of PartitionValueList
List<PartitionValueList> listOfPartitionValueList = new ArrayList<PartitionValueList>();
// For each Partition, get its values, add create a PartitionValueList, and add
// them to List of PartitionValueList
for (Partition p : partitionsToDelete) {
PartitionValueList pvList = new PartitionValueList();
pvList.setValues(p.getValues());
listOfPartitionValueList.add(pvList);
}
System.out.println("Size of List of PartitionValueList: " + listOfPartitionValueList.size());
List<List<PartitionValueList>> listofSmallerLists = Lists.partition(listOfPartitionValueList, 25);
for (List<PartitionValueList> smallerList : listofSmallerLists) {
// Add List of PartitionValueList to BatchDeletePartitionRequest
batchDeletePartitionRequest.setPartitionsToDelete(smallerList);
try {
BatchDeletePartitionResult batchDeletePartitionResult = glue
.batchDeletePartition(batchDeletePartitionRequest);
int statusCode = batchDeletePartitionResult.getSdkHttpMetadata().getHttpStatusCode();
List<PartitionError> partErrors = batchDeletePartitionResult.getErrors();
if (statusCode == 200 && partErrors.size() == 0) {
System.out.printf("%d partitions from table '%s' of database '%s' were deleted. \n",
smallerList.size(), tableName, databaseName);
partitionsDeleted = true;
} else {
System.out.printf(
"Not all partitions were deleted. Status Code: %d, Number of partition errors: %d \n",
statusCode, partErrors.size());
for (PartitionError pe : partErrors) {
System.out.println("Partition Error Message: " + pe.getErrorDetail().getErrorMessage());
List<String> pv = pe.getPartitionValues();
for (String v : pv) {
System.out.println("Partition value: " + v);
}
}
}
} catch (Exception e) {
System.out.println("Exception in deleting partitions.");
e.printStackTrace();
}
}
return partitionsDeleted;
}