Hello,

after updating clickhouse from 21.2.3.15-2 to 21.3.2.5-2 I see those warnings :

 `<Warning> default.osb4_reverse.DirectoryMonitor: Structure does not match (remote: Path LowCardinality(String) ColumnLowCardinality(size = 0, UInt8(size = 0), ColumnUnique(size = 1, String(size = 1))), Value Float64 Float64(size = 0), Time UInt32 UInt32(size = 0), Date Date UInt16(size = 0), Timestamp UInt32 UInt32(size = 0), local: Path LowCardinality(String) ColumnLowCardinality(size = 0, UInt16(size = 0), ColumnUnique(size = 1, String(size = 1))), Value Float64 Float64(size = 0), Time UInt32 UInt32(size = 0), Date Date UInt16(size = 0), Timestamp UInt32 UInt32(size = 0)), implicit conversion will be done`

I think this is related to https://github.com/ClickHouse/ClickHouse/pull/19947

The only difference between remote and local I found inside this log is :

ColumnLowCardinality(size = 0, UInt8(size = 0) to
ColumnLowCardinality(size = 0, UInt16(size = 0)

But I don't see the difference between the tables.

```
SHOW CREATE TABLE default.osb4_reverse

CREATE TABLE default.osb4_reverse
(
    `Path` LowCardinality(String) CODEC(ZSTD(15)),
    `Value` Float64 CODEC(Gorilla, ZSTD(22)),
    `Time` UInt32 CODEC(DoubleDelta, ZSTD(15)),
    `Date` Date CODEC(Delta(2), ZSTD(22)),
    `Timestamp` UInt32 CODEC(ZSTD(15))
)
ENGINE = Distributed('osb4_hpc_metrics', '', 'osb4_reverse', rand())


CREATE TABLE osb4_metrics_r0.osb4_reverse
(
    `Path` LowCardinality(String) CODEC(ZSTD(15)),
    `Value` Float64 CODEC(Gorilla, ZSTD(22)),
    `Time` UInt32 CODEC(DoubleDelta, ZSTD(15)),
    `Date` Date CODEC(Delta(2), ZSTD(22)),
    `Timestamp` UInt32 CODEC(ZSTD(15))
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/clusters/osb4_hpc_metrics/tables/{table4}/data', '{host2}')
PARTITION BY toYYYYMM(Date)
ORDER BY (Path, Time)
TTL Date + toIntervalMonth(6)
SETTINGS index_granularity = 8192
```

Any hints ?

Ralph
{
    Block current_block_with_sharding_key_expr = source_block;
    storage.getShardingKeyExpr()->execute(current_block_with_sharding_key_expr);
    const auto & key_column = current_block_with_sharding_key_expr.getByName(storage.getShardingKeyColumnName());
    return storage.createSelector(cluster, key_column);
}
Blocks DistributedBlockOutputStream::splitBlock(const Block & block)
{
    auto selector = createSelector(block);
    
    const size_t num_shards = cluster->getShardsInfo().size();
    Blocks splitted_blocks(num_shards);
    for (size_t shard_idx = 0; shard_idx < num_shards; ++shard_idx)
        splitted_blocks[shard_idx] = block.cloneEmpty();
    size_t columns_in_block = block.columns();
    for (size_t col_idx_in_block = 0; col_idx_in_block < columns_in_block; ++col_idx_in_block)
    {
        MutableColumns splitted_columns = block.getByPosition(col_idx_in_block).column->scatter(num_shards, selector);
        for (size_t shard_idx = 0; shard_idx < num_shards; ++shard_idx)
            splitted_blocks[shard_idx].getByPosition(col_idx_in_block).column = std::move(splitted_columns[shard_idx]);
    }
    return splitted_blocks;
}
void DistributedBlockOutputStream::writeSplitAsync(const Block & block)