public RollupTreeNode build()

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;
    }