When user requested single column from the table we still calculating all of them. Calculation of some columns is quite expensive (need to do stat calls / read files etc). 
size_t i = 0;
        {
            WriteBufferFromOwnString out;
            part->partition.serializeText(*info.data, out, format_settings);
            columns_[i++]->insert(out.str());
        }
        columns_[i++]->insert(part->name);
        columns_[i++]->insert(part->uuid);
        columns_[i++]->insert(part->getTypeName());
        columns_[i++]->insert(part_state == State::Committed);
        columns_[i++]->insert(part->getMarksCount());
        columns_[i++]->insert(part->rows_count);
        columns_[i++]->insert(part->getBytesOnDisk());
        columns_[i++]->insert(columns_size.data_compressed);
        columns_[i++]->insert(columns_size.data_uncompressed);
        columns_[i++]->insert(columns_size.marks);
        columns_[i++]->insert(static_cast<UInt64>(part->modification_time));
        time_t remove_time = part->remove_time.load(std::memory_order_relaxed);
        columns_[i++]->insert(static_cast<UInt64>(remove_time == std::numeric_limits<time_t>::max() ? 0 : remove_time));
        
        columns_[i++]->insert(static_cast<UInt64>(part.use_count() - 1));
        columns_[i++]->insert(part->getMinDate());
        columns_[i++]->insert(part->getMaxDate());
        columns_[i++]->insert(static_cast<UInt32>(part->getMinTime()));
        columns_[i++]->insert(static_cast<UInt32>(part->getMaxTime()));
        columns_[i++]->insert(part->info.partition_id);
        columns_[i++]->insert(part->info.min_block);
        columns_[i++]->insert(part->info.max_block);
        columns_[i++]->insert(part->info.level);
        columns_[i++]->insert(static_cast<UInt64>(part->info.getDataVersion()));