- 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. ...
dropAndCreateLocalTable(create_table_pull_ast);
    if (create_split)
    {
        auto create_table_split_piece_ast = rewriteCreateQueryStorage(
                create_query_ast,
                task_shard.main_table_split_shard,
                task_table.main_engine_split_ast);
        dropAndCreateLocalTable(create_table_split_piece_ast);
        
        for (const auto & piece_number : ext::range(0, task_table.number_of_splits))
        {
            const auto & storage_piece_split_ast = task_table.auxiliary_engine_split_asts[piece_number];
            create_table_split_piece_ast = rewriteCreateQueryStorage(
                    create_query_ast,
                    task_shard.list_of_split_tables_on_shard[piece_number],
                    storage_piece_split_ast);
            dropAndCreateLocalTable(create_table_split_piece_ast);
        }
    }
}
std::set<String> ClusterCopier::getShardPartitions(const ConnectionTimeouts & timeouts, TaskShard & task_shard)
{
    std::set<String> res;
    createShardInternalTables(timeouts, task_shard, false);
    TaskTable & task_table = task_shard.task_table;
    const String & partition_name = queryToString(task_table.engine_push_partition_key_ast);
    if (partition_name == "'all'")
    {
        res.emplace("'all'");
        return res;