Clickhouse version 21.10.6.2,21.10.5.3 and lower:
```
CREATE TABLE repro (
`id` UInt64,
`version` UInt16,
`conversations.id` Array(UInt64),
`conversations.routings.id` Array(Array(UInt64))
)
ENGINE = ReplacingMergeTree(version)
ORDER BY (id)
SETTINGS min_bytes_for_wide_part = 0, min_rows_for_wide_part = 0;

INSERT INTO repro (`id`, `version`, `conversations.id`, `conversations.routings.id`)
VALUES (1, 1, [1], [[1]]);

select * from repro;

┌─id─┬─version─┬─conversations.id─┬─conversations.routings.id─┐
│  1 │       1 │ [1]              │ [[1]]                     │
└────┴─────────┴──────────────────┴───────────────────────────┘

```
CH version: 21.11.2.2 and upper:

```
CREATE TABLE repro (
`id` UInt64,
`version` UInt16,
`conversations.id` Array(UInt64),
`conversations.routings.id` Array(Array(UInt64))
)
ENGINE = ReplacingMergeTree(version)
ORDER BY (id)
SETTINGS min_bytes_for_wide_part = 0, min_rows_for_wide_part = 0;

INSERT INTO repro (`id`, `version`, `conversations.id`, `conversations.routings.id`)
VALUES (1, 1, [1], [[1]]);

select * from repro;

Received exception from server (version 21.11.2):                        <------------- unexpected, it should have results.
Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: There is no subcolumn routings.id in type Nested(id UInt64, `routings.id` Array(UInt64)): While executing MergeTreeInOrder. (ILLEGAL_COLUMN)

```

**Unexpected Behaviour:**
It should not have an exception in the select query.



{
    if (path.empty())
        return false;
    for (const auto & elem : path)
        if (elem.type == ISerialization::Substream::ArrayElements)
            return false;
    return path.back().type == ISerialization::Substream::ArraySizes;
}
String ISerialization::getFileNameForStream(const String & name_in_storage, const SubstreamPath & path)
{
    String stream_name;
    auto nested_storage_name = Nested::extractTableName(name_in_storage);
    if (name_in_storage != nested_storage_name && isOffsetsOfNested(path))
        stream_name = escapeForFileName(nested_storage_name);
    else
        stream_name = escapeForFileName(name_in_storage);
    return getNameForSubstreamPath(std::move(stream_name), path.begin(), path.end(), true);
}
String ISerialization::getSubcolumnNameForStream(const SubstreamPath & path)
{
    return getSubcolumnNameForStream(path, path.size());
}
String ISerialization::getSubcolumnNameForStream(const SubstreamPath & path, size_t prefix_len)
{
    auto subcolumn_name = getNameForSubstreamPath("", path.begin(), path.begin() + prefix_len, false);
    if (!subcolumn_name.empty())
        subcolumn_name = subcolumn_name.substr(1); 
    return subcolumn_name;
}
void ISerialization::addToSubstreamsCache(SubstreamsCache * cache, const SubstreamPath & path, ColumnPtr column)