Vertical merges of wide parts fail if there is an array in the table and not all columns are present in parts.
```sql
CREATE TABLE aaa 
(
  a   Array(Int16),
  b   Int8
)
ENGINE = MergeTree
ORDER BY tuple() 
settings
    vertical_merge_algorithm_min_columns_to_activate=1,
    vertical_merge_algorithm_min_rows_to_activate=1,
    min_bytes_for_wide_part=0;

insert into aaa select [], 0;
alter table aaa clear column b;

optimize table aaa final;

Received exception from server (version 22.4.2):
Code: 16. DB::Exception: Received from localhost:9000. 
DB::Exception: There is no column a.size0 in table. (NO_SUCH_COLUMN_IN_TABLE)
```
try
{
    const auto & header = getPort().getHeader();
    if (!isCancelled() && current_row < data_part->rows_count)
    {
        size_t rows_to_read = data_part->index_granularity.getMarkRows(current_mark);
        bool continue_reading = (current_mark != 0);
        const auto & sample = reader->getColumns();
        Columns columns(sample.size());
        size_t rows_read = reader->readRows(current_mark, data_part->getMarksCount(), continue_reading, rows_to_read, columns);
        if (rows_read)
        {
            current_row += rows_read;
            current_mark += (rows_to_read == rows_read);
            bool should_evaluate_missing_defaults = false;
            reader->fillMissingColumns(columns, should_evaluate_missing_defaults, rows_read);
            if (should_evaluate_missing_defaults)
            {
                reader->evaluateMissingDefaults({}, columns);
            }
            reader->performRequiredConversions(columns);
            
            size_t num_columns = sample.size();
            Columns res_columns;
            res_columns.reserve(num_columns);
            auto it = sample.begin();
            for (size_t i = 0; i < num_columns; ++i)
            {
                if (header.has(it->name))
                    res_columns.emplace_back(std::move(columns[i]));