- some copier work needs to be improved

1. clickhouse create destionation table just once if success
2. support settings_push.replication_alter_partitions_sync =1 at attach partition 
3. ...
UInt64 num_remote_replicas = num_replicas - num_local_replicas;
        
        for (UInt64 i = 0; i < num_local_replicas; ++i)
        {
            auto interpreter = InterpreterFactory::get(query_ast, context);
            interpreter->execute();
            if (increment_and_check_exit())
                return;
        }
        
        if (shard.hasRemoteConnections())
        {
            shard_settings.max_parallel_replicas = num_remote_replicas ? num_remote_replicas : 1;
            auto timeouts = ConnectionTimeouts::getTCPTimeoutsWithFailover(shard_settings).getSaturated(shard_settings.max_execution_time);
            auto connections = shard.pool->getMany(timeouts, &shard_settings, pool_mode);
            Context shard_context(context);
            shard_context.setSettings(shard_settings);
            for (auto & connection : connections)
            {
                if (connection.isNull())
                    continue;
                try
                {
                    
                    RemoteBlockInputStream stream{*connection, query, Block{}, shard_context};
                    NullBlockOutputStream output{Block{}};
                    copyData(stream, output);
                    if (increment_and_check_exit())
                        return;
                }