`Selected 13 parts by date, 13 parts by key, 26 marks by primary key .... `

This message is confusing for new users.

I suggest to replace it with

`Selected 13 parts by partition key, 13 parts by primary key, 26 marks by primary key...`
if (i == 0)
            {
                
                source->addTotalRowsApprox(total_rows);
            }
            res.emplace_back(std::move(source));
        }
        return Pipe::unitePipes(std::move(res));
    }
    else
    {
        
        Pipes res;
        for (const auto & part : parts)
        {
            auto source = std::make_shared<MergeTreeSelectProcessor>(
                data, metadata_snapshot, part.data_part, max_block_size, settings.preferred_block_size_bytes,
                settings.preferred_max_column_in_block_size_bytes, column_names, part.ranges, use_uncompressed_cache,
                query_info.prewhere_info, true, reader_settings, virt_columns, part.part_index_in_query);
            res.emplace_back(std::move(source));
        }
        auto pipe = Pipe::unitePipes(std::move(res));
        
        
        if (pipe.numOutputPorts() > 1)
            pipe.addTransform(std::make_shared<ConcatProcessor>(pipe.getHeader(), pipe.numOutputPorts()));
        return pipe;
    }
}
static ExpressionActionsPtr createProjection(const Pipe & pipe, const MergeTreeData & data)