And waits for them. That's pointless.
{
        return static_cast<Float64>(sum_index_columns) / sum_total;
    }
};
/** Progress callback.
  * What it should update:
  * - approximate progress
  * - amount of read rows
  * - various metrics
  * - time elapsed for current merge.
  */
struct MergeStageProgress
{
    explicit MergeStageProgress(Float64 weight_)
        : is_first(true) , weight(weight_)
    {
    }
    MergeStageProgress(Float64 initial_progress_, Float64 weight_)
        : initial_progress(initial_progress_), is_first(false), weight(weight_)
    {
    }
    Float64 initial_progress = 0.0;
    bool is_first;
    Float64 weight;
    UInt64 total_rows = 0;
    UInt64 rows_read = 0;
};
class MergeProgressCallback