Below test case worked before 21.4. It seems there's parsing issue with all Map columns using Integer as key.
```sql
set allow_experimental_map_type = 1;
CREATE TABLE IF NOT EXISTS test_maps(ma Map(Integer, Array(String)), mi Map(Integer, Integer), ms Map(String, String)) ENGINE = Memory;
-- Exception on client:
-- Code: 62. DB::Exception: Cannot parse expression of type Map(Int32,Array(String)) here: {1:['11','12'],2:['22','23']},{1:11,2:22},{'k1':'v1','k2':'v2'}): data for INSERT was parsed from query
insert into test_maps values ({1:['11','12'],2:['22','23']},{1:11,2:22},{'k1':'v1','k2':'v2'});
```

Just tried 21.6 and it's still the same:
```sql
:) create table if not exists test_map_with_int_key(m Map(UInt32, UInt32)) engine = Memory;
...
:) SELECT CAST(([1, 2], [11, 22]), 'Map(UInt32, UInt32)') AS m;

SELECT CAST(([1, 2], [11, 22]), 'Map(UInt32, UInt32)') AS m

Query id: dbe47185-bc24-488b-a85d-761616e3199d

┌─m───────────┐
│ {1:11,2:22} │
└─────────────┘
:) insert into test_map_with_int_key SELECT CAST(([1, 2], [11, 22]), 'Map(UInt32, UInt32)') as m

INSERT INTO test_map_with_int_key SELECT CAST(([1, 2], [11, 22]), 'Map(UInt32, UInt32)') AS m

Query id: 6877901f-1518-48f9-ba65-d54ed7326388

Ok.
:) insert into test_map_with_int_key values({1:11,2:22})

INSERT INTO test_map_with_in_key VALUES

Query id: 3f6cae42-064a-467f-baae-b7f323e910c0


0 rows in set. Elapsed: 0.004 sec.

Received exception from server (version 21.6.3):
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table default.test_map_with_in_key doesn't exist.
```

P.S. I'll submit PRs for integration test this week so that we can spot this kind of issue early.
{
    bool type_error = false;
    if (key_type->getTypeId() == TypeIndex::LowCardinality)
    {
        const auto & low_cardinality_data_type = assert_cast<const DataTypeLowCardinality &>(*key_type);
        if (!isStringOrFixedString(*(low_cardinality_data_type.getDictionaryType())))
            type_error = true;
    }
    else if (!key_type->isValueRepresentedByInteger()
        && !isStringOrFixedString(*key_type)
        && !WhichDataType(key_type).isNothing()
        && !WhichDataType(key_type).isUUID())
    {
        type_error = true;
    }
    if (type_error)
        throw Exception(ErrorCodes::BAD_ARGUMENTS,
            "Type of Map key must be a type, that can be represented by integer or String or FixedString (possibly LowCardinality) or UUID,"
            " but {} given", key_type->getName());
}
std::string DataTypeMap::doGetName() const
{
    WriteBufferFromOwnString s;
    s << "Map(" << key_type->getName() << "," << value_type->getName() << ")";
    return s.str();
}
static const IColumn & extractNestedColumn(const IColumn & column)