in spanner-data-validator-java/src/main/java/com/google/migration/partitioning/LongPartitionRangeListFetcher.java [114:152]
public List<PartitionRange> getPartitionRangesWithPartitionFilter(String startStr,
String endStr,
Integer partitionCount,
Integer partitionFilterRatio) {
Long start = Long.parseLong(startStr);
Long end = Long.parseLong(endStr);
Long fullRange = end - start;
Long stepSize = fullRange/partitionCount;
if(partitionFilterRatio > 0) {
if(partitionFilterRatio > partitionCount) {
throw new RuntimeException("PartitionFilterRatio < PartitionCount!");
}
}
ArrayList<PartitionRange> bRanges = new ArrayList<>();
// Account for first item
bRanges.add(new PartitionRange(start.toString(), start.toString()));
Long maxRange = start + 1;
for(Integer i = 0; i < partitionCount - 1; i++) {
Long minRange = maxRange;
maxRange = minRange + stepSize;
if(partitionFilterRatio > 0 && i % partitionFilterRatio != 0) continue;
PartitionRange range = new PartitionRange(minRange.toString(), maxRange.toString());
bRanges.add(range);
}
PartitionRange range = new PartitionRange(maxRange.toString(), end.toString());
bRanges.add(range);
return bRanges;
}