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). 
{
            ++column_position;
            size_t j = 0;
            {
                WriteBufferFromOwnString out;
                part->partition.serializeText(*info.data, out, format_settings);
                columns_[j++]->insert(out.str());
            }
            columns_[j++]->insert(part->name);
            columns_[j++]->insert(part->getTypeName());
            columns_[j++]->insert(part_state == State::Committed);
            columns_[j++]->insert(part->getMarksCount());
            columns_[j++]->insert(part->rows_count);
            columns_[j++]->insert(part->getBytesOnDisk());
            columns_[j++]->insert(columns_size.data_compressed);
            columns_[j++]->insert(columns_size.data_uncompressed);
            columns_[j++]->insert(columns_size.marks);
            columns_[j++]->insert(UInt64(part->modification_time));
            columns_[j++]->insert(UInt64(part->remove_time.load(std::memory_order_relaxed)));
            columns_[j++]->insert(UInt64(use_count));
            columns_[j++]->insert(min_date);
            columns_[j++]->insert(max_date);
            columns_[j++]->insert(part->info.partition_id);
            columns_[j++]->insert(part->info.min_block);
            columns_[j++]->insert(part->info.max_block);
            columns_[j++]->insert(part->info.level);
            columns_[j++]->insert(UInt64(part->info.getDataVersion()));
            columns_[j++]->insert(index_size_in_bytes);
            columns_[j++]->insert(index_size_in_allocated_bytes);
            columns_[j++]->insert(info.database);