in spark-load/spark-load-dpp/src/main/java/org/apache/doris/load/loadv2/dpp/MinimumCoverageRollupTreeBuilder.java [47:93]
public RollupTreeNode build(EtlJobConfig.EtlTable tableMeta) {
List<EtlJobConfig.EtlIndex> indexes = tableMeta.indexes;
List<EtlJobConfig.EtlIndex> indexMetas = new ArrayList<>();
EtlJobConfig.EtlIndex baseIndex = null;
for (EtlJobConfig.EtlIndex indexMeta : indexes) {
if (indexMeta.isBaseIndex) {
baseIndex = indexMeta;
continue;
}
indexMetas.add(indexMeta);
}
List<EtlJobConfig.EtlColumn> baseIndexColumns = baseIndex.columns;
List<String> baseKeyColumns = new ArrayList<>();
List<String> baseValueColumns = new ArrayList<>();
for (EtlJobConfig.EtlColumn columnMeta : baseIndexColumns) {
if (columnMeta.isKey) {
baseKeyColumns.add(columnMeta.columnName);
} else {
baseValueColumns.add(columnMeta.columnName);
}
}
RollupTreeNode root = new RollupTreeNode();
root.parent = null;
root.keyColumnNames = baseKeyColumns;
root.valueColumnNames = baseValueColumns;
root.indexId = baseIndex.indexId;
root.indexMeta = baseIndex;
// sort the index metas to make sure the column number decrease
Collections.sort(indexMetas, new EtlJobConfig.EtlIndexComparator().reversed());
for (int i = 0; i < indexMetas.size(); ++i) {
List<String> keyColumns = new ArrayList<>();
List<String> valueColumns = new ArrayList<>();
for (EtlJobConfig.EtlColumn column : indexMetas.get(i).columns) {
if (column.isKey) {
keyColumns.add(column.columnName);
} else {
valueColumns.add(column.columnName);
}
}
if (!insertIndex(root, indexMetas.get(i), keyColumns, valueColumns)) {
throw new RuntimeException(String.format("can't find a parent rollup for rollup %s,"
+ " rollup tree is %s", indexMetas.get(i).toString(), root));
}
}
return root;
}