**Describe the issue**

Improve feedback when trying to replace a partition with a different index

**Which ClickHouse server version to use**

21.9.5


**How to reproduce**

```
DROP DATABASE IF EXISTS test;

CREATE DATABASE test;

CREATE TABLE test.A (id UInt32, company UInt32, total UInt64) ENGINE=SummingMergeTree() PARTITION BY company PRIMARY KEY (id) ORDER BY (id, company);

INSERT INTO test.A SELECT number%10 as id, number%2 as company, count() as total FROM numbers(100) GROUP BY id,company;

CREATE TABLE test.B (id UInt32, company UInt32, total UInt64) ENGINE=SummingMergeTree() PARTITION BY company ORDER BY (id, company);

ALTER TABLE test.B REPLACE PARTITION '0' FROM test.A;

```

**Error message and/or stacktrace**

```
Received exception from server (version 21.9.5):
Code: 33. DB::Exception: Received from localhost:9000. DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 4.. (CANNOT_READ_ALL_DATA)
(query: ALTER TABLE test.B REPLACE PARTITION '0' FROM test.A;)
````

**Expected behavior**

```
Code: 33. DB::Exception: Received from localhost:9000. DB::Exception: Cannot replace partition different index (CANNOT_REPLACE_PARTITION)
(query: ALTER TABLE test.B REPLACE PARTITION '0' FROM test.A;)
```

{
    total_active_size_bytes.fetch_add(bytes, std::memory_order_acq_rel);
    total_active_size_rows.fetch_add(rows, std::memory_order_acq_rel);
    total_active_size_parts.fetch_add(parts, std::memory_order_acq_rel);
}
void MergeTreeData::setDataVolume(size_t bytes, size_t rows, size_t parts)
{
    total_active_size_bytes.store(bytes, std::memory_order_release);
    total_active_size_rows.store(rows, std::memory_order_release);
    total_active_size_parts.store(parts, std::memory_order_release);
}
bool MergeTreeData::insertQueryIdOrThrow(const String & query_id, size_t max_queries) const
{
    std::lock_guard lock(query_id_set_mutex);
    return insertQueryIdOrThrowNoLock(query_id, max_queries);
}
bool MergeTreeData::insertQueryIdOrThrowNoLock(const String & query_id, size_t max_queries) const
{
    if (query_id_set.find(query_id) != query_id_set.end())
        return false;
    if (query_id_set.size() >= max_queries)
        throw Exception(
            ErrorCodes::TOO_MANY_SIMULTANEOUS_QUERIES,
            "Too many simultaneous queries for table {}. Maximum is: {}",
            *std::atomic_load(&log_name),
            max_queries);
    query_id_set.insert(query_id);
    return true;
}
void MergeTreeData::removeQueryId(const String & query_id) const