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). 
#pragma once
#include <ext/shared_ptr_helper.h>
#include <Storages/System/StorageSystemPartsBase.h>
namespace DB
{
class Context;
/** Implements system table 'parts_columns' which allows to get information about
 * columns in data parts for tables of MergeTree family.
 */
class StorageSystemPartsColumns final
        : public ext::shared_ptr_helper<StorageSystemPartsColumns>, public StorageSystemPartsBase
{
    friend struct ext::shared_ptr_helper<StorageSystemPartsColumns>;
public:
    std::string getName() const override { return "SystemPartsColumns"; }
protected:
    StorageSystemPartsColumns(const StorageID & table_id_);
    void processNextStorage(MutableColumns & columns, const StoragesInfo & info, bool has_state_column) override;
};
}