Listing all parts in log have no sense. 
Should be either silenced, either combined into a single line.
: data(data_), log(&Poco::Logger::get(data.getLogName() + " (SelectExecutor)"))
{
}
static Block getBlockWithVirtualPartColumns(const MergeTreeData::DataPartsVector & parts, bool with_uuid)
{
    auto part_column = ColumnString::create();
    auto part_uuid_column = ColumnUUID::create();
    for (const auto & part : parts)
    {
        part_column->insert(part->name);
        if (with_uuid)
            part_uuid_column->insert(part->uuid);
    }
    if (with_uuid)
    {
        return Block(std::initializer_list<ColumnWithTypeAndName>{
            ColumnWithTypeAndName(std::move(part_column), std::make_shared<DataTypeString>(), "_part"),
            ColumnWithTypeAndName(std::move(part_uuid_column), std::make_shared<DataTypeUUID>(), "_part_uuid"),
        });
    }
    return Block{ColumnWithTypeAndName(std::move(part_column), std::make_shared<DataTypeString>(), "_part")};
}
size_t MergeTreeDataSelectExecutor::getApproximateTotalRowsToRead(