in modules/core/src/main/java/org/apache/fluo/recipes/core/combine/CqOptimizer.java [31:70]
public static TableOptimizations getTableOptimizations(String cqId,
SimpleConfiguration appConfig) {
int numBuckets = CqConfigurator.getNumBucket(cqId, appConfig);
int bpt = CqConfigurator.getBucketsPerTablet(cqId, appConfig);
BytesBuilder rowBuilder = Bytes.builder();
rowBuilder.append(cqId);
List<Bytes> dataSplits = new ArrayList<>();
for (int i = bpt; i < numBuckets; i += bpt) {
String bucketId = CombineQueueImpl.genBucketId(i, numBuckets);
rowBuilder.setLength(cqId.length());
dataSplits.add(rowBuilder.append(":d:").append(bucketId).toBytes());
}
Collections.sort(dataSplits);
List<Bytes> updateSplits = new ArrayList<>();
for (int i = bpt; i < numBuckets; i += bpt) {
String bucketId = CombineQueueImpl.genBucketId(i, numBuckets);
rowBuilder.setLength(cqId.length());
updateSplits.add(rowBuilder.append(":u:").append(bucketId).toBytes());
}
Collections.sort(updateSplits);
Bytes dataRangeEnd = Bytes.of(cqId + CqConfigurator.DATA_RANGE_END);
Bytes updateRangeEnd = Bytes.of(cqId + CqConfigurator.UPDATE_RANGE_END);
List<Bytes> splits = new ArrayList<>();
splits.add(dataRangeEnd);
splits.add(updateRangeEnd);
splits.addAll(dataSplits);
splits.addAll(updateSplits);
TableOptimizations tableOptim = new TableOptimizations();
tableOptim.setSplits(splits);
tableOptim.setTabletGroupingRegex(Pattern.quote(cqId + ":") + "[du]:");
return tableOptim;
}